| Home | Libraries | People | FAQ | More

## Concepts

### Naming

The icl is about sets and maps and a useful implementation of sets and maps using intervals. In the documentation of the icl the different set and map types are grouped in various ways. In order to distinguish those groups we use a naming convention.

Names of concepts start with a capital letter. So `Set` and `Map` stand for the concept of a set and a map as defined in the icl. When we talk about `Sets` and `Maps` though, most of the time we do not not talk about the concepts themselves but the set of types that implement those concepts in the icl. The main groups, icl containers can be divided in, are summarized in the next table:

| `Set` | `Map`
element container | `std::set` | `icl::map`
interval container | `interval_set`, `separate_interval_set`, `split_interval_set` | `interval_map`, `split_interval_map`

- Containers std:set, `interval_set`, `separate_interval_set`, `split_interval_set` are models of concept `Set`.
- Containers `icl::map`, `interval_map`, `split_interval_map` are models of concept `Map`.
- Containers that are implemented using elements or element value pairs are called element containers.
- Containers that are implemented using intervals or interval value pairs (also called segments) are called interval containers.
- When we talk about `Sets` or `Maps` we abstract from the way they are implemented.
- When we talk about element containers or interval containers we refer to the way they are implemented.
- `std::set` is a model of the icl's `Set` concept.
- `std::map` is not a model of the icl's `Map` concept.
- The icl's element map is always denoted qualified as `icl::map` to avoid confusion with`std::map`.