mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-21 04:32:03 +00:00
performance tweak
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@31404 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
fdd4894770
commit
8214f1edf0
2 changed files with 54 additions and 43 deletions
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,8 @@
|
||||||
|
2010-09-24 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/NSCharacterSet.m: Build using the faster but more memory
|
||||||
|
hungry implementation. Add comments to say why we are doing so.
|
||||||
|
|
||||||
2010-09-20 Wolfgang Lux <wolfgang.lux@gmail.com>
|
2010-09-20 Wolfgang Lux <wolfgang.lux@gmail.com>
|
||||||
|
|
||||||
* Source/ObjectiveC2/runtime.c (method_getImplementation,
|
* Source/ObjectiveC2/runtime.c (method_getImplementation,
|
||||||
|
@ -40,17 +45,18 @@
|
||||||
|
|
||||||
2010-09-15 Eric Wasylishen <ewasylishen@gmail.com>
|
2010-09-15 Eric Wasylishen <ewasylishen@gmail.com>
|
||||||
|
|
||||||
* Source/objc-load.m: Don't compile the dynamic_handles code with libobjc2.
|
* Source/objc-load.m: Don't compile the dynamic_handles code with
|
||||||
Note that this appears to be dead code anyway, so maybe it should be removed
|
libobjc2.
|
||||||
altogether?
|
Note that this appears to be dead code anyway, so maybe it should
|
||||||
|
be removed altogether?
|
||||||
|
|
||||||
2010-09-15 Eric Wasylishen <ewasylishen@gmail.com>
|
2010-09-15 Eric Wasylishen <ewasylishen@gmail.com>
|
||||||
|
|
||||||
* Source/NSMessagePort.m:
|
* Source/NSMessagePort.m:
|
||||||
* Source/NSFileManager.m:
|
* Source/NSFileManager.m:
|
||||||
* Source/NSCharacterSet.m: Fix some method type mismatches. Generally when
|
* Source/NSCharacterSet.m: Fix some method type mismatches.
|
||||||
a private subclass overrides a public method taking a NSUInteger with
|
Generally when a private subclass overrides a public method
|
||||||
a method taking an "unsigned" parameter.
|
taking a NSUInteger with a method taking an "unsigned" parameter.
|
||||||
|
|
||||||
2010-09-12 Riccardo Mottola
|
2010-09-12 Riccardo Mottola
|
||||||
|
|
||||||
|
|
|
@ -41,20 +41,25 @@
|
||||||
#import "Foundation/NSData.h"
|
#import "Foundation/NSData.h"
|
||||||
#import "GNUstepBase/NSObject+GNUstepBase.h"
|
#import "GNUstepBase/NSObject+GNUstepBase.h"
|
||||||
|
|
||||||
#define GNUSTEP_INDEX_CHARSET 1
|
/* Using and index set to hold a characterset is more space efficient but
|
||||||
//#undef GNUSTEP_INDEX_CHARSET
|
* on the intel core-2 system I benchmarked on, it made my applications
|
||||||
|
* about 20% slower.
|
||||||
|
* It only makes sense to build base to use index charactersets on machines
|
||||||
|
* with a very low memory (eg PDAs), and possibly not even there.
|
||||||
|
*/
|
||||||
|
//#define GNUSTEP_INDEX_CHARSET 1
|
||||||
|
#undef GNUSTEP_INDEX_CHARSET
|
||||||
|
|
||||||
#import "NSCharacterSetData.h"
|
#import "NSCharacterSetData.h"
|
||||||
|
|
||||||
//PENDING: may want to make these less likely to conflict
|
#define GSUNICODE_MAX 1114112
|
||||||
#define UNICODE_MAX 1114112
|
#define GSBITMAP_SIZE 8192
|
||||||
#define BITMAP_SIZE 8192
|
#define GSBITMAP_MAX 139264
|
||||||
#define BITMAP_MAX 139264
|
|
||||||
|
|
||||||
#ifndef SETBIT
|
#ifndef GSSETBIT
|
||||||
#define SETBIT(a,i) ((a) |= 1<<(i))
|
#define GSSETBIT(a,i) ((a) |= 1<<(i))
|
||||||
#define CLRBIT(a,i) ((a) &= ~(1<<(i)))
|
#define GSCLRBIT(a,i) ((a) &= ~(1<<(i)))
|
||||||
#define ISSET(a,i) ((a) & (1<<(i)))
|
#define GSISSET(a,i) ((a) & (1<<(i)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@interface _GSIndexCharSet : NSCharacterSet
|
@interface _GSIndexCharSet : NSCharacterSet
|
||||||
|
@ -112,7 +117,7 @@
|
||||||
{
|
{
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
i *= BITMAP_SIZE;
|
i *= GSBITMAP_SIZE;
|
||||||
if (i < _length)
|
if (i < _length)
|
||||||
{
|
{
|
||||||
return [NSData dataWithBytes: _data length: i];
|
return [NSData dataWithBytes: _data length: i];
|
||||||
|
@ -124,7 +129,7 @@
|
||||||
{
|
{
|
||||||
unsigned byte = aCharacter/8;
|
unsigned byte = aCharacter/8;
|
||||||
|
|
||||||
if (byte < _length && ISSET(_data[byte], aCharacter % 8))
|
if (byte < _length && GSISSET(_data[byte], aCharacter % 8))
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
@ -167,10 +172,10 @@
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (aPlane * BITMAP_SIZE < _length)
|
if (aPlane * GSBITMAP_SIZE < _length)
|
||||||
{
|
{
|
||||||
unsigned i = BITMAP_SIZE * aPlane;
|
unsigned i = GSBITMAP_SIZE * aPlane;
|
||||||
unsigned e = BITMAP_SIZE * (aPlane + 1);
|
unsigned e = GSBITMAP_SIZE * (aPlane + 1);
|
||||||
|
|
||||||
while (i < e)
|
while (i < e)
|
||||||
{
|
{
|
||||||
|
@ -197,7 +202,7 @@
|
||||||
{
|
{
|
||||||
unsigned length = [bitmap length];
|
unsigned length = [bitmap length];
|
||||||
|
|
||||||
if ((length % BITMAP_SIZE) != 0 || length > BITMAP_MAX)
|
if ((length % GSBITMAP_SIZE) != 0 || length > GSBITMAP_MAX)
|
||||||
{
|
{
|
||||||
NSLog(@"attempt to initialize character set with invalid bitmap");
|
NSLog(@"attempt to initialize character set with invalid bitmap");
|
||||||
[self dealloc];
|
[self dealloc];
|
||||||
|
@ -226,14 +231,14 @@
|
||||||
{
|
{
|
||||||
unsigned byte = aCharacter/8;
|
unsigned byte = aCharacter/8;
|
||||||
|
|
||||||
if (aCharacter >= UNICODE_MAX)
|
if (aCharacter >= GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
[NSException raise: NSInvalidArgumentException
|
||||||
format: @"[%@-%@] argument (0x%08x) is too large",
|
format: @"[%@-%@] argument (0x%08x) is too large",
|
||||||
NSStringFromClass([self class]), NSStringFromSelector(_cmd),
|
NSStringFromClass([self class]), NSStringFromSelector(_cmd),
|
||||||
aCharacter];
|
aCharacter];
|
||||||
}
|
}
|
||||||
if (byte < _length && ISSET(_data[byte], aCharacter % 8))
|
if (byte < _length && GSISSET(_data[byte], aCharacter % 8))
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
@ -259,7 +264,7 @@
|
||||||
NSUInteger b;
|
NSUInteger b;
|
||||||
|
|
||||||
m = NSMaxRange(aRange);
|
m = NSMaxRange(aRange);
|
||||||
if (m > UNICODE_MAX)
|
if (m > GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise:NSInvalidArgumentException
|
[NSException raise:NSInvalidArgumentException
|
||||||
format:@"Specified range exceeds character set"];
|
format:@"Specified range exceeds character set"];
|
||||||
|
@ -277,7 +282,7 @@
|
||||||
{
|
{
|
||||||
while (b >= _length)
|
while (b >= _length)
|
||||||
{
|
{
|
||||||
_length += BITMAP_SIZE;
|
_length += GSBITMAP_SIZE;
|
||||||
}
|
}
|
||||||
[_obj setLength: _length];
|
[_obj setLength: _length];
|
||||||
_data = [_obj mutableBytes];
|
_data = [_obj mutableBytes];
|
||||||
|
@ -289,7 +294,7 @@
|
||||||
b = i / 8;
|
b = i / 8;
|
||||||
while (i % 8 != 0 && i < m)
|
while (i % 8 != 0 && i < m)
|
||||||
{
|
{
|
||||||
SETBIT(_data[b], i % 8);
|
GSSETBIT(_data[b], i % 8);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +312,7 @@
|
||||||
b = i / 8;
|
b = i / 8;
|
||||||
while (i < m)
|
while (i < m)
|
||||||
{
|
{
|
||||||
SETBIT(_data[b], i % 8);
|
GSSETBIT(_data[b], i % 8);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
_known = 0; // Invalidate cache
|
_known = 0; // Invalidate cache
|
||||||
|
@ -353,12 +358,12 @@
|
||||||
{
|
{
|
||||||
while (byte >= _length)
|
while (byte >= _length)
|
||||||
{
|
{
|
||||||
_length += BITMAP_SIZE;
|
_length += GSBITMAP_SIZE;
|
||||||
}
|
}
|
||||||
[_obj setLength: _length];
|
[_obj setLength: _length];
|
||||||
_data = [_obj mutableBytes];
|
_data = [_obj mutableBytes];
|
||||||
}
|
}
|
||||||
SETBIT(_data[byte], letter % 8);
|
GSSETBIT(_data[byte], letter % 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_known = 0; // Invalidate cache
|
_known = 0; // Invalidate cache
|
||||||
|
@ -372,7 +377,7 @@
|
||||||
{
|
{
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
i *= BITMAP_SIZE;
|
i *= GSBITMAP_SIZE;
|
||||||
return [NSData dataWithBytes: _data length: i];
|
return [NSData dataWithBytes: _data length: i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +426,7 @@
|
||||||
unsigned length = [bitmap length];
|
unsigned length = [bitmap length];
|
||||||
id tmp;
|
id tmp;
|
||||||
|
|
||||||
if ((length % BITMAP_SIZE) != 0 || length > BITMAP_MAX)
|
if ((length % GSBITMAP_SIZE) != 0 || length > GSBITMAP_MAX)
|
||||||
{
|
{
|
||||||
NSLog(@"attempt to initialize character set with invalid bitmap");
|
NSLog(@"attempt to initialize character set with invalid bitmap");
|
||||||
[self dealloc];
|
[self dealloc];
|
||||||
|
@ -447,10 +452,10 @@
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
if (_length < BITMAP_MAX)
|
if (_length < GSBITMAP_MAX)
|
||||||
{
|
{
|
||||||
[_obj setLength: BITMAP_MAX];
|
[_obj setLength: GSBITMAP_MAX];
|
||||||
_length = BITMAP_MAX;
|
_length = GSBITMAP_MAX;
|
||||||
_data = [_obj mutableBytes];
|
_data = [_obj mutableBytes];
|
||||||
}
|
}
|
||||||
for (i = 0; i < _length; i++)
|
for (i = 0; i < _length; i++)
|
||||||
|
@ -465,7 +470,7 @@
|
||||||
unsigned i;
|
unsigned i;
|
||||||
unsigned limit = NSMaxRange(aRange);
|
unsigned limit = NSMaxRange(aRange);
|
||||||
|
|
||||||
if (NSMaxRange(aRange) > UNICODE_MAX)
|
if (NSMaxRange(aRange) > GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise:NSInvalidArgumentException
|
[NSException raise:NSInvalidArgumentException
|
||||||
format:@"Specified range exceeds character set"];
|
format:@"Specified range exceeds character set"];
|
||||||
|
@ -478,7 +483,7 @@
|
||||||
}
|
}
|
||||||
for (i = aRange.location; i < limit; i++)
|
for (i = aRange.location; i < limit; i++)
|
||||||
{
|
{
|
||||||
CLRBIT(_data[i/8], i % 8);
|
GSCLRBIT(_data[i/8], i % 8);
|
||||||
}
|
}
|
||||||
_known = 0; // Invalidate cache
|
_known = 0; // Invalidate cache
|
||||||
}
|
}
|
||||||
|
@ -522,7 +527,7 @@
|
||||||
byte = letter/8;
|
byte = letter/8;
|
||||||
if (byte < _length)
|
if (byte < _length)
|
||||||
{
|
{
|
||||||
CLRBIT(_data[byte], letter % 8);
|
GSCLRBIT(_data[byte], letter % 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -842,7 +847,7 @@ static Class concreteMutableClass = nil;
|
||||||
{
|
{
|
||||||
if (imp(self, @selector(characterIsMember:), i) == YES)
|
if (imp(self, @selector(characterIsMember:), i) == YES)
|
||||||
{
|
{
|
||||||
SETBIT(p[i/8], i % 8);
|
GSSETBIT(p[i/8], i % 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return m;
|
return m;
|
||||||
|
@ -997,7 +1002,7 @@ static Class concreteMutableClass = nil;
|
||||||
{
|
{
|
||||||
int plane = (aCharacter >> 16);
|
int plane = (aCharacter >> 16);
|
||||||
|
|
||||||
if (aCharacter >= UNICODE_MAX)
|
if (aCharacter >= GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
[NSException raise: NSInvalidArgumentException
|
||||||
format: @"[%@-%@] argument (0x%08x) is too large",
|
format: @"[%@-%@] argument (0x%08x) is too large",
|
||||||
|
@ -1389,7 +1394,7 @@ static Class concreteMutableClass = nil;
|
||||||
|
|
||||||
- (void) addCharactersInRange: (NSRange)aRange
|
- (void) addCharactersInRange: (NSRange)aRange
|
||||||
{
|
{
|
||||||
if (NSMaxRange(aRange) > UNICODE_MAX)
|
if (NSMaxRange(aRange) > GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise:NSInvalidArgumentException
|
[NSException raise:NSInvalidArgumentException
|
||||||
format:@"Specified range exceeds character set"];
|
format:@"Specified range exceeds character set"];
|
||||||
|
@ -1574,7 +1579,7 @@ static Class concreteMutableClass = nil;
|
||||||
/* No more indexes, so we have a gap to the end of all
|
/* No more indexes, so we have a gap to the end of all
|
||||||
* unicode characters which we can invert.
|
* unicode characters which we can invert.
|
||||||
*/
|
*/
|
||||||
index = UNICODE_MAX;
|
index = GSUNICODE_MAX;
|
||||||
}
|
}
|
||||||
r.length = index - r.location;
|
r.length = index - r.location;
|
||||||
[tmp addIndexesInRange: r];
|
[tmp addIndexesInRange: r];
|
||||||
|
@ -1586,7 +1591,7 @@ static Class concreteMutableClass = nil;
|
||||||
|
|
||||||
- (void) removeCharactersInRange: (NSRange)aRange
|
- (void) removeCharactersInRange: (NSRange)aRange
|
||||||
{
|
{
|
||||||
if (NSMaxRange(aRange) > UNICODE_MAX)
|
if (NSMaxRange(aRange) > GSUNICODE_MAX)
|
||||||
{
|
{
|
||||||
[NSException raise:NSInvalidArgumentException
|
[NSException raise:NSInvalidArgumentException
|
||||||
format:@"Specified range exceeds character set"];
|
format:@"Specified range exceeds character set"];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue