42#ifndef CCC_FLAT_DOUBLE_ENDED_QUEUE_H
43#define CCC_FLAT_DOUBLE_ENDED_QUEUE_H
86#define CCC_flat_double_ended_queue_default(type_name) \
87 CCC_private_flat_double_ended_queue_default(type_name)
97#define CCC_flat_double_ended_queue_for( \
98 type_name, capacity, count, data_pointer... \
100 CCC_private_flat_double_ended_queue_for( \
101 type_name, capacity, count, data_pointer \
154#define CCC_flat_double_ended_queue_from( \
155 allocator, optional_capacity, compound_literal_array... \
157 CCC_private_flat_double_ended_queue_from( \
158 allocator, optional_capacity, compound_literal_array \
185#define CCC_flat_double_ended_queue_with_capacity( \
186 type_name, allocator, capacity \
188 CCC_private_flat_double_ended_queue_with_capacity( \
189 type_name, allocator, capacity \
198#define CCC_flat_double_ended_queue_with_storage( \
199 count, compound_literal_array... \
201 CCC_private_flat_double_ended_queue_with_storage( \
202 count, compound_literal_array \
305#define CCC_flat_double_ended_queue_emplace_back( \
306 flat_double_ended_queue_pointer, allocator_pointer, value... \
308 CCC_private_flat_double_ended_queue_emplace_back( \
309 flat_double_ended_queue_pointer, allocator_pointer, value \
322#define CCC_flat_double_ended_queue_emplace_front( \
323 flat_double_ended_queue_pointer, allocator_pointer, value... \
325 CCC_private_flat_double_ended_queue_emplace_front( \
326 flat_double_ended_queue_pointer, allocator_pointer, value \
628#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
631# define flat_double_ended_queue_default(argument) \
632 CCC_flat_double_ended_queue_default(argument)
633# define flat_double_ended_queue_for(arguments...) \
634 CCC_flat_double_ended_queue_for(arguments)
635# define flat_double_ended_queue_from(arguments...) \
636 CCC_flat_double_ended_queue_from(arguments)
637# define flat_double_ended_queue_with_storage(arguments...) \
638 CCC_flat_double_ended_queue_with_storage(arguments)
639# define flat_double_ended_queue_with_capacity(arguments...) \
640 CCC_flat_double_ended_queue_with_capacity(arguments)
641# define flat_double_ended_queue_copy(arguments...) \
642 CCC_flat_double_ended_queue_copy(arguments)
643# define flat_double_ended_queue_reserve(arguments...) \
644 CCC_flat_double_ended_queue_reserve(arguments)
645# define flat_double_ended_queue_emplace(arguments...) \
646 CCC_flat_double_ended_queue_emplace(arguments)
647# define flat_double_ended_queue_push_back(arguments...) \
648 CCC_flat_double_ended_queue_push_back(arguments)
649# define flat_double_ended_queue_emplace_back(arguments...) \
650 CCC_flat_double_ended_queue_emplace_back(arguments)
651# define flat_double_ended_queue_push_back_range(arguments...) \
652 CCC_flat_double_ended_queue_push_back_range(arguments)
653# define flat_double_ended_queue_push_front(arguments...) \
654 CCC_flat_double_ended_queue_push_front(arguments)
655# define flat_double_ended_queue_emplace_front(arguments...) \
656 CCC_flat_double_ended_queue_emplace_front(arguments)
657# define flat_double_ended_queue_push_front_range(arguments...) \
658 CCC_flat_double_ended_queue_push_front_range(arguments)
659# define flat_double_ended_queue_insert_range(arguments...) \
660 CCC_flat_double_ended_queue_insert_range(arguments)
661# define flat_double_ended_queue_pop_front(arguments...) \
662 CCC_flat_double_ended_queue_pop_front(arguments)
663# define flat_double_ended_queue_pop_back(arguments...) \
664 CCC_flat_double_ended_queue_pop_back(arguments)
665# define flat_double_ended_queue_front(arguments...) \
666 CCC_flat_double_ended_queue_front(arguments)
667# define flat_double_ended_queue_back(arguments...) \
668 CCC_flat_double_ended_queue_back(arguments)
669# define flat_double_ended_queue_is_empty(arguments...) \
670 CCC_flat_double_ended_queue_is_empty(arguments)
671# define flat_double_ended_queue_count(arguments...) \
672 CCC_flat_double_ended_queue_count(arguments)
673# define flat_double_ended_queue_capacity(arguments...) \
674 CCC_flat_double_ended_queue_capacity(arguments)
675# define flat_double_ended_queue_clear(arguments...) \
676 CCC_flat_double_ended_queue_clear(arguments)
677# define flat_double_ended_queue_clear_and_free(arguments...) \
678 CCC_flat_double_ended_queue_clear_and_free(arguments)
679# define flat_double_ended_queue_clear_and_free_reserve(arguments...) \
680 CCC_flat_double_ended_queue_clear_and_free_reserve(arguments)
681# define flat_double_ended_queue_at(arguments...) \
682 CCC_flat_double_ended_queue_at(arguments)
683# define flat_double_ended_queue_data(arguments...) \
684 CCC_flat_double_ended_queue_data(arguments)
685# define flat_double_ended_queue_begin(arguments...) \
686 CCC_flat_double_ended_queue_begin(arguments)
687# define flat_double_ended_queue_reverse_begin(arguments...) \
688 CCC_flat_double_ended_queue_reverse_begin(arguments)
689# define flat_double_ended_queue_next(arguments...) \
690 CCC_flat_double_ended_queue_next(arguments)
691# define flat_double_ended_queue_reverse_next(arguments...) \
692 CCC_flat_double_ended_queue_reverse_next(arguments)
693# define flat_double_ended_queue_end(arguments...) \
694 CCC_flat_double_ended_queue_end(arguments)
695# define flat_double_ended_queue_reverse_end(arguments...) \
696 CCC_flat_double_ended_queue_reverse_end(arguments)
697# define flat_double_ended_queue_validate(arguments...) \
698 CCC_flat_double_ended_queue_validate(arguments)
The Flat_buffer Interface.
CCC_Result CCC_flat_double_ended_queue_clear(CCC_Flat_double_ended_queue *queue, CCC_Destructor const *destructor)
Set size of queue to 0 and call destructor on each element if needed. O(1) if no destructor is provid...
CCC_Tribool CCC_flat_double_ended_queue_is_empty(CCC_Flat_double_ended_queue const *queue)
Return true if the size of the queue is 0. O(1).
void * CCC_flat_double_ended_queue_at(CCC_Flat_double_ended_queue const *queue, size_t i)
Return a reference to the element at index position i. O(1).
CCC_Result CCC_flat_double_ended_queue_reserve(CCC_Flat_double_ended_queue *queue, size_t to_add, CCC_Allocator const *allocator)
Reserves space for at least to_add more elements.
CCC_Result CCC_flat_double_ended_queue_pop_back(CCC_Flat_double_ended_queue *queue)
Pop an element from the back of the flat_double_ended_queue. O(1).
CCC_Tribool CCC_flat_double_ended_queue_validate(CCC_Flat_double_ended_queue const *queue)
Return true if the internal invariants of the flat_double_ended_queue.
void * CCC_flat_double_ended_queue_insert_range(CCC_Flat_double_ended_queue *queue, void *position, CCC_Flat_buffer const *range, CCC_Allocator const *allocator)
Push the range of user types before position of the flat_double_ended_queue. O(N).
void * CCC_flat_double_ended_queue_push_back(CCC_Flat_double_ended_queue *queue, void const *type, CCC_Allocator const *allocator)
Push the user type to the back of the flat_double_ended_queue. O(1) if no allocation permission amort...
void * CCC_flat_double_ended_queue_reverse_end(CCC_Flat_double_ended_queue const *queue)
Return a pointer to the start element. It may not be accessed. O(1).
CCC_Result CCC_flat_double_ended_queue_push_back_range(CCC_Flat_double_ended_queue *queue, CCC_Flat_buffer const *range, CCC_Allocator const *allocator)
Push the range of user types to the back of the flat_double_ended_queue. O(N).
CCC_Result CCC_flat_double_ended_queue_push_front_range(CCC_Flat_double_ended_queue *queue, CCC_Flat_buffer const *range, CCC_Allocator const *allocator)
Push the range of user types to the front of the flat_double_ended_queue. O(N).
void * CCC_flat_double_ended_queue_front(CCC_Flat_double_ended_queue const *queue)
Return a reference to the front of the flat_double_ended_queue. O(1).
void * CCC_flat_double_ended_queue_next(CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer)
Return the next element in the queue moving front to back. O(1).
void * CCC_flat_double_ended_queue_push_front(CCC_Flat_double_ended_queue *queue, void const *type, CCC_Allocator const *allocator)
Push the user type to the front of the flat_double_ended_queue. O(1) if no allocation permission amor...
void * CCC_flat_double_ended_queue_back(CCC_Flat_double_ended_queue const *queue)
Return a reference to the back of the flat_double_ended_queue. O(1).
void * CCC_flat_double_ended_queue_reverse_begin(CCC_Flat_double_ended_queue const *queue)
Return a pointer to the back element of the flat_double_ended_queue. O(1).
CCC_Result CCC_flat_double_ended_queue_pop_front(CCC_Flat_double_ended_queue *queue)
Pop an element from the front of the flat_double_ended_queue. O(1).
CCC_Count CCC_flat_double_ended_queue_capacity(CCC_Flat_double_ended_queue const *queue)
Return the capacity representing total possible slots. O(1).
CCC_Result CCC_flat_double_ended_queue_copy(CCC_Flat_double_ended_queue *destination, CCC_Flat_double_ended_queue const *source, CCC_Allocator const *allocator)
Copy the queue from source to newly initialized destination.
CCC_Count CCC_flat_double_ended_queue_count(CCC_Flat_double_ended_queue const *queue)
Return the count of active queue slots. O(1).
CCC_Result CCC_flat_double_ended_queue_clear_and_free(CCC_Flat_double_ended_queue *queue, CCC_Destructor const *destructor, CCC_Allocator const *allocator)
Set size of queue to 0 and call destructor on each element if needed. Free the underlying Flat_buffer...
void * CCC_flat_double_ended_queue_begin(CCC_Flat_double_ended_queue const *queue)
Return a pointer to the front element of the flat_double_ended_queue. O(1).
void * CCC_flat_double_ended_queue_data(CCC_Flat_double_ended_queue const *queue)
Return a reference to the base of backing array. O(1).
void * CCC_flat_double_ended_queue_end(CCC_Flat_double_ended_queue const *queue)
Return a pointer to the end element. It may not be accessed. O(1).
void * CCC_flat_double_ended_queue_reverse_next(CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer)
Return the next element in the queue moving back to front. O(1).
The Private Flat Double Ended Queue Types and Interface.
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:384
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:243
The type passed by reference to any container function that may need to destroy elements....
Definition: types.h:472
Definition: private_flat_buffer.h:40
Definition: private_flat_double_ended_queue.h:43
The C Container Collection Fundamental Types.
CCC_Tribool
A three state boolean to allow for an error state. Error is -1, False is 0, and True is 1.
Definition: types.h:178
CCC_Result
A result of actions on containers.
Definition: types.h:192