C Container Collection (CCC)
Loading...
Searching...
No Matches
traits.h File Reference

The C Container Collection Traits Interface. More...

#include "impl/impl_traits.h"
Include dependency graph for traits.h:

Go to the source code of this file.

Entry Interface

Obtain and operate on container entries for efficient queries when non-trivial control flow is needed.

#define ccc_insert(container_ptr, insert_args...)    ccc_impl_insert(container_ptr, insert_args)
 Insert an element and obtain the old value if Occupied.
 
#define ccc_insert_r(container_ptr, insert_args...)    ccc_impl_insert_r(container_ptr, insert_args)
 Insert an element and obtain the old value if Occupied.
 
#define ccc_try_insert(container_ptr, try_insert_args...)    ccc_impl_try_insert(container_ptr, try_insert_args)
 Insert an element if the entry is Vacant.
 
#define ccc_try_insert_r(container_ptr, try_insert_args...)    ccc_impl_try_insert_r(container_ptr, try_insert_args)
 Insert an element if the entry is Vacant.
 
#define ccc_insert_or_assign(container_ptr, insert_or_assign_args...)    ccc_impl_insert_or_assign(container_ptr, insert_or_assign_args)
 Insert an element or overwrite the Occupied entry.
 
#define ccc_insert_or_assign_r(container_ptr, insert_or_assign_args...)    ccc_impl_insert_or_assign_r(container_ptr, insert_or_assign_args)
 Insert an element or overwrite the Occupied entry.
 
#define ccc_remove(container_ptr, remove_args...)    ccc_impl_remove(container_ptr, remove_args)
 Remove an element and retain access to its value.
 
#define ccc_remove_r(container_ptr, remove_args...)    ccc_impl_remove_r(container_ptr, remove_args)
 Remove an element and retain access to its value.
 
#define ccc_entry(container_ptr, key_ptr...)    ccc_impl_entry(container_ptr, key_ptr)
 Obtain a container specific entry for the Entry Interface.
 
#define ccc_entry_r(container_ptr, key_ptr...)    ccc_impl_entry_r(container_ptr, key_ptr)
 Obtain a container specific entry for the Entry Interface.
 
#define ccc_and_modify(entry_ptr, mod_fn)   ccc_impl_and_modify(entry_ptr, mod_fn)
 Modify an entry if Occupied.
 
#define ccc_and_modify_aux(entry_ptr, mod_fn, aux_args...)    ccc_impl_and_modify_aux(entry_ptr, mod_fn, aux_args)
 Modify an entry if Occupied.
 
#define ccc_insert_entry(entry_ptr, insert_entry_args...)    ccc_impl_insert_entry(entry_ptr, insert_entry_args)
 Insert new element or overwrite old element.
 
#define ccc_or_insert(entry_ptr, or_insert_args...)    ccc_impl_or_insert(entry_ptr, or_insert_args)
 Insert new element if the entry is Vacant.
 
#define ccc_remove_entry(entry_ptr)   ccc_impl_remove_entry(entry_ptr)
 Remove the element if the entry is Occupied.
 
#define ccc_remove_entry_r(entry_ptr)   ccc_impl_remove_entry_r(entry_ptr)
 Remove the element if the entry is Occupied.
 
#define ccc_unwrap(entry_ptr)   ccc_impl_unwrap(entry_ptr)
 Unwrap user type in entry.
 
#define ccc_occupied(entry_ptr)   ccc_impl_occupied(entry_ptr)
 Check occupancy of entry.
 
#define ccc_insert_error(entry_ptr)   ccc_impl_insert_error(entry_ptr)
 Check last insert status.
 

Membership Interface

Test membership or obtain references to stored user types directly.

#define ccc_get_key_val(container_ptr, key_ptr...)    ccc_impl_get_key_val(container_ptr, key_ptr)
 Obtain a reference to the user type stored at the key.
 
#define ccc_contains(container_ptr, key_ptr...)    ccc_impl_contains(container_ptr, key_ptr)
 Check for membership of the key.
 

