TODO

[/] - In Progress
[X] - Finished

#!! High Priority ----------------------------------------------------------------------------------

[/] Tests
[/] Documentation

#!! Medium Priority --------------------------------------------------------------------------------

[ ] Add to_array and from_array functions

#!! Being Considered -------------------------------------------------------------------------------

[ ] Serialization
    [ ] save         {all}
    [ ] load         {all}
    [ ] serialize    {all}
    [ ] deserialize  {all}
[ ] Zip Iterators
[ ] Consumer Iterators

#!! Optimizations ----------------------------------------------------------------------------------

[ ] Use binary search to find optimum hashtable prime size inside impl_calculate_size
[ ] Optimize certain loops that use iterators that can simply use a normal loop
[ ] Replace IntervalHeap node by a simple buffer of two pointers (V (*buffer)[2])

#!! Done -------------------------------------------------------------------------------------------

[X] Remove PUBLIC and PRIVATE
[X] Utility
    [X] assert.h
    [X] foreach.h
    [X] log.h
    [X] test.h
    [X] timer.h
[X] Extra Collections
    [X] Add MultiSet
    [X] Add MultiMap
    [X] Add IntervalHeap
    [X] Add SortedList
    [X] Add BidiMap
[X] Add functions
    [X] update       {hashmap, treemap, multimap}
    [X] set          {hashmap, treemap, multimap}
    [X] to_string    {all}
    [X] iter_advance {all} (iterators)
    [X] iter_rewind  {all} (iterators)
    [X] iter_go_to   {all} (iterators)
    [X] equals       {all}
    [X] copy_of      {all}
    [X] resize       {array based collections}
[X] Custom allocators
[X] Each file needs to be independent without including external files
[X] Fix cases where new_custom() should be used instead of just new()
[X] Add Function Tables that contains data type functions
    (compare, copy, display, free, hash, priority)
[X] Add error codes that can be accessed from the collection's struct
[X] Merge bidirectional map key_buffer and val_buffer to a single buffer and make key_dist and val_dist into dist[2]
[X] Callback utility
    on_create, on_read, on_update, on_delete, on_resize
