mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
NSString fixes from Stevo Crvenkovski
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@2672 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ec7562e25e
commit
b55bf54177
5 changed files with 193 additions and 42 deletions
65
ChangeLog
65
ChangeLog
|
@ -1,3 +1,68 @@
|
|||
Sun Dec 7 23:22:07 1997 Stevo Crvenkovski <stevo@btinternet.com>
|
||||
|
||||
* src/NSGCString.m ([NSGMutableCString
|
||||
-initWithCharactersNoCopy:length:freeWhenDone:]): Changed to
|
||||
invoke instance of NSGMutableString.
|
||||
* src/NSGString.m ([NSGMutableString
|
||||
-initWithCStringNoCopy:length:freeWhenDone:]): Changed to invoke
|
||||
instance of NSGMutableCString.
|
||||
|
||||
* src/NSGString.m ([NSGMutableString
|
||||
-initWithCharactersNoCopy:length:freeWhenDone:]): Method
|
||||
implemented. Based on code by Richard Frith-Macdonald
|
||||
<richard@brainstorm.co.uk>
|
||||
|
||||
* src/NSGCString.m ([NSGMutableCString
|
||||
-initWithCStringNoCopy:length:freeWhenDone:]): Changed to fix
|
||||
memory leak in this method. Code by Richard Frith-Macdonald
|
||||
<richard@brainstorm.co.uk>
|
||||
|
||||
* src/NSGCString.m ([NSGCString -dealoc]): Changed to avoid
|
||||
compiler warning.
|
||||
* src/NSGCString.m ([NSGCString -initWithCStringNoCopy: length:
|
||||
freeWhenDone:]): Changed to conform with class cluster definition.
|
||||
* src/NSGString.m ([NSGString -initWithCharactersNoCopy: length:
|
||||
freeWhenDone:]): Idem.
|
||||
* src/NSGCString.m ([NSGMutableCString -initWithCapacity]): Idem.
|
||||
* src/NSString.m ([NSString -init]): Idem.
|
||||
* src/NSGCString.m ([NSGCString -init]): Method implemented to
|
||||
conform with class cluster definition.
|
||||
* src/NSGCString.m ([NSGMutableCString -init]): Idem.
|
||||
* src/NSGString.m ([NSGString -init]): Idem.
|
||||
* src/NSGString.m ([NSGMutableString -init]): Idem.
|
||||
|
||||
* src/NSString.m ([NSString -replaceCharactersInRange:
|
||||
withString:]): Change to be subclass responsibillty. This should
|
||||
be pimitive method.
|
||||
|
||||
* src/NSGString.m ([NSGString -replaceCharactersInRange:
|
||||
withString:]): Move implementation from NSString here.
|
||||
* src/NSGCString.m ([NSGCString -replaceCharactersInRange:
|
||||
withString:]): Idem.
|
||||
|
||||
* src/NSString.m ([NSString +stringWithString]): New OPENSTEP
|
||||
method implemented.
|
||||
* src/NSString.m ([NSString -substringFromRange]): Method
|
||||
implemented
|
||||
* src/NSString.m ([NSString -substringWithRange]): New OPENSTEP
|
||||
method implemented.
|
||||
* src/NSString.m ([NSString -hash]): Remove C String
|
||||
implementation as Unicode implementation now works.
|
||||
* src/NSString.m ([NSString -getFileSystemRepresentation]) Correct
|
||||
name of method.
|
||||
* src/NSString.m ([NSString -_normalizedString]):Bug fixed.
|
||||
* src/NSString.m ([NSString -mutableCopy]): Implemented to avoid
|
||||
compiler warning. Why is this warning anyway? Method should be
|
||||
inherited from NSObject.
|
||||
* src/NSString.m ([NSString -deleteCharactersInRange:]): Method
|
||||
implemented.
|
||||
* src/NSString.m ([NSString -insertString: atIndex:]): Method
|
||||
implemented.
|
||||
* src/NSString.m ([NSString -setString:]): Method implemented.
|
||||
* src/NSString.h ([NSString +stringWithString:]): Method declared.
|
||||
* src/NSString.h ([NSString -substringWithRange:]): Method
|
||||
declared.
|
||||
|
||||
Fri Nov 28 12:52:06 1997 Scott Christley <scottc@net-community.com>
|
||||
|
||||
* Tools/GNUmakefile (OBJC_PROGRAM_NAME): Reverse prior change.
|
||||
|
|
|
@ -202,6 +202,7 @@ typedef enum _NSStringEncoding
|
|||
- (NSString*) _normalizedString;
|
||||
|
||||
#ifndef STRICT_OPENSTEP
|
||||
+ (NSString*) stringWithString: (NSString*) aString;
|
||||
+ (NSString*) localizedStringWithFormat: (NSString*) format, ...;
|
||||
+ (NSString*) stringWithFormat: (NSString*)format
|
||||
arguments: (va_list)argList;
|
||||
|
@ -210,6 +211,7 @@ typedef enum _NSStringEncoding
|
|||
- (id) initWithFormat: (NSString*)format
|
||||
locale: (NSDictionary*)dictionary
|
||||
arguments: (va_list)argList;
|
||||
- (NSString*) substringWithRange: (NSRange)aRange;
|
||||
- (NSComparisonResult) caseInsensitiveCompare: (NSString*)aString;
|
||||
- (BOOL) writeToFile: (NSString*)filename
|
||||
atomically: (BOOL)useAuxiliaryFile;
|
||||
|
|
|
@ -39,7 +39,8 @@
|
|||
|
||||
- (void)dealloc
|
||||
{
|
||||
[self _collectionDealloc];
|
||||
if (_free_contents)
|
||||
OBJC_FREE(_contents_chars);
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
@ -52,6 +53,7 @@
|
|||
_count = length;
|
||||
_contents_chars = byteString;
|
||||
_free_contents = flag;
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -66,6 +68,11 @@
|
|||
return a;
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
return [self initWithCString:""];
|
||||
}
|
||||
|
||||
- (void) _collectionReleaseContents
|
||||
{
|
||||
return;
|
||||
|
@ -269,6 +276,7 @@ stringDecrementCountAndFillHoleAt(NSGMutableCStringStruct *self,
|
|||
OBJC_MALLOC(_contents_chars, char, _capacity);
|
||||
_contents_chars[0] = '\0';
|
||||
_free_contents = YES;
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -278,6 +286,14 @@ stringDecrementCountAndFillHoleAt(NSGMutableCStringStruct *self,
|
|||
range.location, range.length);
|
||||
}
|
||||
|
||||
// xxx This should be primitive method
|
||||
- (void) replaceCharactersInRange: (NSRange)range
|
||||
withString: (NSString*)aString
|
||||
{
|
||||
[self deleteCharactersInRange:range];
|
||||
[self insertString:aString atIndex:range.location];
|
||||
}
|
||||
|
||||
- (void) insertString: (NSString*)aString atIndex:(unsigned)index
|
||||
{
|
||||
unsigned c = [aString cStringLength];
|
||||
|
@ -336,11 +352,30 @@ stringDecrementCountAndFillHoleAt(NSGMutableCStringStruct *self,
|
|||
length: (unsigned int)length
|
||||
freeWhenDone: (BOOL)flag
|
||||
{
|
||||
[self initWithCapacity:length];
|
||||
[self setCString:byteString length:length];
|
||||
_count = length;
|
||||
_capacity = length+1;
|
||||
_contents_chars = byteString;
|
||||
_free_contents = flag;
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
/* Override NSString's designated initializer for Unicode Strings. */
|
||||
- (id) initWithCharactersNoCopy: (unichar*)chars
|
||||
length: (unsigned int)length
|
||||
freeWhenDone: (BOOL)flag
|
||||
{
|
||||
id a = [[NSGMutableString alloc] initWithCharactersNoCopy: chars
|
||||
length: length
|
||||
freeWhenDone: flag];
|
||||
[self release];
|
||||
return a;
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
return [self initWithCString:""];
|
||||
};
|
||||
|
||||
/* For IndexedCollecting Protocol and other GNU libobjects conformity. */
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
_count = length;
|
||||
_contents_chars = chars;
|
||||
_free_contents = flag;
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -91,6 +92,14 @@
|
|||
return a;
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
unichar *u;
|
||||
OBJC_MALLOC(u, unichar,1);
|
||||
u[0]=(unichar)0;
|
||||
return [self initWithCharactersNoCopy:u length:0 freeWhenDone: YES];
|
||||
}
|
||||
|
||||
// Getting a String's Length
|
||||
|
||||
- (unsigned int) length
|
||||
|
@ -325,6 +334,14 @@ stringDecrementCountAndFillHoleAt(NSGMutableStringStruct *self,
|
|||
range.location, range.length);
|
||||
}
|
||||
|
||||
// xxx This should be primitive method
|
||||
- (void) replaceCharactersInRange: (NSRange)range
|
||||
withString: (NSString*)aString
|
||||
{
|
||||
[self deleteCharactersInRange:range];
|
||||
[self insertString:aString atIndex:range.location];
|
||||
}
|
||||
|
||||
// xxx Check this
|
||||
- (void) insertString: (NSString*)aString atIndex:(unsigned)index
|
||||
{
|
||||
|
@ -372,17 +389,39 @@ stringDecrementCountAndFillHoleAt(NSGMutableStringStruct *self,
|
|||
_count = length;
|
||||
}
|
||||
|
||||
// xxx This should not be in this class
|
||||
/* Override NSString's designated initializer for CStrings. */
|
||||
- (id) initWithCStringNoCopy: (char*)byteString
|
||||
length: (unsigned int)length
|
||||
freeWhenDone: (BOOL)flag
|
||||
{
|
||||
[self initWithCapacity:length];
|
||||
[self setCString:byteString length:length];
|
||||
id a = [[NSGMutableCString alloc] initWithCStringNoCopy: byteString
|
||||
length: length
|
||||
freeWhenDone: flag];
|
||||
[self release];
|
||||
return a;
|
||||
}
|
||||
|
||||
/* Override NSString's designated initializer for Unicode Strings. */
|
||||
- (id) initWithCharactersNoCopy: (unichar*)chars
|
||||
length: (unsigned int)length
|
||||
freeWhenDone: (BOOL)flag
|
||||
{
|
||||
_count = length;
|
||||
_capacity = length+1;
|
||||
_contents_chars = chars;
|
||||
_free_contents = flag;
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
unichar *u;
|
||||
OBJC_MALLOC(u, unichar,1);
|
||||
u[0]=(unichar)0;
|
||||
return [self initWithCharactersNoCopy:u length:0 freeWhenDone: YES];
|
||||
}
|
||||
|
||||
/* For IndexedCollecting Protocol and other GNU libobjects conformity. */
|
||||
|
||||
/* xxx This should be made to return void, but we need to change
|
||||
|
|
|
@ -232,6 +232,11 @@ handle_printf_atsign (FILE *stream,
|
|||
return [[[self alloc] init] autorelease];
|
||||
}
|
||||
|
||||
+ (NSString*) stringWithString: (NSString*)aString
|
||||
{
|
||||
return [[[self alloc] initWithString: aString] autorelease];
|
||||
}
|
||||
|
||||
+ (NSString*) stringWithCharacters: (const unichar*)chars
|
||||
length: (unsigned int)length
|
||||
{
|
||||
|
@ -557,10 +562,10 @@ handle_printf_atsign (FILE *stream,
|
|||
#endif
|
||||
}
|
||||
|
||||
// xxx check this
|
||||
- (id) init
|
||||
{
|
||||
return [self initWithCString:""];
|
||||
[super init];
|
||||
return self;
|
||||
}
|
||||
|
||||
// Getting a String's Length
|
||||
|
@ -664,8 +669,25 @@ handle_printf_atsign (FILE *stream,
|
|||
|
||||
- (NSString*) substringFromRange: (NSRange)aRange
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
return self;
|
||||
unichar *buf;
|
||||
id ret;
|
||||
|
||||
if (aRange.location > [self length])
|
||||
[NSException raise: NSRangeException format:@"Invalid location."];
|
||||
if (aRange.length > ([self length] - aRange.location))
|
||||
[NSException raise: NSRangeException format:@"Invalid location+length."];
|
||||
if (aRange.length == 0)
|
||||
return @"";
|
||||
OBJC_MALLOC(buf, unichar, aRange.length+1);
|
||||
[self getCharacters:buf range:aRange];
|
||||
ret = [[self class] stringWithCharacters:buf length:aRange.length];
|
||||
OBJC_FREE(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (NSString*) substringWithRange: (NSRange)aRange
|
||||
{
|
||||
return [self substringFromRange: aRange];
|
||||
}
|
||||
|
||||
- (NSString*) substringToIndex: (unsigned int)index
|
||||
|
@ -1433,35 +1455,17 @@ else
|
|||
}
|
||||
|
||||
- (unsigned int) hash
|
||||
#if 1
|
||||
// xxx C string implementation
|
||||
{
|
||||
unsigned ret = 0;
|
||||
unsigned ctr = 0;
|
||||
unsigned char_count = 0;
|
||||
const char *s = [self cStringNoCopy];
|
||||
|
||||
while (*s && char_count++ < NSHashStringLength)
|
||||
{
|
||||
ret ^= *s++ << ctr;
|
||||
ctr = (ctr + 1) % sizeof (void*);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
// xxx Unicode string implementation - check !!!
|
||||
|
||||
{
|
||||
unsigned ret = 0;
|
||||
unsigned ctr = 0;
|
||||
unsigned char_count = 0;
|
||||
unichar *s,*p;
|
||||
int len;
|
||||
|
||||
id g = [self _normalizedString];
|
||||
len = [g length];
|
||||
int len = [g length];
|
||||
OBJC_MALLOC(s, unichar, len + 1);
|
||||
[g getCharacters: s];
|
||||
s[len]=(unichar)0;
|
||||
p = s;
|
||||
while (*p && char_count++ < NSHashStringLength)
|
||||
{
|
||||
|
@ -1471,7 +1475,6 @@ else
|
|||
OBJC_FREE(s);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Getting a Shared Prefix
|
||||
|
||||
|
@ -1833,7 +1836,7 @@ else
|
|||
return [self cString];
|
||||
}
|
||||
|
||||
- (BOOL)fileSystemRepresentation: (char*)buffer maxLength: (unsigned int)size
|
||||
- (BOOL)getFileSystemRepresentation: (char*)buffer maxLength: (unsigned int)size
|
||||
{
|
||||
const char* ptr = [self cStringNoCopy];
|
||||
if (strlen(ptr) > size)
|
||||
|
@ -2127,7 +2130,7 @@ else
|
|||
|
||||
unichar *u, *upoint;
|
||||
NSRange r;
|
||||
id seq;
|
||||
id seq,ret;
|
||||
int len = [self length];
|
||||
int count = 0;
|
||||
OBJC_MALLOC(u, unichar, len*MAXDEC+1);
|
||||
|
@ -2143,9 +2146,10 @@ else
|
|||
}
|
||||
*upoint = (unichar)0;
|
||||
|
||||
return [self initWithCharactersNoCopy:u
|
||||
length: uslen(u)
|
||||
freeWhenDone:YES];
|
||||
ret = [NSString stringWithCharacters:u
|
||||
length: uslen(u)];
|
||||
OBJC_FREE(u);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// #ifndef STRICT_OPENSTEP
|
||||
|
@ -2171,6 +2175,7 @@ else
|
|||
// #endif
|
||||
|
||||
// #ifndef NO_GNUSTEP
|
||||
// This method should be removed
|
||||
- (const char *) cStringNoCopy
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
@ -2261,6 +2266,11 @@ else
|
|||
return [self copyWithZone: NSDefaultMallocZone ()];
|
||||
}
|
||||
|
||||
- mutableCopy
|
||||
{
|
||||
return [self mutableCopyWithZone: NSDefaultMallocZone ()];
|
||||
}
|
||||
|
||||
- mutableCopyWithZone: (NSZone*)zone
|
||||
{
|
||||
return [[[[self class] _mutableConcreteClass] allocWithZone:zone]
|
||||
|
@ -2372,25 +2382,25 @@ else
|
|||
|
||||
- (void) deleteCharactersInRange: (NSRange)range
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self replaceCharactersInRange:range withString:nil];
|
||||
}
|
||||
|
||||
- (void) insertString: (NSString*)aString atIndex:(unsigned)loc
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
NSRange range = {loc, 0};
|
||||
[self replaceCharactersInRange:range withString:aString];
|
||||
}
|
||||
|
||||
/* Inefficient. */
|
||||
- (void) replaceCharactersInRange: (NSRange)range
|
||||
withString: (NSString*)aString
|
||||
{
|
||||
[self deleteCharactersInRange:range];
|
||||
[self insertString:aString atIndex:range.location];
|
||||
[self subclassResponsibility:_cmd];
|
||||
}
|
||||
|
||||
- (void) setString: (NSString*)aString
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
NSRange range = {0, [self length]};
|
||||
[self replaceCharactersInRange:range withString:aString];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in a new issue