mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 01:31:08 +00:00
Tidyup
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@3846 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f297891c86
commit
20144d53db
4 changed files with 0 additions and 787 deletions
|
@ -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
|
|
@ -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
|
388
STATUS
388
STATUS
|
@ -1,388 +0,0 @@
|
|||
Status Report
|
||||
*************
|
||||
|
||||
Please send corrections to <fedor@gnu.org>.
|
||||
|
||||
*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)'
|
||||
|
202
TODO
202
TODO
|
@ -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. <<ObjC insiders: This is
|
||||
a less well-expressed version of what we've just been discussing
|
||||
in email.>>
|
||||
|
||||
* 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'
|
||||
|
Loading…
Reference in a new issue