Status Report ************* Please send corrections to . *Key:* *[10]* Complete and tested. *[8]* Missing a few non-core methods, definitely usable. *[6]* Missing several methods, but core is there, usable. *[4]* Begun, but missing core functionality, not usable. *[2]* Skeleton. *[0]* Nothing there. *[?]* Unknown status. Classes ======= (Many classes do not raise the proper NSExceptions yet.) *NSArchiver:: [8]* Doesn't yet call -awakeAfterUsingCoder:. *NSArray:: [9]* *NSAssertionHandler:: [9]* *NSAttributedString:: [8]* *NSAutoreleasePool:: [9]* But not exception- safe *NSBundle:: [8]* *NSCalendarDate:: [7]* *NSCharacterSet:: [8]* decomposableCharacterSet and illegalCharacter set missing *NSCoder:: [8]* Missing class name substitution methods. *NSConditionLock:: [8]* *NSConnection:: [7]* GNU Connection, however, needs: * to handle retain/release/dealloc properly * to be integrated with NSInvocation * to incorporate futzing with low-level TCP-backend for better speed * to have UDP-backend work * to cache ConnectedCoder's for better speed * Thread-safety overhaul, this is major *NSCountedSet:: [8]* *NSData:: [8]* *NSDate:: [8]* *NSDeserializer:: [7]* *NSDictionary:: [8]* *NSDistantObject:: [7]* *NSDistributedLock:: [7]* *NSEnumerator:: [9]* *NSException:: [9]* But this needs integration with new, better *NSFileHandle:: [9]* *NSFileManager:: [9]* *NSHashTable:: [8]* *NSHost:: [8]* *NSInvocation:: [3]* *NSLock:: [8]* *NSMapTable:: [8]* *NSMethodSignature:: [4]* *NSMutableArray:: [8]* *NSMutableCharacterSet:: [7]* *NSMutableData:: [8]* *NSMutableDictionary:: [8]* *NSMutableSet:: [8]* *NSMutableString:: [8]* *NSNotification:: [9]* *NSNotificationCenter:: [9]* *NSNotificationQueue:: [6]* Needs integration with NSRunLoop, and efficiency improvements *NSNumber:: [9]* *NSObject:: [10]* *NSProcessInfo:: [9]* *NSProxy:: [7]* *NSRecursiveLock:: [8]* *NSRunLoop:: [8]* NSTimer's not yet working, but everything else should be *NSScanner:: [8]* *NSSerializer:: [7]* *NSSet:: [8]* *NSString:: [8]* Careful, relationship with GNU String is tricky; this could also use fixing. *NSTask:: [8]* *NSThread:: [8]* *NSTimeZone:: [8]* *NSTimeZoneDetail:: [8]* *NSTimer:: [6]* Working out bugs with returning doubles. *NSUnarchiver:: [8]* See NSArchvier *NSUserDefaults:: [8]* *NSValue:: [9]* Cross-Class Projects, or GNU-related foundations for GNUstep classes ==================================================================== *Finish subclasses of Port class: Ports based on UDP, pflocal* sockets, and shared memory. *String classes will get some organizational work.* Protocols ========= *NSCoding:: [9]* *NSCopying:: [9]* *NSLocking:: [9]* *NSMutableCopying:: [9]* *NSObjCTypeSerializationCallBack:: [9]* *NSObject (Protocol):: [9]* Functions ========= Memory Allocation Functions --------------------------- *[8] Get the Virtual Memory Page Size* `unsigned NSPageSize (void)' `unsigned NSLogPageSize (void)' `unsigned NSRoundDownToMultipleOfPageSize (unsigned BYTECOUNT)' `unsigned NSRoundUpToMultipleOfPageSize (unsigned BYTECOUNT)' *[2] Get the Amount of Real Memory* `unsigned NSRealMemoryAvailable (void)' *[8] Allocate or Free Virtual Memory* `void *NSAllocateMemoryPages (unsigned BYTECOUNT)' `void NSDeallocateMemoryPages (void *POINTER, unsigned BYTECOUNT)' `void NSCopyMemoryPages (const void *SOURCE, void *DESTINATION, unsigned BYTECOUNT)' *[8] Child and Merge Zones* void NSMergeZone(NSZone *zonep) NSZone *NSCreateChildZone(NSZone *parentZone, size_t startSize, size_t granularity, int canFree) *[9] Get a Zone* `NSZone *NSCreateZone (unsigned STARTSIZE, unsigned GRANULARITY, BOOL CANFREE)' `NSZone *NSDefaultMallocZone (void)' `NSZone *NSZoneFromPointer (void *POINTER)' *[10] Allocate or Free Memory in a Zone* `void *NSZoneMalloc (NSZone *ZONE,' `void *NSZoneCalloc (NSZone *ZONE, unsigned NUMELEMS, unsigned NUMBYTES)' `void *NSZoneRealloc (NSZone *ZONE, void *POINTER, unsigned SIZE)' `void NSRecycleZone (NSZone *ZONE)' `void NSZoneFree (NSZone *ZONE, void *POINTER)' *[9] Name a Zone* But the function names are wrong `void NSSetZoneName (NSZone *ZONE, NSString *name)' `NSString *NSZoneName (NSZone *ZONE)' Object Allocation Functions --------------------------- *[10] Allocate or Free an Object* `NSObject *NSAllocateObject (Class ACLASS, unsigned EXTRABYTES, NSZone *ZONE)' `NSObject *NSCopyObject(NSObject *ANOBJECT, unsigned EXTRABYTES, NSZone *ZONE)' `void NSDeallocateObject (NSObject *ANOBJECT)' *[9] Decide Whether to Retain an Object* `BOOL NSShouldRetainWithZone (NSObject *ANOBJECT, NSZone *REQUESTEDZONE)' *[9] Modify the Number of References to an Object* `BOOL NSDecrementExtraRefCountWasZero(id ANOBJECT)' `void NSIncrementExtraRefCount(id ANOBJECT)' Error-Handling Functions ------------------------ *[9] Change the Top-level Error Handler* ``NSUncaughtException'Handler *`NSGetUncaughtException'Handler(void)' `void `NSSetUncaughtException'Handler(`NSUncaughtException'Handler *HANDLER)' *[9] Macros to Handle an Exception* `NS_DURING' `NS_ENDHANDLER' `NS_HANDLER' `NS_VALUERETURN(VALUE, TYPE)' `NS_VOIDRETURN' *[9] Call the Assertion Handler from the Body of an Objective-C Method* `NSAssert(BOOL CONDITION, NSString *DESCRIPTION)' `NSAssert1(BOOL CONDITION, NSString *DESCRIPTION, ARG)' `NSAssert2(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2)' `NSAssert3(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2, ARG3)' `NSAssert4(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2, ARG3, ARG4)' `NSAssert5(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2, ARG3, ARG4, ARG5)' *[9] Call the Assertion Handler from the Body of a C Function* `NSCAssert(BOOL CONDITION, NSString *DESCRIPTION)' `NSCAssert1(BOOL CONDITION, NSString *DESCRIPTION, ARG)' `NSCAssert2(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2)' `NSCAssert3(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2, ARG3)' `NSCAssert4(BOOL CONDITION, NSString *DESCRIPTION, arg1, ARG2, ARG3, ARG4)' `NSCAssert5(BOOL CONDITION, NSString *DESCRIPTION, ARG1, ARG2, ARG3, ARG4, ARG5)' *[9] Validate a Parameter* `NSParameterAssert(BOOL CONDITION)' `NSCParameterAssert(BOOL CONDITION)' Geometric Functions ------------------- *[10] Create Basic Structures* `NSPoint NSMakePoint(float X, float Y)' `NSSize NSMakeSize(float W, float H)' `NSRect NSMakeRect(float X, float Y, float W, float H)' `NSRange NSMakeRange(unsigned int LOCATION, unsigned int LENGTH)' *[10] Get a Rectangle's Coordinates* `float NSMaxX(NSRect ARECT)' `float NSMaxY(NSRect ARECT)' `float NSMidX(NSRect ARECT)' `float NSMidY(NSRect ARECT)' `float NSMinX(NSRect ARECT)' `float NSMinY(NSRect ARECT)' `float NSWidth(NSRect ARECT)' `float NSHeight(NSRect ARECT)' *[10] Modify a Copy of a Rectangle* `NSRect NSInsetRect(NSRect ARECT, float DX, float DY)' `NSRect NSOffsetRect(NSRect ARECT, float DX, float DY)' `void NSDivideRect(NSRect INRECT, NSRect *SLICE, NSRect *REMAINDER, float AMOUNT, NSRectEdge EDGE)' `NSRect NSIntegralRect(NSRect ARECT)' *[10] Compute a Third Rectangle from Two Rectangles* `NSRect NSUnionRect(NSRect ARECT, NSRect BRECT)' `NSRect NSIntersectionRect(NSRect ARECT, NSRect BRECT)' *[10] Test Geometric Relationships* `BOOL NSEqualRects(NSRect ARECT, NSRect BRECT)' `BOOL NSEqualSizes(NSSize ASIZE, NSSize BSIZE)' `BOOL NSEqualPoints(NSPoint APOINT, NSPoint BPOINT)' `BOOL NSIsEmptyRect(NSRect ARECT)' `BOOL NSMouseInRect(NSPoint APOINT, NSRect ARECT, BOOL FLIPPED)' `BOOL NSPointInRect(NSPoint APOINT, NSRect ARECT)' `BOOL NSContainsRect(NSRect ARECT, NSRect BRECT)' *[10] Get a String Representation* `NSString *NSStringFromPoint(NSPoint APOINT)' `NSString *NSStringFromRect(NSRect ARECT)' `NSString *NSStringFromSize(NSSize ASIZE)' Range Functions --------------- *[9] Query a Range* `BOOL NSEqualRanges(NSRange RANGE1, NSRange RANGE2)' `unsigned NSMaxRange(NSRange RANGE)' `BOOL NSLocationInRange(unsigned LOCATION, NSRange RANGE)' *[9] Compute a Range from Two Other Ranges* `NSRange NSUnionRange(NSRange RANGE1, NSRange RANGE2)' `NSRange NSIntersectionRange(NSRange RANGE1, NSRange RANGE2)' *[9] Get a String Representation* `NSString *NSStringFromRange(NSRange RANGE)' Hash Table Functions -------------------- *[8]* Create a Table `NSHashTable * NSCreateHashTable(NSHashTableCallBacks CALLBACKS, unsigned CAPACITY)' `NSHashTable * NSCreateHashTableWithZone(NSHashTableCallBacks CALLBACKS, unsigned CAPACITY, NSZone * ZONE)' `NSHashTable * NSCopyHashTableWithZone(NSHashTable * TABLE, NSZone * ZONE)' Free a Table `void NSFreeHashTable(NSHashTable * TABLE)' `void NSResetHashTable(NSHashTable * TABLE)' Compare Two Tables `BOOL NSCompareHashTables(NSHashTable * TABLE1, NSHashTable * TABLE2)' Get the Number of Items `unsigned NSCountHashTable(NSHashTable * TABLE)' Returns the number of elements in TABLE. Retrieve Items `void * NSHashGet(NSHashTable * TABLE, const void * POINTER)' `NSArray * NSAllHashTableObjects(NSHashTable * TABLE)' `NSHashEnumerator NSEnumerateHashTable(NSHashTable * TABLE)' `void * NSNextHashEnumeratorItem(NSHashEnumerator * ENUMERATOR)' Add or Remove an Item `void NSHashInsert(NSHashTable * TABLE, const void * POINTER)' `void NSHashInsertKnownAbsent(NSHashTable * TABLE, const void * POINTER)' `void * NSHashInsertIfAbsent(NSHashTable * TABLE, const void * POINTER)' `void NSHashRemove(NSHashTable * TABLE, const void * POINTER)' Get a String Representation `NSString * NSStringFromHashTable(NSHashTable * TABLE)' Map Table Functions ------------------- *[8]* Create a Table `NSMapTable * NSCreateMapTable(NSMapTableKeyCallBacks KEYCALLBACKS, NSMapTableValueCallBacks VALUECALLBACKS, unsigned CAPACITY)' `NSMapTable * NSCreateMapTableWithZone(NSMapTableKeyCallBacks KEYCALLBACKS, NSMapTableValueCallBacks VALUECALLBACKS, unsigned CAPACITY,' `NSMapTable * NSCopyMapTableWithZone(NSMapTable * TABLE, NSZone * ZONE)' Free a Table `void NSFreeMapTable(NSMapTable * TABLE)' `void NSResetMapTable(NSMapTable * TABLE)' Compare Two Tables: `BOOL NSCompareMapTables(NSMapTable * TABLE1, NSMapTable * TABLE2)' Get the Number of Items `unsigned NSCountMapTable(NSMapTable * TABLE)' Retrieve Items `BOOL NSMapMember(NSMapTable * TABLE, const void * KEY, void ** ORIGINALKEY, void ** VALUE)' `void * NSMapGet(NSMapTable * TABLE,' `NSMapEnumerator NSEnumerateMapTable(NSMapTable * TABLE)' `BOOL NSNextMapEnumeratorPair(NSMapEnumerator * ENUMERATOR, void ** KEY, void ** VALUE)' `NSArray * NSAllMapTableKeys(NSMapTable * TABLE)' `NSArray * NSAllMapTableValues(NSMapTable * TABLE)' Add or Remove an Item `void NSMapInsert(NSMapTable * TABLE, const void * KEY, const void * VALUE)' `void * NSMapInsertIfAbsent(NSMapTable * TABLE, const void * KEY, const void * VALUE)' `void NSMapInsertKnownAbsent(NSMapTable * TABLE, const void * KEY, const void * VALUE)' `void NSMapRemove(NSMapTable * TABLE,' `NSString *NSStringFromMapTable(NSMapTable *TABLE)' Miscellaneous Functions ----------------------- *[7] Get Information about a User* `NSString *NSUserName(void)' `NSString *NSHomeDirectory(void)' `NSString *NSHomeDirectoryForUser(NSString *USERNAME)' *[9] Log an Error Message* `void NSLog(NSString *format,...' `void NSLogv(NSString * FORMAT, va_list ARGS)' *[8] Get Localized Versions of Strings* `NSString * NSLocalizedString(NSString * KEY, NSString * COMMENT)' `NSString * NSLocalizedStringFromTable(NSString * KEY, NSString * TABLENAME, NSString * COMMENT)' `NSString * NSLocalizedStringFromTableInBundle(NSString * KEY, NSString * TABLENAME, NSBundle * ABUNDLE, NSString * COMMENT)' *[9] Convert to and from a String* `Class NSClassFromString(NSString *ACLASSNAME)' `SEL NSSelectorFromString(NSString *ASELECTORNAME)' `NSString *NSStringFromClass(Class ACLASS)' `NSString *NSStringFromSelector(SEL ASELECTOR)' *[3] Compose a Message To Be Sent Later to an Object* `NSInvocation *NS_INVOCATION(Class ACLASS, INSTANCEMESSAGE)' `NSInvocation *NS_MESSAGE(id ANOBJECT, INSTANCEMESSAGE)'