TODO

[/] - In Progress
[X] - Finished
[~] - Needs to be reviewed

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

[/] Tests
[/] Documentation
[/] Add Function Tables that contains data type functions
    (compare, copy, display, free, hash, priority)
[/] Add error codes that can be accessed from the collection's struct

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

[/] Callback utility
[ ] Add to iterators struct
    [ ] get_value
    [ ] get_index
    [ ] get_rvalue       {only those that allow it}
    [ ] get_key          {associative collections}
    [ ] get_multiplicity {multiset}
    [ ] get_node         {linkedlist}
[ ] Add memory usage in the benchmark
[ ] Add to_array and from_array functions
[ ] Separate each collection unit test into their own executable

#!! Low Priority -----------------------------------------------------------------------------------

[ ] Serialization
    [ ] save         {all}
    [ ] load         {all}
    [ ] serialize    {all}
    [ ] deserialize  {all}
[ ] Zip Iterators
[ ] Consumer Iterators
[ ] Dev Collections
    [ ] BidiMap
    [~] Deque
    [ ] HashMap
    [ ] HashSet
    [ ] Heap
    [ ] IntervalHeap
    [ ] LinkedList
    [ ] List
    [ ] MultiMap
    [ ] MultiSet
    [ ] Queue
    [ ] SortedList
    [ ] Stack
    [ ] TreeMap
    [ ] TreeSet
[ ] Statically Allocated Collections
    [ ] BidiMap
    [ ] Deque
    [ ] HashMap
    [ ] HashSet
    [ ] Heap
    [ ] IntervalHeap
    [ ] LinkedList
    [ ] List
    [ ] MultiMap
    [ ] MultiSet
    [~] Queue
    [ ] SortedList
    [~] Stack
    [ ] TreeMap
    [ ] TreeSet

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

[ ] Use binary search to find optimum hashtable prime size inside impl_calculate_size
[ ] Optimize certain hashtable loops that use iterators but can simply use a normal loop
[ ] Use a B-Tree instead of and AVL Tree for TreeMap and TreeSet

#!! 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()