Push Pop Front Back Interface

Push, pop, and view elements in sorted or unsorted containers.

#define ccc_push(container_ptr, push_args...)    ccc_impl_push(container_ptr, push_args)
 Push an element into a container.
 
#define ccc_push_back(container_ptr, push_args...)    ccc_impl_push_back(container_ptr, push_args)
 Push an element to the back of a container.
 
#define ccc_push_front(container_ptr, push_args...)    ccc_impl_push_front(container_ptr, push_args)
 Push an element to the front of a container.
 
#define ccc_pop(container_ptr)   ccc_impl_pop(container_ptr)
 Pop an element from a container.
 
#define ccc_pop_front(container_ptr)   ccc_impl_pop_front(container_ptr)
 Pop an element from the front of a container.
 
#define ccc_pop_back(container_ptr)   ccc_impl_pop_back(container_ptr)
 Pop an element from the back of a container.
 
#define ccc_front(container_ptr)   ccc_impl_front(container_ptr)
 Obtain a reference the front element of a container.
 
#define ccc_back(container_ptr)   ccc_impl_back(container_ptr)
 Obtain a reference the back element of a container.
 
#define ccc_splice(container_ptr, splice_args...)    ccc_impl_splice(container_ptr, splice_args)
 Splice an element from one position to another in the same or a different container.
 
#define ccc_splice_range(container_ptr, splice_args...)    ccc_impl_splice_range(container_ptr, splice_args)
 Splice a range of elements from one position to another in the same or a different container.
 

Priority Queue Interface

Interface to support generic priority queue operations.

#define ccc_update(container_ptr, update_args...)    ccc_impl_update(container_ptr, update_args)
 Update the value of an element known to be in a container.
 
#define ccc_increase(container_ptr, increase_args...)    ccc_impl_increase(container_ptr, increase_args)
 Increase the value of an element known to be in a container.
 
#define ccc_decrease(container_ptr, decrease_args...)    ccc_impl_decrease(container_ptr, decrease_args)
 Decrease the value of an element known to be in a container.
 
#define ccc_erase(container_ptr, erase_args...)    ccc_impl_erase(container_ptr, erase_args)
 Erase an element known to be in a container.
 
#define ccc_extract(container_ptr, extract_args...)    ccc_impl_extract(container_ptr, extract_args)
 Extract an element known to be in a container (does not free).
 
#define ccc_extract_range(container_ptr, extract_args...)    ccc_impl_extract_range(container_ptr, extract_args)
 Extract elements known to be in a container (does not free).
 

Iterator Interface

Obtain and manage iterators over the container.

#define ccc_begin(container_ptr)   ccc_impl_begin(container_ptr)
 Obtain a reference to the start of a container.
 
#define ccc_rbegin(container_ptr)   ccc_impl_rbegin(container_ptr)
 Obtain a reference to the reversed start of a container.
 
#define ccc_next(container_ptr, void_iterator_ptr)    ccc_impl_next(container_ptr, void_iterator_ptr)
 Obtain a reference to the next element in the container.
 
#define ccc_rnext(container_ptr, void_iterator_ptr)    ccc_impl_rnext(container_ptr, void_iterator_ptr)
 Obtain a reference to the rnext element in the container.
 
#define ccc_end(container_ptr)   ccc_impl_end(container_ptr)
 Obtain a reference to the end sentinel of a container.
 
#define ccc_rend(container_ptr)   ccc_impl_rend(container_ptr)
 Obtain a reference to the rend sentinel of a container.
 
#define ccc_equal_range(container_ptr, range_args...)    ccc_impl_equal_range(container_ptr, range_args)
 Obtain a range of values from a container.
 
#define ccc_equal_range_r(container_ptr, range_args...)    ccc_impl_equal_range_r(container_ptr, range_args)
 Obtain a range of values from a container.
 
#define ccc_equal_rrange(container_ptr, rrange_args...)    ccc_impl_equal_rrange(container_ptr, rrange_args)
 Obtain a rrange of values from a container.
 
