Thank you for your awesome library...so nice to have something simple and short.
Here are some improvements to add to the documentation, BOTH in the source code and under API in README.md:
range() does not clearly explain the boundary conditions > vs >= at start and end....
OLD
* Walk key range from `low` to `high`. Stops if `fn` returns a value.
NEW
* Walk key range from `low` to `high` inclusive.
* Stops if `fn` returns a true value.
* Walk starts (first callback) at first node >= `low`.
* Walk ends (no callback) at first node > `high`.
* If tree was created with !noDuplicates and tree contains
* more than one node with equal keys >= `low` or > `high`,
* range() stops/starts at the first such node.
The following functions have a major caveat when noDuplicates is false:
find()
OLD
* Find node by key
NEW
* Find node by key.
* WARNING: If tree was created with !noDuplicates and tree contains
* more than one node with `key`, returns a RANDOM node with `key`.
* See find_ge or find_gt if duplicate order is important to you.
(I will submit the code for find_ge() and find_gt() in a separate GitHub issue)
insert()
OLD
* Insert a node into the tree
NEW
* Insert a node into the tree.
* If tree was created with noDuplicates and tree already contains
* one or more nodes with `key`, does not insert anything and returns null.
* Otherwise returns newly inserted node.
* If tree was created with !noDuplicates and tree already contains
* one or more nodes with `key`, inserts new node before existing nodes.
remove()
OLD
* Removes the node from the tree. If not found, returns null.
NEW
* Removes the node from the tree. If not found, returns null.
* WARNING: If tree was created with !noDuplicates and tree contains
* more than one node with `key`, removes a RANDOM node with `key`
* and leaves the other nodes with key in the tree.
Thank you for your awesome library...so nice to have something simple and short.
Here are some improvements to add to the documentation, BOTH in the source code and under API in README.md: