mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 00:11:26 +00:00
Tidied
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@5294 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
d4c4e59396
commit
7a7a91d766
4 changed files with 65 additions and 6 deletions
|
@ -8,9 +8,35 @@
|
|||
#include <Foundation/NSException.h>
|
||||
#include <Foundation/NSString.h>
|
||||
#include <Foundation/NSRange.h>
|
||||
#include <Foundation/NSScanner.h>
|
||||
|
||||
@class NSString;
|
||||
|
||||
static Class NSStringClass = 0;
|
||||
static Class NSScannerClass = 0;
|
||||
static SEL scanIntSel = @selector(scanInt:);
|
||||
static SEL scanStringSel = @selector(scanString:intoString:);
|
||||
static SEL scannerSel = @selector(scannerWithString:);
|
||||
static BOOL (*scanIntImp)(NSScanner*, SEL, int*);
|
||||
static BOOL (*scanStringImp)(NSScanner*, SEL, NSString*, NSString**);
|
||||
static id (*scannerImp)(Class, SEL, NSString*);
|
||||
|
||||
static inline void
|
||||
setupCache()
|
||||
{
|
||||
if (NSStringClass == 0)
|
||||
{
|
||||
NSStringClass = [NSString class];
|
||||
NSScannerClass = [NSScanner class];
|
||||
scanIntImp = (BOOL (*)(NSScanner*, SEL, int*))
|
||||
[NSScannerClass instanceMethodForSelector: scanIntSel];
|
||||
scanStringImp = (BOOL (*)(NSScanner*, SEL, NSString*, NSString**))
|
||||
[NSScannerClass instanceMethodForSelector: scanStringSel];
|
||||
scannerImp = (id (*)(Class, SEL, NSString*))
|
||||
[NSScannerClass methodForSelector: scannerSel];
|
||||
}
|
||||
}
|
||||
|
||||
NSRange
|
||||
NSMakeRange(unsigned int location, unsigned int length)
|
||||
{
|
||||
|
@ -27,10 +53,33 @@ NSMakeRange(unsigned int location, unsigned int length)
|
|||
return range;
|
||||
}
|
||||
|
||||
NSRange
|
||||
NSRangeFromString(NSString* string)
|
||||
{
|
||||
NSScanner *scanner;
|
||||
NSRange range;
|
||||
|
||||
setupCache();
|
||||
scanner = (*scannerImp)(NSScannerClass, scannerSel, string);
|
||||
if ((*scanStringImp)(scanner, scanStringSel, @"{", NULL)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @"location", NULL)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @"=", NULL)
|
||||
&& (*scanIntImp)(scanner, scanIntSel, &range.location)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @";", NULL)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @"length", NULL)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @"=", NULL)
|
||||
&& (*scanIntImp)(scanner, scanIntSel, &range.length)
|
||||
&& (*scanStringImp)(scanner, scanStringSel, @"}", NULL))
|
||||
return range;
|
||||
else
|
||||
return NSMakeRange(0, 0);
|
||||
}
|
||||
|
||||
NSString *
|
||||
NSStringFromRange(NSRange range)
|
||||
{
|
||||
return [NSString stringWithFormat: @"{location = %d, length = %d}",
|
||||
range.location, range.length];
|
||||
setupCache();
|
||||
return [NSStringClass stringWithFormat: @"{location = %d, length = %d}",
|
||||
range.location, range.length];
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue