diff --git a/Documentation/advertisement.texi b/Documentation/advertisement.texi deleted file mode 100644 index 82a24dfc2..000000000 --- a/Documentation/advertisement.texi +++ /dev/null @@ -1,160 +0,0 @@ -@chapter GNU Objective-C Class Library - -@c set the vars GNUSTEP-BASE-VERSION and GCC-VERSION -@include version.tmpl.texi - -The GNUstep Base Library (libgnustep-base) is a library of -general-purpose, non-graphical Objective C objects written by Andrew -McCallum. What `libg++' is to GNU's C++, `libgnustep-base' is to GNU's -Objective C. - -The library features collection objects for maintaining groups of -objects and C types, strings for handling collections of characters, -streams for I/O to various destinations, coders for formating objects -and C types to byte streams, ports for network packet transmission, -distributed objects (remote object messaging), pseudo-random number -generators, and time handling facilities. - -@itemize @bullet - -@item -The heirarchy of collection objects are similar in spirit to Smalltalk's -collections. A deep inheritance heirarchy provides good uniformity of -method names across different collection classes. All collections can -hold simple C types (such as int's and floats) as well as Objects. The -collection classes include simple collections (Set, Bag), collections -with contents accessible by unordered keys (Dictionary, -MappedCollector), collections with ordered contents (Array, LinkedList, -Stack, Queue, Heap, BinaryTree, RBTree, SplayTree, GapArray). There is -also a DelegatePool object that can forward messages it receives to an -arbitrary number of delegate objects. - -@item -String objects... - -@item -Stream objects provide a consistent interface for reading and writing -bytes. `StdioStream' objects work with files, file descriptors, FILE -pointers and pipes to/from executables. `MemoryStream' objects work -with memory buffers that grow automatically as needed. For all Stream -objects there are methods for writing/reading arbitrary n-length -buffers, newline-terminated lines, and printf-style strings. - -@item -Coders provide a formatted way of writing to Streams. After a coder is -initialized with a stream, the coder can encode/decode Objective C -objects and C types in an architecture-independent way. The currently -available concrete coder classes are `BinaryCoder', for reading and -writing a compact stream of illegible bytes, and `TextCoder', for -reading and writing human-readable structured textual representation -(which you can also process with `perl', `awk', or whatever scripting -language you like). - -Coders and streams can be mixed and matched so that programmers can -choose the destination and the format separately. - -@item -The distributed object support classes are @samp{Connection}, -@samp{Proxy}, @samp{ConnectedCoder}, @samp{Port} and @samp{SocketPort}. -This version of the distributed objects only works with sockets. A Mach -port back-end should be on the way. - -[NOTE: The GNU distributed object facilities have the same ease-of-use -as NeXT's; be warned, however, that they are not compatible with each -other. They have different class heirarchies, different instance -variables, different method names, different implementation strategies -and different network message formats. You cannot communicate with a -NeXT NXConnection using a GNU Connection. NXConnection creates NXProxy -objects for local objects as well as remote objects; GNU Connection -doesn't need and doesn't create proxies for local objects. NXProxy asks -it's remote target for the method encoding types and caches the results; -GNU Proxy gets the types directly from the local GNU "typed selector" -mechanism and has no need for querying the remote target or caching -encoding types. The NXProxy for the remote root object always has name -0 and, once set, you cannot change the root object of a NXConnection; -the GNU Proxy for the remote root object has a target address value just -like all other Proxy's, and you can change the root object as many times -as you like. See the "lacking-capabilities" list below for a partial -list of things that NXConnection can do that GNU Connection cannot.] - -Here is a partial list of what the current distributed objects system -can do: -@smallexample -* It can pass and return all simple C types, including char*, float - and double, both by value and by reference. -* It can pass structures by value and by reference, return - structures by reference. The structures can contain arrays. -* It obeys all the type qualifiers: oneway, in, out, inout, const. -* It can pass and return objects, either bycopy or with proxies. - An object encoded multiple times in a single message is properly - decoded on the other side. -* Proxies to remote objects are automatically created as they are - returned. Proxies passed back where they came from are decoded - as the correct local object. -* It can wait for an incoming message and timeout after a - specified period. -* A server can handle multiple clients. -* The server will ask its delegate before making new connections. -* The server can make call-back requests of the client, and keep - it all straight even when the server has multiple clients. -* A client will automatically form a connection to another client - if an object from the other client is vended to it. (i.e. Always - make a direct connection rather than forwarding messages twice, - once into the server, from there out to the other client.) -* The server will clean up its connection to a client if the client - says goodbye (i.e. if the client connection is freed). -* When the connection is being freed it will send a invalidation - notification message to those objects that have registered for - such notification. -* Servers and clients can be on different machines of different - architectures; byte-order and all other architecture-dependent - nits are taken care of for you. You can have SPARC, i386, m68k, - and MIPS machines all distributed-object'ing away together in - one big web of client-server connections! -@end smallexample - -Here is a partial list of what the current distributed objects system -does *not* do: -@smallexample -* Run multi-threaded. -* Detect port deaths (due to remote application crash, for example) - and do something graceful. -* Send exceptions in the server back to the client. -* Return structures by value. -* Use Mach ports, pass Mach ports, pass Mach virtual memory. -* Send messages more reliably than UDP. It does detect reply - timeouts and message-out-of-order conditions, but it's reaction - is simply to abort. -* Claim to be thoroughly tested. -@end smallexample - -@end itemize - -@section Getting It, and Compiling It - -The library is available by anonymous ftp at URL: -@smallexample -ftp://prep.ai.mit.edu/pub/gnu/libgnustep-base-@value{GNUSTEP-BASE-VERSION}.tar.gz -@end smallexample -Since @samp{prep} is heavily loaded, you are encouraged to use GNU -mirror sites. - -The most recent (not necessarily tested) snapshots of the library will -be placed at @samp{ftp://alpha.gnu.ai.mit.edu/gnu}. - -@include machines.texi - -@section GNUStep - -The @samp{libgnustep-base} library already contains many of the GNUStep -common classes: List, HashTable, Storage, NXStringTable. In the future -it will also contain the foundation kit classes for GNUStep. Progress -is already being made on this front. - -@section Contact: -@example -Andrew McCallum -mccallum@@gnu.ai.mit.edu -@end example - -@bye diff --git a/Documentation/machines.texi b/Documentation/machines.texi deleted file mode 100644 index 84add288d..000000000 --- a/Documentation/machines.texi +++ /dev/null @@ -1,37 +0,0 @@ -@c set the vars GNUSTEP-BASE-VERSION and GNUSTEP-BASE-GCC-VERSION -@include version.tmpl.texi - -THIS INFORMATION IS OUT-OF-DATE. - -The library requires gcc @value{GCC-VERSION} or higher. The -library does not work with the NEXTSTEP 3.2 compiler because that -version of NeXT's cc cannot handle nested functions. Until a later -release from NeXT, NEXTSTEP users will have to install gcc. See the -@samp{INSTALL} file for more instructions about compiling and installing -the library. - -The library has been successfully compiled and tested with the following -configurations: -@smallexample - mips-sgi-irix5.2 -@end smallexample - -Some previous snapshots of the library worked with these configurations, -but they haven't been tested recently. We are looking for a volunteer -to write a test suite using dejagnu. -@smallexample - sparc-sun-sunos4.1.3 - m68k-next-nextstep3.0 - rs6000-ibm-aix3.2 - sparc-sun-solaris2.3 - i386-unknown-linux - i386-sun-solaris2.4 - i386-unknown-sysv4.0 - mips-dec-ultrix4.2 - HP/UX 9.01 -@end smallexample - -It is known not to work with: -@smallexample - alpha-dec-osf -@end smallexample diff --git a/STATUS b/STATUS deleted file mode 100644 index 078b98f12..000000000 --- a/STATUS +++ /dev/null @@ -1,388 +0,0 @@ -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)' - diff --git a/TODO b/TODO deleted file mode 100644 index 31cb3c0e6..000000000 --- a/TODO +++ /dev/null @@ -1,202 +0,0 @@ -Todo -**** - -Projects Looking for Volunteers -=============================== - -If you think you can do one of these projects, please let me know. Your -help is greatly appreciated. Send email to `fedor@gnu.org'. - - * Fix NSLog so it conforms to specs. Need to check that write to - stderr went ok, and if not write to syslog. Also need to serealize - output (with threads). - - * Simplify NSException and NSAssertionHandler and make sure they - don't cause race conditions (if an exception is raised while - processing an exception. - - * Fix all the places marked FIXME or xxx. - - * Need to improve the testsuite and actually run it on gstep-base. - - * Change all the assert()'s (especially in the archiving code) to - NSAssert()'s. This will help make D.O. servers more safe from bad - clients. - - * Make NS... classes raise the NSExceptions they are supposed to. - Change many NSParameterAssert()'s into NSAssert()'s with - explanations. - - * Many implementations could be made more efficient. The library - hasn't been efficiency tuned very much. Overridding more methods - in certain classes could make things more efficient (especially - EltNodeCollector). SplayTree's could be done using top-down - splaying. collhash could be completely reimplemented. ...and a - lot more... - - * Implement efficient SmallInt and SmallFloat classes in the same - sort of way that Smalltalk does. Talk to me. - mccallum@gnu.ai.mit.edu. - -McCallum's To Do's -================== - - * Separate core and non-core code in NSDictionary, NSSet, etc, the - same way I did for NSArray. - - * Separate Constant and non-Constant collections for the rest of the - GNU connection classes the same way I did for Array. - - * Make sure the GNU Archiver/Unarchiver handle - -encodeConditionalObject: and -decodeObject: correctly. - - * Reorganize some of the Categories to make a minimal NSObject-using - program smaller. Currently it is huge becuase it pulls in - archiving and therefore many of the collection classes. (But - perhaps this doesn't matter, since we recommend using shared - libraries anyway.) - - * Make sure that Encoder's properly release their CStream and - Stream's. It seems that the Stream is not getting -delloc'ed, and - therefore may not be closed, and therefore may be missing data at - the end. - - * Do low-level frobbing of TCP to reduce delays. - - * Make UdpPort work; make MachPort work. - - * Finish NotificationQueue, and make it interoperate with the - RunLoop properly. - - * Make the NSTimer's work and interoperate with the RunLoop properly. - - * Add Coding methods to all the collection classes. - - * Finish Collection heirarchy clean ups. We need non-mutable - version for many of the classes. - - * Possibly change implementation of `-(int)compare:anObject' for - Collection. How should non-Indexed collections be ordered? - -Questions -========= - - I would greatly appreciate your feedback on the questions below. -Please email your thoughts to mccallum@gnu.ai.mit.edu. - - * I want to put method names in texinfo indices, but the colons in - the method names are interfering with info's notion of menu item - names and node names. Help. Any ideas? (Kresten?) - - * HashTable.m (-initKeyDesc:valueDesc:capacity:) I tried to make it - portable, but I didn't try very hard. Anyone want to send in - fixes? - - * I fixed -emptyCopy in all the subclasses, but the -emptyCopy scheme - seems pretty fragile. How about calling -initFoo: inside - -emptyCopy? This way we avoid having yet another method in which - instance vars must be initialized to some consistent state. - -allocCopy would never even get called. <> - - * Does anyone really need the ability to set the collection element - comparison function independent of the -compare: method? - - * How about adding flexibity in the method name that a LinkedList - sends a LinkedListNode to get/set the link ivars. This would - enable us to add a node to more than one linked list. - - * Something like this needed? - elementDidChange: (elt*)elementPtr; - Currently you have to remove, change, add, for some classes. - - - -Albin's To Do List -================== - - I'm sure that there're other things to do, but these are the ones I -know now: - -General -------- - - * Make thread-safe all of my code that should be. - - * Fully annotate all of my headers. - - * Document my work and the use of its fruit. - -Critical --------- - - * Code: - + (`src/array.m') `objects_array_check' - - + (`src/array.m') `objects_array_map_elements' - - + (`src/cbs-char-p.m') `objects_char_p_describe' - - + (`src/cbs-int-p.m') `objects_int_p_describe' - - + (`src/cbs-int.m') `objects_int_describe' - - + (`src/hash.m') `_objects_hash_hash' - - + (`src/hash.m') `objects_hash_check' - - + (`src/hash.m') `objects_hash_description' - - + (`src/list.m') `objects_list_is_equal_to_list' - - + (`src/map.m') `_objects_map_hash' - - + (`src/map.m') `objects_map_check' - - + (`src/map.m') `objects_map_description' - - * Correct: - + (`src/array.m') `objects_array_dealloc' - - + (`src/cbs-int.m') `_GNUSTEP_BASE_NOT_AN_INT_MARKER' - - * Improve the error handling of: - + (`src/array.m') `_objects_array_insert_bucket' - - + (`src/hash.m') `objects_hash_add_element_known_absent' - - + (`src/list.m') `objects_list_at_index_insert_element' - - + (`src/map.m') `objects_map_at_key_put_value_known_absent' - -Not So Critical ---------------- - - * Strengthen my resolve on the correctness of: - + (`src/cbs-char-p.m') `_GNUSTEP_BASE_NOT_A_CHAR_P_MARKER' - - + (`src/cbs-id.m') `_GNUSTEP_BASE_NOT_AN_ID_MARKER' - - + (`src/cbs-int-p.m') `_GNUSTEP_BASE_NOT_AN_INT_P_MARKER' - - + (`src/cbs-int-p.m') `objects_int_p_is_equal' - - + (`src/cbs-void-p.m') `_GNUSTEP_BASE_NOT_A_VOID_P_MARKER' - - + (`src/hash.m') `objects_hash_rightsize' - - + (`src/hash.m') `objects_hash_all_elements' - - + (`src/map.m') `objects_map_rightsize' - - + (`src/map.m') `objects_map_all_keys' - - + (`src/map.m') `objects_map_all_values' - - * Improve the effeciency of: - + (`src/array.m') `_objects_array_insert_bucket' - - + (`src/hash.m') `objects_hash_minus_hash' - - + (`src/list.m') `objects_list_at_index_insert_list' -