#define ccc_equal_rrange_r(container_ptr, rrange_args...)    ccc_impl_equal_rrange_r(container_ptr, rrange_args)
 Obtain a rrange of values from a container.
 

State Interface

Obtain the container state.

#define ccc_size(container_ptr)   ccc_impl_size(container_ptr)
 Return the size of the container.
 
#define ccc_is_empty(container_ptr)   ccc_impl_is_empty(container_ptr)
 Return the size status of a container.
 
#define ccc_validate(container_ptr)   ccc_impl_validate(container_ptr)
 Return the invariant statuses of the container.
 

Detailed Description

The C Container Collection Traits Interface.

Many functionalities across containers are similar. These can be described as traits that each container implements (see Rust Traits for a more pure example of the topic). Only a selections of shared traits across containers are represented here because some containers implement unique functionality that cannot be shared with other containers. These can simplify code greatly at a slightly higher compilation time cost. There is no runtime cost to using traits.

To shorten names in the interface, define the following preprocessor directive at the top of your file.

#define TRAITS_USING_NAMESPACE_CCC

All traits can then be written without the ccc_ prefix.

Macro Definition Documentation

◆ ccc_and_modify

#define ccc_and_modify (   entry_ptr,
  mod_fn 
)    ccc_impl_and_modify(entry_ptr, mod_fn)

Modify an entry if Occupied.

Parameters
[in]entry_ptra pointer to the container.
[in]mod_fna modification function that does not need aux.
Returns
a reference to the modified entry if Occupied or original if Vacant.

See container documentation for specific behavior.

◆ ccc_and_modify_aux

#define ccc_and_modify_aux (   entry_ptr,
  mod_fn,
  aux_args... 
)     ccc_impl_and_modify_aux(entry_ptr, mod_fn, aux_args)

Modify an entry if Occupied.

Parameters
[in]entry_ptra pointer to the container.
[in]mod_fna modification function.
[in]aux_argsauxiliary data for mod_fn.
Returns
a reference to the modified entry if Occupied or original if Vacant.

See container documentation for specific behavior.

◆ ccc_back

#define ccc_back (   container_ptr)    ccc_impl_back(container_ptr)

Obtain a reference the back element of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to a user type.

See container documentation for specific behavior.

◆ ccc_begin

#define ccc_begin (   container_ptr)    ccc_impl_begin(container_ptr)

Obtain a reference to the start of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to the user type stored at the start.

See container documentation for specific behavior.

◆ ccc_contains

#define ccc_contains (   container_ptr,
  key_ptr... 
)     ccc_impl_contains(container_ptr, key_ptr)

Check for membership of the key.

Parameters
[in]container_ptra pointer to the container.
[in]key_ptra pointer to the search key.
Returns
true if present false if absent.

See container documentation for specific behavior.

◆ ccc_decrease

#define ccc_decrease (   container_ptr,
  decrease_args... 
)     ccc_impl_decrease(container_ptr, decrease_args)

Decrease the value of an element known to be in a container.

Parameters
[in]container_ptra pointer to the container.
decrease_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_end

#define ccc_end (   container_ptr)    ccc_impl_end(container_ptr)

Obtain a reference to the end sentinel of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to the end sentinel.

See container documentation for specific behavior.

◆ ccc_entry

#define ccc_entry (   container_ptr,
  key_ptr... 
)     ccc_impl_entry(container_ptr, key_ptr)

Obtain a container specific entry for the Entry Interface.

Parameters
[in]container_ptra pointer to the container.
[in]key_ptra pointer to the search key.
Returns
a container specific entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_entry_r

#define ccc_entry_r (   container_ptr,
  key_ptr... 
)     ccc_impl_entry_r(container_ptr, key_ptr)

Obtain a container specific entry for the Entry Interface.

Parameters
[in]container_ptra pointer to the container.
[in]key_ptra pointer to the search key.
Returns
a container specific entry reference depending on container specific context.

See container documentation for specific behavior.

◆ ccc_equal_range

