git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@5294 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 1999-11-26 20:06:17 +00:00
parent d4c4e59396
commit 7a7a91d766
4 changed files with 65 additions and 6 deletions

View file

@ -3,6 +3,8 @@ Fri Nov 26 19:46:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
* Headers/Foundation/NSString.h: Tidied and fixed return types for
for a few methods.
* Source/NSString.m: ditto.
* Headers/NSRange.h: Added NSRangeFromString()
* Source/NSRange.m: Implemented NSRangeFromString()
Sun Nov 21 6:35:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>

View file

@ -1,5 +1,5 @@
/* Interface for NSObject for GNUStep
* Copyright (C) 1995,199 Free Software Foundation, Inc.
/*
* Copyright (C) 1995,1999 Free Software Foundation, Inc.
*
* Written by: Adam Fedor <fedor@boulder.colorado.edu>
* Date: 1995
@ -134,8 +134,8 @@ NSIntersectionRange (NSRange aRange, NSRange bRange)
@class NSString;
extern NSString *
NSStringFromRange(NSRange range);
extern NSString *NSStringFromRange(NSRange range);
extern NSRange NSRangeFromString(NSString *aString);
#ifdef GS_DEFINED_MAX
#undef GS_DEFINED_MAX

View file

@ -282,6 +282,14 @@ enum {
@protocol NSMutableString <NSString>
// Creating Temporary Strings
+ (id) string;
+ (id) stringWithCharacters: (const unichar*)chars
length: (unsigned int)length;
+ (id) stringWithCString: (const char*)byteString
length: (unsigned int)length;
+ (id) stringWithCString: (const char*) byteString;
+ (id) stringWithFormat: (NSString*)format,...;
+ (id) stringWithContentsOfFile:(NSString *)path;
+ (NSMutableString*) stringWithCapacity: (unsigned)capacity;
// Initializing Newly Allocated Strings

View file

@ -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];
}