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'

