- Data structures to add: Matrix - there is already one, though some say it could be better Vector - an array with vector operations defined BitVector - Robert Feldt already has one SparseBitVector (useful for character classes) Red/Black Tree Multimap Sorted list Ternary Search Tree Fibonacci Hash - Mixins to add: Queue? SortedContainer IndexableContainer - Methods to add to List: assoc, compact, compact!, delete, delete_if, clone, inspect, fill, flatten, flatten!, rassoc, reject!, replace, sort, sort!, uniq, uniq!, + - Methods to MAYBE add to List (since they would be slow): index, indexes, indices, rindex, each_index, at, [], []=, delete_at, slice, slice! - Methods to add to Hash_List: assoc, at, compact, compact!, delete, delete_at, delete_if, fill, flatten, flatten!, rassoc, reject!, replace, slice, slice!, sort, sort!, uniq, uniq!, + - Methods to add to Map (and to SortedBinaryTree): delete, delete_if, reject, reject!, replace, shift, pop, first, last, min, max - Methods to add to Set: +, -, << - Methods to add to Enum: a function to create an Enum from a string representing a C/C++ enum. - It would be nice to have a set of common algorithms (such as sorting algorithms); there could also be mixins for mixing in the most appropriate algorithm into a container (such as selection_sort() and SelectionSortable). - Perhaps List should have an each_node() method that iterates through the list, providing a List_Node as the index/key? This would allow easy deletes. On the other hand, perhaps ALL containers should be iteratable using C++-style iterators instead of Ruby iterators? Otherwise, deleting elements requires lookup, and it is impossible to delete individual elements if an element is located in the container twice (esp. with BinaryTree). One big problem with doing this, though, is: what happens when the list gets garbage- collected? Should each List_Node keep a reference to the List so that the List only gets collected when all its nodes have gone away? - The FakeIndexableContainer does not implement []=. - Testing: a) More tests ALWAYS need to be written. b) ALL tests should be automated, so "make test" can accurately test everything at once. c) Need to use RubyUnit for testing. d) Need to make sure that ALL methods are tested. - Code review: a) The extconf.rb scripts and the Makefiles are not very pretty, and since I have little experience with them, I'm not sure if I'm doing them right. b) Many of the methods are NOT exception-safe. It should all be reviewed for correctness. c) Some of the code may need to be reviewed for correct return values. d) I don't think some of the sync stuff is correct, and I'm not sure how to test it. - Particular documentation changes that need to be made: a) some classes are not documented. b) still many TODO's c) somtimes the term 'function' is used instead of 'method' d) what is the correct way to describe a the return value from an iterator, such as each()? e) documentation for interfaces that are common between classes - Some of these data structures might be better implemented in C. List was really slow until it was converted to C. Particular things that might work well being implemented in C: - BinaryTree - Add to safe_mixin the ability to make sure a given module has already been mixed in; the reason for this is that if Enumerable is mixed in *after* PairEnumerableContainer, then include? will not work properly. - I need a name for the project: - crimson (already taken) - cardinal (adj: 1. of fundamental importance, 2. a vivid red) - ruddy (adj: a healthy reddish color, sounds like buddy) - rubric (n: titlepage with red letters, adj: colored in red, v: to adorn with red) - rubrications (not in the dictionary; n: things that are adorned red) - ruminations/rubinations - Ruby Toolbox - Bat belt - Epimetheus (stupid Greek God whose name means "afterthought") - RubyToolChest/RubyToolbox/RubyToyChest/RubyToyBox - RubyTreasures - I'm not sure if any of this will work under Windows. Anyone want to make a port?