ocaml-containers/README.md
2013-03-05 11:48:49 +01:00

55 lines
1.6 KiB
Markdown

ocaml-containers
================
A bunch of containers,written in different occasions. Probably not very high
quality, since not all containers are tested (yet).
The design is centerred around polymorphism rather than functors. Such
structures comprise:
- `PHashtbl`, a polymorphic hashtable (with open addressing)
- `SplayTree`, a polymorphic splay heap implementation
- `Heap`, an imperative heap based on `SplayTree`
- `Graph`, a polymorphic imperative directed graph (on top of `PHashtbl`)
- `Hashset`, a polymorphic imperative set on top of `PHashtbl`
Other structures (not touched for months, may not work properly) are:
- `Cache`, a low level memoization cache for pairs of keys
- `Vector`, a growable array (pure OCaml, no C)
- `Deque`, an imperative double ended FIFO (double-linked list)
- `FlatHashtbl`, a deprecated open addressing hashtable with
a functorial interface (replaced by PHashtbl)
## Use
You can either build and install the library (see `Build`), or just copy
files to your own project. The last solution has the benefits that you
don't have additional dependencies nor build complications (and it may enable
more inlining). I therefore recommand it for its simplicity.
If you have comments, requests, or bugfixes, please share them! :-)
## Build
You need the library `sequence`. With opam, type `opam install sequence`.
Then:
$ make
To build and run tests (requires `oUnit`):
$ opam install oUnit
$ make tests
$ ./tests.native
To build the small benchmarking suite (requires `Bench`):
$ opam install bench
$ make bench
$ ./benchs.native
## License
This code is free, under the BSD license.