#define ccc_equal_range (   container_ptr,
  range_args... 
)     ccc_impl_equal_range(container_ptr, range_args)

Obtain a range of values from a container.

Parameters
[in]container_ptra pointer to the container.
range_argsare container specific.
Returns
the range.

See container documentation for specific behavior.

◆ ccc_equal_range_r

#define ccc_equal_range_r (   container_ptr,
  range_args... 
)     ccc_impl_equal_range_r(container_ptr, range_args)

Obtain a range of values from a container.

Parameters
[in]container_ptra pointer to the container.
range_argsare container specific.
Returns
a reference to the range.

See container documentation for specific behavior.

◆ ccc_equal_rrange

#define ccc_equal_rrange (   container_ptr,
  rrange_args... 
)     ccc_impl_equal_rrange(container_ptr, rrange_args)

Obtain a rrange of values from a container.

Parameters
[in]container_ptra pointer to the container.
rrange_argsare container specific.
Returns
the rrange.

See container documentation for specific behavior.

◆ ccc_equal_rrange_r

#define ccc_equal_rrange_r (   container_ptr,
  rrange_args... 
)     ccc_impl_equal_rrange_r(container_ptr, rrange_args)

Obtain a rrange of values from a container.

Parameters
[in]container_ptra pointer to the container.
rrange_argsare container specific.
Returns
a reference to the rrange.

See container documentation for specific behavior.

◆ ccc_erase

#define ccc_erase (   container_ptr,
  erase_args... 
)     ccc_impl_erase(container_ptr, erase_args)

Erase an element known to be in a container.

Parameters
[in]container_ptra pointer to the container.
erase_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_extract

#define ccc_extract (   container_ptr,
  extract_args... 
)     ccc_impl_extract(container_ptr, extract_args)

Extract an element known to be in a container (does not free).

Parameters
[in]container_ptra pointer to the container.
extract_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_extract_range

#define ccc_extract_range (   container_ptr,
  extract_args... 
)     ccc_impl_extract_range(container_ptr, extract_args)

Extract elements known to be in a container (does not free).

Parameters
[in]container_ptra pointer to the container.
extract_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_front

#define ccc_front (   container_ptr)    ccc_impl_front(container_ptr)

Obtain a reference the front element of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to a user type.

See container documentation for specific behavior.

◆ ccc_get_key_val

#define ccc_get_key_val (   container_ptr,
  key_ptr... 
)     ccc_impl_get_key_val(container_ptr, key_ptr)

Obtain a reference to the user type stored at the key.

Parameters
[in]container_ptra pointer to the container.
[in]key_ptra pointer to the search key.
Returns
a reference to the stored user type or NULL of absent.

See container documentation for specific behavior.

◆ ccc_increase

#define ccc_increase (   container_ptr,
  increase_args... 
)     ccc_impl_increase(container_ptr, increase_args)

Increase the value of an element known to be in a container.

Parameters
[in]container_ptra pointer to the container.
increase_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_insert

#define ccc_insert (   container_ptr,
  insert_args... 
)     ccc_impl_insert(container_ptr, insert_args)

Insert an element and obtain the old value if Occupied.

Parameters
[in]container_ptra pointer to the container.
insert_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_insert_entry

#define ccc_insert_entry (   entry_ptr,
  insert_entry_args... 
)     ccc_impl_insert_entry(entry_ptr, insert_entry_args)

Insert new element or overwrite old element.

Parameters
[in]entry_ptra pointer to the container.
insert_entry_argsargs depend on container.
Returns
an reference to the inserted element.

See container documentation for specific behavior.

◆ ccc_insert_error

#define ccc_insert_error (   entry_ptr)    ccc_impl_insert_error(entry_ptr)

Check last insert status.

Parameters
[in]entry_ptra pointer to the container.
Returns
true if an insert error occurred false if not.

See container documentation for specific behavior.

◆ ccc_insert_or_assign

#define ccc_insert_or_assign (   container_ptr,
  insert_or_assign_args... 
)     ccc_impl_insert_or_assign(container_ptr, insert_or_assign_args)

