mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
hashtable bugfix
GSI code version optional. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@12358 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f6901afbe4
commit
59e387cc17
14 changed files with 150 additions and 17 deletions
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
|||
2002-02-01 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSHashTable.m: Fixed bug intorduced by last change to add
|
||||
error checking!!
|
||||
* Source/GSAttributedString.m: Make new or old GSI stuff optional.
|
||||
* Source/GSCountedSet.m: ditto
|
||||
* Source/GSDictionary.m: ditto
|
||||
* Source/GSFFCallInvocation.m: ditto
|
||||
* Source/NSArchiver.m: ditto
|
||||
* Source/NSConnection.m: ditto
|
||||
* Source/NSFileManager.m: ditto
|
||||
* Source/NSNotificationCenter.m: ditto
|
||||
* Source/NSObject.m: ditto
|
||||
* Source/NSPortCoder.m: ditto
|
||||
* Source/NSRunLoop.m: ditto
|
||||
* Source/NSSerializer.m: ditto
|
||||
* Source/NSUnarchiver.m: ditto
|
||||
Interim phase ... version of source which should build with new or
|
||||
old GSIMap and GSIArray APIs at the defination of GSI_NEW
|
||||
|
||||
2002-01-31 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Old/*: Removed (now at
|
||||
|
|
|
@ -91,12 +91,19 @@
|
|||
|
||||
|
||||
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW 1
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#define GSI_MAP_EQUAL(M, X,Y) [(X).obj isEqualToDictionary: (Y).obj]
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#define GSI_MAP_EQUAL(X,Y) [(X).obj isEqualToDictionary: (Y).obj]
|
||||
#endif
|
||||
|
||||
#define GSI_MAP_KTYPES GSUNION_OBJ
|
||||
#define GSI_MAP_VTYPES GSUNION_INT
|
||||
|
|
|
@ -32,9 +32,14 @@
|
|||
#include <Foundation/NSDebug.h>
|
||||
|
||||
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#endif
|
||||
|
||||
#define GSI_MAP_KTYPES GSUNION_OBJ
|
||||
#define GSI_MAP_VTYPES GSUNION_INT
|
||||
|
||||
|
@ -293,7 +298,11 @@
|
|||
{
|
||||
GSIMapNode node;
|
||||
|
||||
#ifdef GSI_NEW
|
||||
node = GSIMapNodeForKeyInBucket(&map, bucket, (GSIMapKey)anObject);
|
||||
#else
|
||||
node = GSIMapNodeForKeyInBucket(bucket, (GSIMapKey)anObject);
|
||||
#endif
|
||||
if (node != 0)
|
||||
{
|
||||
if (--node->value.uint == 0)
|
||||
|
|
|
@ -33,17 +33,23 @@
|
|||
|
||||
#include <base/behavior.h>
|
||||
|
||||
#define GSI_NEW 1
|
||||
/*
|
||||
* The 'Fastmap' stuff provides an inline implementation of a mapping
|
||||
* table - for maximum performance.
|
||||
*/
|
||||
#define GSI_MAP_KTYPES GSUNION_OBJ
|
||||
#define GSI_MAP_VTYPES GSUNION_OBJ
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_HASH(M, X) [X.obj hash]
|
||||
#define GSI_MAP_EQUAL(M, X,Y) [X.obj isEqual: Y.obj]
|
||||
#define GSI_MAP_RETAIN_KEY(M, X) ((id)(X).obj) = \
|
||||
[((id)(X).obj) copyWithZone: map->zone]
|
||||
#else
|
||||
#define GSI_MAP_HASH(X) [X.obj hash]
|
||||
#define GSI_MAP_EQUAL(X,Y) [X.obj isEqual: Y.obj]
|
||||
#define GSI_MAP_RETAIN_KEY(X) ((id)(X).obj) = \
|
||||
[((id)(X).obj) copyWithZone: map->zone]
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
|
|
|
@ -106,13 +106,21 @@ ReturnTypeEqualsReturnType (vacallReturnTypeInfo *a, vacallReturnTypeInfo *b)
|
|||
&& (a->type == b->type);
|
||||
}
|
||||
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_HASH(M, X) ReturnTypeHash (X.ptr)
|
||||
#define GSI_MAP_EQUAL(M, X,Y) ReturnTypeEqualsReturnType (X.ptr, Y.ptr)
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#else
|
||||
#define GSI_MAP_HASH(X) ReturnTypeHash (X.ptr)
|
||||
#define GSI_MAP_EQUAL(X,Y) ReturnTypeEqualsReturnType (X.ptr, Y.ptr)
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
|
|
|
@ -28,13 +28,21 @@
|
|||
/*
|
||||
* Setup for inline operation of pointer map tables.
|
||||
*/
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#define GSI_MAP_HASH(M, X) ((X).uint)
|
||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).uint == (Y).uint)
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#define GSI_MAP_HASH(X) ((X).uint)
|
||||
#define GSI_MAP_EQUAL(X ,Y) ((X).uint == (Y).uint)
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
|
|
|
@ -37,13 +37,21 @@
|
|||
/*
|
||||
* Setup for inline operation of pointer map tables.
|
||||
*/
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#define GSI_MAP_HASH(M, X) ((X).uint ^ ((X).uint >> 3))
|
||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).ptr == (Y).ptr)
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#define GSI_MAP_HASH(X) ((X).uint ^ ((X).uint >> 3))
|
||||
#define GSI_MAP_EQUAL(X,Y) ((X).ptr == (Y).ptr)
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
|
|
|
@ -1376,12 +1376,16 @@ inline void gsedRelease(GSEnumeratedDirectory X)
|
|||
closedir(X.pointer);
|
||||
}
|
||||
|
||||
#define GSI_NEW 1
|
||||
#define GSI_ARRAY_TYPES 0
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_ARRAY_TYPE GSEnumeratedDirectory
|
||||
|
||||
#define GSI_ARRAY_RELEASE(A, X) gsedRelease(X.ext)
|
||||
#define GSI_ARRAY_RETAIN(A, X)
|
||||
#else
|
||||
#define GSI_ARRAY_EXTRA GSEnumeratedDirectory
|
||||
#define GSI_ARRAY_RELEASE(X) gsedRelease(X.ext)
|
||||
#define GSI_ARRAY_RETAIN(X)
|
||||
#endif
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
||||
|
|
|
@ -110,16 +110,20 @@ static void obsRetain(Observation *o);
|
|||
static void obsFree(Observation *o);
|
||||
|
||||
|
||||
#define GSI_NEW 1
|
||||
|
||||
#define GSI_ARRAY_TYPES 0
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_ARRAY_TYPE Observation*
|
||||
|
||||
#define GSI_ARRAY_RELEASE(A, X) obsFree(X.ext)
|
||||
#define GSI_ARRAY_RETAIN(A, X) obsRetain(X.ext)
|
||||
#else
|
||||
#define GSI_ARRAY_EXTRA Observation*
|
||||
#define GSI_ARRAY_RELEASE(X) obsFree(X.ext)
|
||||
#define GSI_ARRAY_RETAIN(X) obsRetain(X.ext)
|
||||
#endif
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X) ({if ((((gsaddr)X.obj) & 1) == 0) \
|
||||
RELEASE(X.obj);})
|
||||
|
@ -127,6 +131,15 @@ static void obsFree(Observation *o);
|
|||
#define GSI_MAP_EQUAL(M, X,Y) doEqual(X.obj, Y.obj)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X) ({if ((((gsaddr)X.obj) & 1) == 0) \
|
||||
RELEASE(X.obj);})
|
||||
#define GSI_MAP_HASH(X) doHash(X.obj)
|
||||
#define GSI_MAP_EQUAL(X,Y) doEqual(X.obj, Y.obj)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#endif
|
||||
|
||||
#define GSI_MAP_KTYPES GSUNION_OBJ|GSUNION_INT
|
||||
#define GSI_MAP_VTYPES GSUNION_PTR
|
||||
|
|
|
@ -225,13 +225,21 @@ NSDecrementExtraRefCountWasZero(id anObject)
|
|||
|
||||
#else
|
||||
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_EQUAL(M, X, Y) (X.obj == Y.obj)
|
||||
#define GSI_MAP_HASH(M, X) (X.ptr >> 2)
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#else
|
||||
#define GSI_MAP_EQUAL(X, Y) (X.obj == Y.obj)
|
||||
#define GSI_MAP_HASH(X) (X.ptr >> 2)
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#endif
|
||||
#define GSI_MAP_KTYPES GSUNION_OBJ
|
||||
#define GSI_MAP_VTYPES GSUNION_INT
|
||||
|
||||
|
|
|
@ -49,21 +49,34 @@
|
|||
/*
|
||||
* Setup for inline operation of pointer map tables.
|
||||
*/
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#define GSI_MAP_HASH(M, X) ((X).uint)
|
||||
#define GSI_MAP_EQUAL(M, X,Y) ((X).uint == (Y).uint)
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#define GSI_MAP_HASH(X) ((X).uint)
|
||||
#define GSI_MAP_EQUAL(X,Y) ((X).uint == (Y).uint)
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
/*
|
||||
* Setup for inline operation of arrays.
|
||||
*/
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_ARRAY_RETAIN(A, X)
|
||||
#define GSI_ARRAY_RELEASE(A, X)
|
||||
#else
|
||||
#define GSI_ARRAY_RETAIN(X)
|
||||
#define GSI_ARRAY_RELEASE(X)
|
||||
#endif
|
||||
#define GSI_ARRAY_TYPES GSUNION_OBJ|GSUNION_SEL|GSUNION_STR
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
|
|
@ -306,10 +306,10 @@ static inline BOOL timerInvalidated(NSTimer* timer)
|
|||
* Setup for inline operation of arrays.
|
||||
*/
|
||||
|
||||
#define GSI_NEW 1
|
||||
|
||||
#define GSI_ARRAY_TYPES GSUNION_OBJ
|
||||
|
||||
#ifdef GSI_NEW
|
||||
|
||||
#if GS_WITH_GC == 0
|
||||
#define GSI_ARRAY_RELEASE(A, X) [(X).obj release]
|
||||
#define GSI_ARRAY_RETAIN(A, X) [(X).obj retain]
|
||||
|
@ -318,6 +318,18 @@ static inline BOOL timerInvalidated(NSTimer* timer)
|
|||
#define GSI_ARRAY_RETAIN(A, X)
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#if GS_WITH_GC == 0
|
||||
#define GSI_ARRAY_RELEASE(X) [(X).obj release]
|
||||
#define GSI_ARRAY_RETAIN(X) [(X).obj retain]
|
||||
#else
|
||||
#define GSI_ARRAY_RELEASE(X)
|
||||
#define GSI_ARRAY_RETAIN(X)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
||||
static NSComparisonResult aSort(GSIArrayItem i0, GSIArrayItem i1)
|
||||
|
|
|
@ -50,21 +50,34 @@
|
|||
/*
|
||||
* Setup for inline operation of string map tables.
|
||||
*/
|
||||
#define GSI_NEW 1
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_MAP_RETAIN_KEY(M, X)
|
||||
#define GSI_MAP_RELEASE_KEY(M, X)
|
||||
#define GSI_MAP_RETAIN_VAL(M, X)
|
||||
#define GSI_MAP_RELEASE_VAL(M, X)
|
||||
#define GSI_MAP_HASH(M, X) [(X).obj hash]
|
||||
#define GSI_MAP_EQUAL(M, X,Y) [(X).obj isEqualToString: (Y).obj]
|
||||
#else
|
||||
#define GSI_MAP_RETAIN_KEY(X)
|
||||
#define GSI_MAP_RELEASE_KEY(X)
|
||||
#define GSI_MAP_RETAIN_VAL(X)
|
||||
#define GSI_MAP_RELEASE_VAL(X)
|
||||
#define GSI_MAP_HASH(X) [(X).obj hash]
|
||||
#define GSI_MAP_EQUAL(X,Y) [(X).obj isEqualToString: (Y).obj]
|
||||
#endif
|
||||
|
||||
#include <base/GSIMap.h>
|
||||
|
||||
/*
|
||||
* Setup for inline operation of string arrays.
|
||||
*/
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_ARRAY_RETAIN(A, X)
|
||||
#define GSI_ARRAY_RELEASE(A, X)
|
||||
#else
|
||||
#define GSI_ARRAY_RETAIN(X)
|
||||
#define GSI_ARRAY_RELEASE(X)
|
||||
#endif
|
||||
#define GSI_ARRAY_TYPES GSUNION_OBJ
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
|
|
@ -31,12 +31,16 @@
|
|||
#include <Foundation/NSException.h>
|
||||
#include <Foundation/NSByteOrder.h>
|
||||
|
||||
#define GSI_NEW 1
|
||||
/*
|
||||
* Setup for inline operation of arrays.
|
||||
*/
|
||||
#ifdef GSI_NEW
|
||||
#define GSI_ARRAY_RETAIN(A, X)
|
||||
#define GSI_ARRAY_RELEASE(A, X)
|
||||
#else
|
||||
#define GSI_ARRAY_RETAIN(X)
|
||||
#define GSI_ARRAY_RELEASE(X)
|
||||
#endif
|
||||
#define GSI_ARRAY_TYPES GSUNION_OBJ|GSUNION_SEL|GSUNION_STR
|
||||
|
||||
#include <base/GSIArray.h>
|
||||
|
|
Loading…
Reference in a new issue