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:
Adam Fedor 1997-12-08 20:04:16 +00:00
parent ec7562e25e
commit b55bf54177
5 changed files with 193 additions and 42 deletions

View file

@ -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.

View file

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

View file

@ -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. */

View file

@ -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

View file

@ -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