Insert an element or overwrite the Occupied entry.

Parameters
[in]container_ptra pointer to the container.
insert_or_assign_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_insert_or_assign_r

#define ccc_insert_or_assign_r (   container_ptr,
  insert_or_assign_args... 
)     ccc_impl_insert_or_assign_r(container_ptr, insert_or_assign_args)

Insert an element or overwrite the Occupied entry.

Parameters
[in]container_ptra pointer to the container.
insert_or_assign_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_insert_r

#define ccc_insert_r (   container_ptr,
  insert_args... 
)     ccc_impl_insert_r(container_ptr, insert_args)

Insert an element and obtain the old value if Occupied.

Parameters
[in]container_ptra pointer to the container.
insert_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_is_empty

#define ccc_is_empty (   container_ptr)    ccc_impl_is_empty(container_ptr)

Return the size status of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
true if empty or NULL false if not.

See container documentation for specific behavior.

◆ ccc_next

#define ccc_next (   container_ptr,
  void_iterator_ptr 
)     ccc_impl_next(container_ptr, void_iterator_ptr)

Obtain a reference to the next element in the container.

Parameters
[in]container_ptra pointer to the container.
[in]void_iterator_ptrthe user type returned from the last iteration.
Returns
a reference to the user type stored next.

See container documentation for specific behavior.

◆ ccc_occupied

#define ccc_occupied (   entry_ptr)    ccc_impl_occupied(entry_ptr)

Check occupancy of entry.

Parameters
[in]entry_ptra pointer to the container.
Returns
true if Occupied, false if Vacant.

See container documentation for specific behavior.

◆ ccc_or_insert

#define ccc_or_insert (   entry_ptr,
  or_insert_args... 
)     ccc_impl_or_insert(entry_ptr, or_insert_args)

Insert new element if the entry is Vacant.

Parameters
[in]entry_ptra pointer to the container.
or_insert_argsargs depend on container.
Returns
an reference to the old element or new element if entry was Vacant.

See container documentation for specific behavior.

◆ ccc_pop

#define ccc_pop (   container_ptr)    ccc_impl_pop(container_ptr)

Pop an element from a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a result of the pop operation.

See container documentation for specific behavior.

◆ ccc_pop_back

#define ccc_pop_back (   container_ptr)    ccc_impl_pop_back(container_ptr)

Pop an element from the back of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a result of the pop operation.

See container documentation for specific behavior.

◆ ccc_pop_front

#define ccc_pop_front (   container_ptr)    ccc_impl_pop_front(container_ptr)

Pop an element from the front of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a result of the pop operation.

See container documentation for specific behavior.

◆ ccc_push

#define ccc_push (   container_ptr,
  push_args... 
)     ccc_impl_push(container_ptr, push_args)

Push an element into a container.

Parameters
[in]container_ptra pointer to the container.
push_argsdepend on container.
Returns
a reference to the pushed element.

See container documentation for specific behavior.

◆ ccc_push_back

#define ccc_push_back (   container_ptr,
  push_args... 
)     ccc_impl_push_back(container_ptr, push_args)

Push an element to the back of a container.

Parameters
[in]container_ptra pointer to the container.
push_argsdepend on container.
Returns
a reference to the pushed element.

See container documentation for specific behavior.

◆ ccc_push_front

#define ccc_push_front (   container_ptr,
  push_args... 
)     ccc_impl_push_front(container_ptr, push_args)

Push an element to the front of a container.

Parameters
[in]container_ptra pointer to the container.
push_argsdepend on container.
Returns
a reference to the pushed element.

See container documentation for specific behavior.

◆ ccc_rbegin

#define ccc_rbegin (   container_ptr)    ccc_impl_rbegin(container_ptr)

Obtain a reference to the reversed start of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to the user type stored at the reversed start.

See container documentation for specific behavior.

◆ ccc_remove

#define ccc_remove (   container_ptr,
  remove_args... 
)     ccc_impl_remove(container_ptr, remove_args)

