Revision history for Perl extension Algorithm::SkipList. (Changes which may
not be backwards compatible are marked with an asterisk '*'.)
0.73_01 Mon Aug 2 2004
- renamed module to Algorithm::SkipList from List::SkipList
- Node and Header types are now in separate files
- List::SkipList is included, but gives deprecation warnings
- header node gives warnings when calling key or value methods
- heavy test has less tests for standard dist
- renamed test files
- minor code changes
- corrected typos in POD
- removed benchmarking code from etc/
- redid version numbering of Node and Header classes, since they
were ignored by PAUSE/CPAN indexers anyway
- added PurePerl dummy class
0.73 Mon Jul 26 2004
- rebuilt distribution with proper META.yml
0.72 Wed Jun 30 2004
- removed List::SkipList::Null type and $NULL variable
- moved Test::More from requires to build_requires parameter
0.71 Sat Jun 12 2004
- updated POD
- redesigned internals of first_key, next_key and last_key
* delete now resets last_key
* the parameters for last_key are changed (this interface was
meant for internal use only, however)
- added index_by_key, key_by_index and value_by_index methods
- updated documentation on p and k parameters
- added support for k parameter
- redid probability distribution calculations
- fixed bug in benchmarks (was "existing" bogus keys)
- added support for duplicate values
- added find_duplicates method
- corrected typos in POD for new method
0.71_01 Wed Jun 9 2004
- fixed bug in benchmarks (was deleting bogus keys)
- added some warnings
- improved delete method
- added truncate method
- _search_with_finger now builds correct update vector
- append calls _adjust_level_threshold
- minor optimizations of node class
* renamed internal key {LASTNODE} to {LIST_END} so as not to
be confused with last_key method
- _first_node is not autoloading since it's now used by first_key
- updated POD to reflect issue with undefined values
- improved copy method (undef values handled)
- copy method can accept an argument: copy from key
* copy method no longer resets first_key
* _first_node no longer returns a finger (it was never used)
- updated documentation on values for max_level and p
- corrected typos in documentation
- added tests for deleted greatest bug
- fixed bug with greatest method when deleting last node
- added _greatest_node method to find the last node as needed
- other minor code changes
0.70_01 Sun Jun 6 2004
- tests rewritten (work in progress)
- fixed bug with next_key checking node when key was deleted
- uses Test::More for tests
- fixed "Too late to run INIT block" error with Test::More
use_ok, $NULL is now set in import() method
- fixed bug where level sometimes exceeded user-set max level
- P and max_level can now be set dynamically
- added tests for max_level and p
- checks for error when setting max_level or P
- fixed bug with definition of List::SkipList::Null
- $NULL is now an 'our' variable and accessible from outside
- level method was changed to autoload, since it was redundant
- minor optimization of _search_with_finger and _search
* header method in Node is read-only - it returns a pointer
which can be used to change values anyway
* key method in Node is read-only - it should not be
changed once it is inside a list
- added _adjust_level_threshold method from code that was in
_new_node_level to adjust SIZE_THRESHOLD/SIZE_LEVEL
- _adjust_level_threshold is called upon inserts and deletes
- SIZE_LEVEL does not decrease under MIN_LEVEL
* removed null() method - it was never used
* max_level cannot be greater than 32 (cleaner code)
- increased coverage of "heavy" test script
- minor updates to all test scripts
0.65 Thu June 3 2004
- updated README
0.64 Thu June 3 2004
- updated examples in documentation of custom node
- minor optimizations and code cleanup
- commented-out call to prev() in _debug
- removed use of Carp::Assert in tests
- redesigned benchmark script and included parse-out.pl
- updated Benchmark.txt
- updated README
0.63 Fri May 28 2004
- The default value of P is now 0.25, which appears to yield
better results in tests.
* renamed _random_level to _new_node_level
- SIZE_THRESHOLD/SIZE_LEVEL now decrease with deletions
- additional minor optimizations and code cleanup
- optimizations of Header and Null node types
- updated tests
- Benchmark: re-commented-out delete test for Tree::RedBlack
(which was accidentally uncommented in v0.62)
0.62 Tue May 18 2004
- fixed typo in (commented-out) assertion
- additional minor optimizations and code cleanup
- updated tests
- corrected README
0.61 Mon May 17 2004
* find no longer returns a finger in array context
* header is now a special subclass of List::SkipList::Node
- added special Null subclass of Header
- added null() method to return global null node
- a lot of minor code optimizations
- added comments
- maximum level of new nodes changed so that it is based on size
of list
- updated Benchmark.txt file
0.60 Sat Apr 24 2004
- updates to POD
- cleaned up comments
- added next function
- redid last_key, first_key and next_key functions
- last_key accepts arguments to modify LASTKEY
- changed calls to die to croak
- added experimental hooks to implement prev and prev_key methods
- added stub prev_key method
- bug fix: reset method called during copy method
- added more tests to heavy test script
* renamed find to find_with_finger and added find for searches
which do not return updated fingers
* renamed _search to _search_with_finger and added _search for
searches which do not return updated fingers
- modified next_key test to check for initial key of "0"
- removed if (CACHE_INSERT_FINGERS) tests
- additional optimizations and code cleanup
- added test to search for non-existent keys in Benchmark.pl
0.51 Mon Apr 12 2004
- fixed bug with next_key method called without first_key
- added tests for this bug
- added "heavy" test to distribution
- minor optimizations of delete method
- assertions are no longer required (which leads to ~3% speedup)
and removed section in POD about assertions
- removed commented-out references to forward method
- minor updates to source code comments
0.50 Mon Mar 29 2004
- section about Assertions added to POD
- documented level() method
- clear method now intitializes initial node header
- added various assertions
* removed the forward method from *::Node
- uses enum module
- added test for non-integer keys
- clear method now resets LAST_INSRT cache
- removed use of LEVEL for List::SkipList::Node
* key_cmp method accesses KEY directly rather than uses the key method
* calling convention for List::SkipList::Node is changed
- various optimizations to List::SkipList and *::Node
- added comparison to Tree::RedBlack in Benchmark.pl
- minor changes to _search method
- added Benchmark.pl script for generating benchmarks in distro
- redesigned benchmarking script
0.42 Sat Mar 20 2004
- fixed bug with Build.PL not autospliting files
0.41 Fri Mar 19 2004
* List::SkipList::Node is now array-based rather than hash-based
to improve speed.
- updates to POD, README, Benchmark.txt
- added search method as alias to find
- renamed Benchmark to Benchmark.txt
- optimized deletions
0.40 Wed Mar 17 2004
- added Benchmark file to distribution
* key_cmp now ignores when key is undefined
- _insert returns the value of $node->key_cmp($key)
- broke up test cases into separate files
- added finger caching to speed up sequential inserts
- fixed bugs with values, keys, copy, merge, first_key and next_key
methods related to use of search fingers
- fixed bug with append method
- fixed bug with search fingers: they were not being used
- _debug now prints to STDERR
* reset method is not called when a new node is added or deleted
(which is in accord with documentation)
- stub for next method added
- List::SkipList::Node ignores invalid and extra arguments
- minor optimizations in List::SkipList and List::SkipList::Node
- improved speed of _random_level
- disabled assertions (for 50% speed improvement!)
- inserted corrected comment in README about actual performance in
comparison to trees
0.33 Tue Mar 16 2004
- fixed typos in test cases that caused Makefile tests to fail
- removed causes of warnings in 01-SkipList.t
- replaced explicit package names with __PACKAGE__ placeholder
0.32 Mon Mar 15 2004
- renamed test.pl to t/01-SkipList.t
- added Build.PL to distribution
- updated README
- corrected and updated POD
0.31 Fri Feb 13 2004
- removed memoized node example from POD
- reformatted E-mail addresses in various files to foil
spam harvesters
- changes calls to keys to CORE::keys [Bug 5317]
- added version to List::SkipList::Node
- corrected errors in POD formatting
- corrected and updated POD
- added META.yml file to distribution
0.30 Tue Dec 2 2003
- ability to tie hashes
- made some methods autoloading
- added last_key and reset methods to allow auto-enumeration
- added least, greatest, keys and values methods
- added _first_node, merge, append and copy methods
- insert now returns a finger
- more updates to documentation
0.21 Wed Nov 26 2003
- bug fix: first_key method returns a proper finger
- added documentation and tests about memoization
0.20 Wed Nov 26 2003
- if no last_key specified for next_key, it returns first_key
- search fingers added
- find, first_key, next_key return a list in list context as part of
support for search fingers
- minor changes to documentation
0.13 Wed Nov 19 2003
- added call to validate_key in key_cmp in Node
0.12 Wed Nov 19 2003
- added validate_key and validate_node methods to Node
0.11 Sun Nov 16 2003
- modified test script to better check next_key function
- bug fix: next_key did not check that $last_key existed
0.10 Sat Nov 15 01:11:00 2003
- updated test script appropriately
- added first_key and next_key methods
- added ability to customize List::SkipList::Node
- moved debug method to after __END__ block
- renamed random_level to _random_level
- changed type checking to use isa() method
- updated documentation
0.02 Fri Nov 14 01:08:00 2003
- incorporated experimental code into module
- began writing initial test script
0.01 Fri Nov 14 00:50:00 2003
- original version; created by h2xs 1.21 with options
-X -n List::SkipList -v 0.01
0.00 Wed Nov 12 2003
- experimental versions, unreleased.