42#ifndef CCC_FLAT_DOUBLE_ENDED_QUEUE_H
43#define CCC_FLAT_DOUBLE_ENDED_QUEUE_H
50#include "private/private_flat_double_ended_queue.h"
85#define CCC_flat_double_ended_queue_default(type_name) \
86 CCC_private_flat_double_ended_queue_default(type_name)
96#define CCC_flat_double_ended_queue_for( \
97 type_name, capacity, count, data_pointer... \
99 CCC_private_flat_double_ended_queue_for( \
100 type_name, capacity, count, data_pointer \
153#define CCC_flat_double_ended_queue_from( \
154 allocator, optional_capacity, compound_literal_array... \
156 CCC_private_flat_double_ended_queue_from( \
157 allocator, optional_capacity, compound_literal_array \
184#define CCC_flat_double_ended_queue_with_capacity( \
185 type_name, allocator, capacity \
187 CCC_private_flat_double_ended_queue_with_capacity( \
188 type_name, allocator, capacity \
197#define CCC_flat_double_ended_queue_with_storage( \
198 count, compound_literal_array... \
200 CCC_private_flat_double_ended_queue_with_storage( \
201 count, compound_literal_array \
304#define CCC_flat_double_ended_queue_emplace_back( \
305 flat_double_ended_queue_pointer, allocator_pointer, value... \
307 CCC_private_flat_double_ended_queue_emplace_back( \
308 flat_double_ended_queue_pointer, allocator_pointer, value \
321#define CCC_flat_double_ended_queue_emplace_front( \
322 flat_double_ended_queue_pointer, allocator_pointer, value... \
324 CCC_private_flat_double_ended_queue_emplace_front( \
325 flat_double_ended_queue_pointer, allocator_pointer, value \
623#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
626# define flat_double_ended_queue_default(argument) \
627 CCC_flat_double_ended_queue_default(argument)
628# define flat_double_ended_queue_for(arguments...) \
629 CCC_flat_double_ended_queue_for(arguments)
630# define flat_double_ended_queue_from(arguments...) \
631 CCC_flat_double_ended_queue_from(arguments)
632# define flat_double_ended_queue_with_storage(arguments...) \
633 CCC_flat_double_ended_queue_with_storage(arguments)
634# define flat_double_ended_queue_with_capacity(arguments...) \
635 CCC_flat_double_ended_queue_with_capacity(arguments)
636# define flat_double_ended_queue_copy(arguments...) \
637 CCC_flat_double_ended_queue_copy(arguments)
638# define flat_double_ended_queue_reserve(arguments...) \
639 CCC_flat_double_ended_queue_reserve(arguments)
640# define flat_double_ended_queue_emplace(arguments...) \
641 CCC_flat_double_ended_queue_emplace(arguments)
642# define flat_double_ended_queue_push_back(arguments...) \
643 CCC_flat_double_ended_queue_push_back(arguments)
644# define flat_double_ended_queue_push_back_range(arguments...) \
645 CCC_flat_double_ended_queue_push_back_range(arguments)
646# define flat_double_ended_queue_push_front(arguments...) \
647 CCC_flat_double_ended_queue_push_front(arguments)
648# define flat_double_ended_queue_push_front_range(arguments...) \
649 CCC_flat_double_ended_queue_push_front_range(arguments)
650# define flat_double_ended_queue_insert_range(arguments...) \
651 CCC_flat_double_ended_queue_insert_range(arguments)
652# define flat_double_ended_queue_pop_front(arguments...) \
653 CCC_flat_double_ended_queue_pop_front(arguments)
654# define flat_double_ended_queue_pop_back(arguments...) \
655 CCC_flat_double_ended_queue_pop_back(arguments)
656# define flat_double_ended_queue_front(arguments...) \
657 CCC_flat_double_ended_queue_front(arguments)
658# define flat_double_ended_queue_back(arguments...) \
659 CCC_flat_double_ended_queue_back(arguments)
660# define flat_double_ended_queue_is_empty(arguments...) \
661 CCC_flat_double_ended_queue_is_empty(arguments)
662# define flat_double_ended_queue_count(arguments...) \
663 CCC_flat_double_ended_queue_count(arguments)
664# define flat_double_ended_queue_capacity(arguments...) \
665 CCC_flat_double_ended_queue_capacity(arguments)
666# define flat_double_ended_queue_clear(arguments...) \
667 CCC_flat_double_ended_queue_clear(arguments)
668# define flat_double_ended_queue_clear_and_free(arguments...) \
669 CCC_flat_double_ended_queue_clear_and_free(arguments)
670# define flat_double_ended_queue_clear_and_free_reserve(arguments...) \
671 CCC_flat_double_ended_queue_clear_and_free_reserve(arguments)
672# define flat_double_ended_queue_at(arguments...) \
673 CCC_flat_double_ended_queue_at(arguments)
674# define flat_double_ended_queue_data(arguments...) \
675 CCC_flat_double_ended_queue_data(arguments)
676# define flat_double_ended_queue_begin(arguments...) \
677 CCC_flat_double_ended_queue_begin(arguments)
678# define flat_double_ended_queue_reverse_begin(arguments...) \
679 CCC_flat_double_ended_queue_reverse_begin(arguments)
680# define flat_double_ended_queue_next(arguments...) \
681 CCC_flat_double_ended_queue_next(arguments)
682# define flat_double_ended_queue_reverse_next(arguments...) \
683 CCC_flat_double_ended_queue_reverse_next(arguments)
684# define flat_double_ended_queue_end(arguments...) \
685 CCC_flat_double_ended_queue_end(arguments)
686# define flat_double_ended_queue_reverse_end(arguments...) \
687 CCC_flat_double_ended_queue_reverse_end(arguments)
688# define flat_double_ended_queue_validate(arguments...) \
689 CCC_flat_double_ended_queue_validate(arguments)
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_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).
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_push_front_range(CCC_Flat_double_ended_queue *queue, CCC_Buffer const *range, CCC_Allocator const *allocator)
Push the range of user types to the front of the flat_double_ended_queue. O(N).
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 Buffer sett...
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).
void * CCC_flat_double_ended_queue_insert_range(CCC_Flat_double_ended_queue *queue, void *position, CCC_Buffer const *range, CCC_Allocator const *allocator)
Push the range of user types before position of the flat_double_ended_queue. O(N).
CCC_Result CCC_flat_double_ended_queue_push_back_range(CCC_Flat_double_ended_queue *queue, CCC_Buffer const *range, CCC_Allocator const *allocator)
Push the range of user types to the back of the flat_double_ended_queue. O(N).
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:376
Definition: private_buffer.h:32
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:244
The type passed by reference to any container function that may need to destroy elements....
Definition: types.h:464
Definition: private_flat_double_ended_queue.h:34
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