2.1.2

* fix unsoundness pooling tree nodes, now reenabled

2.1.1

* stop pooling tree nodes, because of notch analysis they can never meet the
  safety requirements of IsoPoolable.

2.1.0

* add an optional feature "pool". If enabled memory allocation is greatly
  reduced by reusing tree components instead of freeing them. The performance
  improvement depends on key type and tree size but can be as high as %30 for
  plain insert/remove on very large maps. Memory fragmentation will also be
  greatly reduced, but this is much harder to measure.

* pool is not compatible with no_std

* fix a number of test bugs (actual bugs in the TEST code, not the tree) that
  cropped up when running model checking for multiple days continuously

2.0.6

* merge #10, no_std support (alloc required)

2.0.5

* merge #8 hand coded packing of height/size to remove the dependency
  on packed struct

* fix a few bugs in the model checking COW tests

2.0.4

* remove redundant type parameter from iter_mut_cow

2.0.3

* implement iter_mut_cow, range_mut_cow, for copy on write iterators

2.0.2

* implement get_or_insert_cow and get_or_default_cow

2.0.1

* implement get_mut_cow to improve the ergonomics of using nested
  maps with COW operations

2.0.0

* fix the range api to match the standard library. Sorry about the
  previous two releases, it's actually quite a subtle api and I
  consistently got it wrong. I also got semantic versioning wrong, and
  I'm really sorry about that, I hope nothing broke annoyingly for
  anyone (aside from for me :))

1.1.1
* fix ?Sized on range

1.1.0
* fix the arguments to range to have the correct borrow type

1.0.5
* add remove_many, a small wrapper around update_many
* fix a bug in update_many where trying to remove elements that don't
  exist in the map could cause a panic. Add a test for this case.

1.0.4
* add optional rayon support for map and set

1.0.3
* add optional serde support for map and set

1.0.2
* stop depending on serde by default

1.0.1
* replace vec chunks with arrayvec chunks to eliminate an indirection
* implement tree compaction to keep inner chunks from getting too sparse

1.0.0 "the cake is not a lie"
* Add copy on write mutable operations. They are 10x faster than plain
  insert/remove, and bring update performance within an 2-3x of
  BTreeMap (with ArcStr keys).

* Chunk size is now configurable with a const generic parameter. Three
  different sizes are exposed as default type aliases.

* bump dependencies, update readme, and refresh the benchmarks

* feels like 1.0 to me!

0.5.9
* add weak references to maps and sets as well as methods to get the
  strong and weak count of map/set references.

0.5.8
* further 20% performance improvement on batch update operations.

0.5.7
* improve performance of batch update operations on unsorted data by a
large amount (7x on trees of size 10million and chunks of size 100k).
0.5.6

* packed the height and length together, which reduced the size of
nodes by 1 word. That reduction gets us a 1-2% improvement in
lookup times (more benefit for larger trees). Tree length is now
limited to 2^56 elements instead of usize::MAX elements.

* made the tests run faster by wrapping strings in Arcs, which is
closer to how you'd use them in a real program anyway.

0.5.5
* small performance optimizations update operations

0.5.4
* Edition 2018

0.5.3
* implement Set::diff, and Map::diff, O(log(N) + M) where M is the
number of intersecting chunks. Now all the fundamental set
operations are implemented.
* rename Map::merge to Map::union. Sorry for the tiny break in
semantic versioning, but given it was just released I don't
think it's a huge problem to change it now.

0.5.2
* implement Set::intersect, and Map::intersect, O(log(N) + M)
where M is the number of intersecting chunks.

0.5.1
* implement Set::union, and Map::merge, O(log(N) + M) where M is the
number of intersecting chunks and N is the size of the largest
tree. Should always be as fast as update_many from the other map's
iterator, a lot faster in the case of a small intersection.
* remove my silly &mut F requirement for closure arguments to
functions in the public interface. Sorry I'm still learning rust, I
didn't know FnMut was also implemented by a &mut.

0.5.0
* implement map get_key, get_full
* implement set update_many
* fix some incorrect documentation
* BREAKING change map and set update functions so they are able to
work with borrowed forms of the key

0.4.1
* implement get in the set module
* properly implement Ord, PartialOrd, Eq, PartialEq, Hash, and Debug

0.4.0
* add a set module
* remove the rc and arc modules. There is no observable performance
difference between rc and arc, so just use arc everywhere. This is
especially relevant because all the practical applications of this
library than I know about require using Arc.
* BREAKING: fix return type of insert and remove to match BTreeMap

0.3.2
* fix a small performance regression in update_many caused by my last
change

0.3.1
* fix a bug in update_many that could rarely cause a removed item not
to be removed

0.3.0(yanked)
* BREAKING: change the name of insert_sorted to insert_many
* add update, and update_many
* insert 14% performance improvement
* insert_many 42% performance improvement on unsorted data, now faster
than insert on random data

0.2.1
* BREAKING: change signature of insert to match BTreeMap as closely as
possible. Sorry I was new to rust when I first wrote this module :-(

0.2.0
* iteration runs in constant space
* Implement collection range api
* Implement DoubleEndedIterator
* insert_sorted performance improved on degenerate cases
* BREAKING: insert_sorted now takes IntoIterator instead of an explicit slice
* BREAKING: change the name of length to len, like BTreeMap

0.1.2
* Initial public release
