TODO

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

[/] Documentation
[/] Tests
[X] Remove PUBLIC and PRIVATE
[X] Extra Collections
    [X] Add MultiSet
    [X] Add MultiMap
    [X] Add IntervalHeap
    [/] Add SortedList
    [/] Add BiDiMap
[/] 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)
    [ ] from_array   {all}
    [ ] to_array     {all}
    [X] equals       {all}
    [X] copy_of      {all}
    [X] resize       {array based collections}
[ ] Serialization
    [ ] save         {all}
    [ ] load         {all}
    [ ] serialize    {all}
    [ ] deserialize  {all}
[ ] Callback utility
[ ] Zip Iterators
[ ] Statically Allocated Collections
    [ ] Deque
    [ ] HashMap
    [ ] HashSet
    [ ] Heap
    [ ] LinkedList
    [ ] List
    [~] Queue
    [~] Stack
    [ ] TreeMap
    [ ] TreeSet
[ ] Dev Collections
    [~] Deque
    [ ] HashMap
    [ ] HashSet
    [ ] Heap
    [ ] LinkedList
    [ ] List
    [ ] Queue
    [ ] Stack
    [ ] TreeMap
    [ ] TreeSet
[X] Utility
    [X] assert.h
    [X] foreach.h
    [X] log.h
    [X] test.h
    [X] timer.h

[ ] Optimizations
    [ ] Hashtable insertion can avoid a call to impl_get_entry to check if a key already exists
    [ ] Use binary search to find optimum hashtable prime size inside impl_calculate_size

