diff --git a/ChangeLog b/ChangeLog index dfff04a10..b19467c99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +1999-06-24 Adam Fedor + + * Source/include/GSIArray.h (GSIArrayRemoveLastItem): New function. + (GSIArrayLastItem): Likewise. + (GSIArrayCopyWithZone): Likewise. + Tue Jun 22 16:15:00 1999 Richard Frith-Macdonald * Source/NSThread.m: Various changes to tidy up notification handling diff --git a/Headers/gnustep/base/GSIArray.h b/Headers/gnustep/base/GSIArray.h index bbed61dbe..cc96e1dca 100644 --- a/Headers/gnustep/base/GSIArray.h +++ b/Headers/gnustep/base/GSIArray.h @@ -313,6 +313,16 @@ GSIArrayRemoveItemAtIndex(GSIArray array, unsigned index) GSI_ARRAY_RELEASE(tmp); } +static INLINE void +GSIArrayRemoveLastItem(GSIArray array) +{ +#ifdef GSI_ARRAY_CHECKS + NSCAssert(array->count, NSInvalidArgumentException); +#endif + GSI_ARRAY_RELEASE(array->ptr[array->count-1]); + array->count--; +} + static INLINE void GSIArrayRemoveItemAtIndexNoRelease(GSIArray array, unsigned index) { @@ -348,6 +358,15 @@ GSIArrayItemAtIndex(GSIArray array, unsigned index) return array->ptr[index]; } +static INLINE GSIArrayItem +GSIArrayLastItem(GSIArray array) +{ +#ifdef GSI_ARRAY_CHECKS + NSCAssert(array->count, NSInvalidArgumentException); +#endif + return array->ptr[array->count-1]; +} + static INLINE void GSIArrayClear(GSIArray array) { @@ -423,3 +442,18 @@ GSIArrayInitWithZoneAndCapacity(GSIArray array, NSZone *zone, size_t capacity) return array; } +static INLINE GSIArray +GSIArrayCopyWithZone(GSIArray array, NSZone *zone) +{ + int i; + GSIArray new; + new = NSZoneMalloc(zone, sizeof(GSIArray_t)); + GSIArrayInitWithZoneAndCapacity(new, zone, array->count); + + for (i = 0; i < array->count; i++) + { + GSI_ARRAY_RETAIN(array->ptr[i]); + new->ptr[new->count++] = array->ptr[i]; + } + return new; +} diff --git a/Source/NSNotificationCenter.m b/Source/NSNotificationCenter.m index be11e39bc..40ac9c960 100644 --- a/Source/NSNotificationCenter.m +++ b/Source/NSNotificationCenter.m @@ -87,6 +87,7 @@ static void FreeList(Observation *list) static void *RetainObs(Observation *o) { o->retained++; + return o; } static unsigned oHash(void* t, Observation *o)