Remove an element and retain access to its value.

Parameters
[in]container_ptra pointer to the container.
remove_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_remove_entry

#define ccc_remove_entry (   entry_ptr)    ccc_impl_remove_entry(entry_ptr)

Remove the element if the entry is Occupied.

Parameters
[in]entry_ptra pointer to the container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_remove_entry_r

#define ccc_remove_entry_r (   entry_ptr)    ccc_impl_remove_entry_r(entry_ptr)

Remove the element if the entry is Occupied.

Parameters
[in]entry_ptra pointer to the container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_remove_r

#define ccc_remove_r (   container_ptr,
  remove_args... 
)     ccc_impl_remove_r(container_ptr, remove_args)

Remove an element and retain access to its value.

Parameters
[in]container_ptra pointer to the container.
remove_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_rend

#define ccc_rend (   container_ptr)    ccc_impl_rend(container_ptr)

Obtain a reference to the rend sentinel of a container.

Parameters
[in]container_ptra pointer to the container.
Returns
a reference to the rend sentinel.

See container documentation for specific behavior.

◆ ccc_rnext

#define ccc_rnext (   container_ptr,
  void_iterator_ptr 
)     ccc_impl_rnext(container_ptr, void_iterator_ptr)

Obtain a reference to the rnext element in the container.

Parameters
[in]container_ptra pointer to the container.
[in]void_iterator_ptrthe user type returned from the last iteration.
Returns
a reference to the user type stored rnext.

See container documentation for specific behavior.

◆ ccc_size

#define ccc_size (   container_ptr)    ccc_impl_size(container_ptr)

Return the size of the container.

Parameters
[in]container_ptra pointer to the container.
Returns
the size or zero if container_ptr is NULL.

See container documentation for specific behavior.

◆ ccc_splice

#define ccc_splice (   container_ptr,
  splice_args... 
)     ccc_impl_splice(container_ptr, splice_args)

Splice an element from one position to another in the same or a different container.

Parameters
[in]container_ptra pointer to the container.
splice_argsare container specific.
Returns
the result of the splice.

See container documentation for specific behavior.

◆ ccc_splice_range

#define ccc_splice_range (   container_ptr,
  splice_args... 
)     ccc_impl_splice_range(container_ptr, splice_args)

Splice a range of elements from one position to another in the same or a different container.

Parameters
[in]container_ptra pointer to the container.
splice_argsare container specific.
Returns
the result of the splice.

See container documentation for specific behavior.

◆ ccc_try_insert

#define ccc_try_insert (   container_ptr,
  try_insert_args... 
)     ccc_impl_try_insert(container_ptr, try_insert_args)

Insert an element if the entry is Vacant.

Parameters
[in]container_ptra pointer to the container.
try_insert_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_try_insert_r

#define ccc_try_insert_r (   container_ptr,
  try_insert_args... 
)     ccc_impl_try_insert_r(container_ptr, try_insert_args)

Insert an element if the entry is Vacant.

Parameters
[in]container_ptra pointer to the container.
try_insert_argsargs depend on container.
Returns
an entry depending on container specific context.

See container documentation for specific behavior.

◆ ccc_unwrap

#define ccc_unwrap (   entry_ptr)    ccc_impl_unwrap(entry_ptr)

Unwrap user type in entry.

Parameters
[in]entry_ptra pointer to the container.
Returns
a valid reference if Occupied or NULL if vacant.

See container documentation for specific behavior.

◆ ccc_update

#define ccc_update (   container_ptr,
  update_args... 
)     ccc_impl_update(container_ptr, update_args)

Update the value of an element known to be in a container.

Parameters
[in]container_ptra pointer to the container.
update_argsdepend on the container.

See container documentation for specific behavior.

◆ ccc_validate

#define ccc_validate (   container_ptr)    ccc_impl_validate(container_ptr)

Return the invariant statuses of the container.

Parameters
[in]container_ptra pointer to the container.
Returns
true if all invariants hold, false if not.

See container documentation for specific behavior.