# Interface

Following is the library's interface:

1. Short Tutorial is a short tutorial.
2. Containers describes the containers of the library.
3. Data-Type Policies describes data-type policies.
4. Data-Structure Tags and Traits describes tags and traits identifying the underlying data-structure and its behaviour.
5. Mapping-Semantics Tags and Traits describes tags and traits identifying the mapping-semantics.
6. Data-Structure Policy Classes describes policies for configuring underlying data-structures.
7. Exceptions Subsection desribes exception classes.

## Containers

Overview and Data-Structure Genericity discuss relevant design points.

######

###### class hierarchy.

1. Basic Associative-Containers:
   1. `basic_assoc_cntnr` - basic associative-container for the "map" case
   2. `basic_assoc_cntnr` - basic associative-container for the "set" case
   3. `basic_assoc_cntnr` - basic associative-container for the "multimap" case
2. Hash-Based Associative-Containers:
   1. `basic_hash_assoc_cntnr` - basic hash-based associative-container
   2. `cc_hash_assoc_cntnr` - collision-chaining hash-based associative-container
   3. `gp_hash_assoc_cntnr` - (general) probing hash-based associative-container
3. Tree-Based Associative-Containers:
   1. `basic_tree_assoc_cntnr` - basic tree-based associative-container
   2. `basic_tree_assoc_cntnr` - basic tree-based associative-container with reverse iteration
   3. `tree_assoc_cntnr` - tree-based associative-container
4. List-Based Associative-Contaiers:
   1. `lu_assoc_cntnr` - list-based update-policy associative container

## Data-Type Policies

Overview and Mapping-Semantic Genericity discuss relevant design points.

1. `null_data_type`
2. `compound_data_type`

## Data-Structure Tags and Traits

### Data-Structure Tags

######

###### Data-Structure Tag class hierarchy.

1. `basic_ds_tag`
2. `basic_hash_ds_tag`
3. `cc_hash_ds_tag`
4. `gp_hash_ds_tag`
5. `basic_tree_ds_tag`
6. `rb_tree_ds_tag`
7. `splay_tree_ds_tag`
8. `ov_tree_ds_tag`
9. `lu_ds_tag`
10. `compound_ds_tag`

### Invalidation-Guarantee Tags

######

###### Invalidation guarantees class hierarchy.

1. `basic_invalidation_guarantee`
2. `find_invalidation_guarantee`
3. `range_invalidation_guarantee`

### Data-Structure Traits

1. `ds_traits`

## Mapping-Semantics Tags and Traits

### Mapping-Semantics Tags

######

###### Mapping-Semantics Tag class hierarchy.

1. `basic_ms_tag`
2. `data_enabled_ms_tag`
3. `compound_data_enabled_ms_tag`

### Mapping-Semantics Traits

1. `ms_traits`

## Data-Structure Policy Classes

### Hash-Related Policies

Hash-Based Containers describes relevant design points.

#### Hash and Probe Policies

1. Hash Functions:
   1. `null_hash_fn`
2. Range-Hashing Functions:
   1. Interface of a Range-Hashing Function
   2. `direct_mask_range_hashing`
   3. `direct_mod_range_hashing`
3. Probe Functions:
   1. Interface of a Probe Function
   2. `linear_probe_fn`
   3. `quadratic_probe_fn`
   4. `null_probe_fn`
4. Ranged-Hash Functions:
   1. Interface of a Ranged-Hash Function
5. Ranged-Probe Functions:
   1. Interface of a Ranged-Probe function

#### Resize Policies

######

###### Resize policy class diagram.

1. Resize Policies:
   1. Interface of a Resize Policy
   2. `hash_standard_resize_policy`
2. Size Policies:
   1. Interface of a Size Policy
   2. `hash_exponential_size_policy`
   3. `hash_prime_size_policy`
3. Trigger Policies:
   1. Interface of a Trigger Policy
   2. `hash_load_check_resize_trigger`
   3. `cc_hash_max_collision_check_resize_trigger`

### Tree Node-Update Policies

1. Design of Node Update Policies
2. Interface of a Node Updator Policy
3. Order-Statistics (Finding Entries by Key Order):
   1. `order_statistics_key`
   2. `order_statistics_key_cmp`
   3. `order_statistics_node_updator`
   4. `find_by_order`
   5. `order_by_key`
4. `null_node_updator`

### List Update Policies

1. Design of List Update Policies
2. Interface of a List Update Policy
3. Move-to-Front:
   1. `move_to_front_update_metadata`
   2. `move_to_front_update_policy`
4. Counter:
   1. `counter_update_metadata`
   2. `counter_update_policy`

## Exceptions

1. `pb_assoc_ex`
2. `cannot_insert`
3. `cannot_join`
4. `cannot_resize`