# inplace v0.7.4 - Table of Contents

Mutable data structures

## Modules

- [InPlace.Array](InPlace.Array.md)
- [InPlace.BitSet](InPlace.BitSet.md): BitSet is close in functionality to MapSet with integer values as members.
The main difference is that BitSet has lower and upper bounds
for set values that have to be defined at the time of creation (see new/2).

- [InPlace.BitUtils](InPlace.BitUtils.md)
- [InPlace.Common](InPlace.Common.md)
- [InPlace.ExactCover](InPlace.ExactCover.md): Implementation of Exact Cover.
Based on https://arxiv.org/pdf/cs/0011047 by Donald Knuth.
Modified to use "dancing cells" instead of "dancing links"
for Dancing cells, see
YouTube: "Stanford Lecture: Dr. Don Knuth - Dancing Cells (2023)"

- [InPlace.Examples.Josephus](InPlace.Examples.Josephus.md): https://en.wikipedia.org/wiki/Josephus_problem

- [InPlace.Examples.Sudoku](InPlace.Examples.Sudoku.md): Sudoku puzzle.
The instance of puzzle is a string of DxD length
, where D is a dimension of Sudoku puzzle (would be 9 by default).
The values 1 to 9 represent pre-filled cells (clues, givens etc...);
any other values represent hidden cells.

- [InPlace.Heap](InPlace.Heap.md): Binary heap.
NOTE:
- The heap keys are limited to integers.
- The capacity of the heap has to be specified at the time of creation.

- [InPlace.HeapSort](InPlace.HeapSort.md)
- [InPlace.LinkedList](InPlace.LinkedList.md): [Singly linked list](https://en.wikipedia.org/wiki/Linked_list#Singly_linked_list)
The data entries are stored as integers.
They will be interpreted (as references) by the calling application.
Note: indices are 1-based.
Options:
  - `mode` :: :singly_linked | :doubly_linked
  - `circular` :: boolean()
    optional, `false` by default;
  - `deletion` :: :reclaim | :hide | :rewind
    Handles if the element pointer could be restored later (see delete_pointer/2), and how
    to restore it:
    `:reclaim` (default) - element can not be restored, the pointer will be put back to the `allocation` pool;
    `:hide` - element can be restored by re-linking with it's former `left` and `right` neighbors;
     The element stays in the list, but can not be reached
     except by directly addressed by it's pointer. The element can be put back to it's position
     by reconnecting previously prior and next elements back to that element (see hide/2 and restore/2);
    `:rewind` - if specified, the special stack of removed element pointers is maintained.
      The effect of removal will be the same as for  :hide, except that
      The elements can be restored in the reverse order of their removal by using `rewind/1`.
  - `:mapper_fun`  # maps data entries to application data
    optional, &Function.identity/1 by default

- [InPlace.PriorityQueue](InPlace.PriorityQueue.md)
- [InPlace.Queue](InPlace.Queue.md)
- [InPlace.SparseSet](InPlace.SparseSet.md):   Sparse set implementation based on
  https://youtu.be/PUJ_XdmSDZw?si=41ySCBvOdoNCV-zR
- [InPlace.Stack](InPlace.Stack.md)

