41#ifndef CCC_FLAT_DOUBLE_ENDED_QUEUE_H
42#define CCC_FLAT_DOUBLE_ENDED_QUEUE_H
48#include "private/private_flat_double_ended_queue.h"
79#define CCC_flat_double_ended_queue_initialize(data_pointer, type_name, \
80 allocate, context_data, \
81 capacity, optional_size...) \
82 CCC_private_flat_double_ended_queue_initialize(data_pointer, type_name, \
83 allocate, context_data, \
84 capacity, optional_size)
137#define CCC_flat_double_ended_queue_from( \
138 allocate, context_data, optional_capacity, compound_literal_array...) \
139 CCC_private_flat_double_ended_queue_from( \
140 allocate, context_data, optional_capacity, compound_literal_array)
169#define CCC_flat_double_ended_queue_with_capacity(type_name, allocate, \
170 context_data, capacity) \
171 CCC_private_flat_double_ended_queue_with_capacity(type_name, allocate, \
172 context_data, capacity)
181#define CCC_flat_double_ended_queue_with_compound_literal( \
182 count, compound_literal_array...) \
183 CCC_private_flat_double_ended_queue_with_compound_literal( \
184 count, compound_literal_array)
194#define CCC_flat_double_ended_queue_with_context_compound_literal( \
195 count, compound_literal_array...) \
196 CCC_private_flat_double_ended_queue_with_context_compound_literal( \
197 count, compound_literal_array)
357#define CCC_flat_double_ended_queue_emplace_back( \
358 flat_double_ended_queue_pointer, value...) \
359 CCC_private_flat_double_ended_queue_emplace_back( \
360 flat_double_ended_queue_pointer, value)
371#define CCC_flat_double_ended_queue_emplace_front( \
372 flat_double_ended_queue_pointer, value...) \
373 CCC_private_flat_double_ended_queue_emplace_front( \
374 flat_double_ended_queue_pointer, value)
469 void *position,
size_t count,
470 void const *type_array);
582 void const *iterator_pointer);
683#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
685# define flat_double_ended_queue_initialize(args...) \
686 CCC_flat_double_ended_queue_initialize(args)
687# define flat_double_ended_queue_from(args...) \
688 CCC_flat_double_ended_queue_from(args)
689# define flat_double_ended_queue_with_capacity(args...) \
690 CCC_flat_double_ended_queue_with_capacity(args)
691# define flat_double_ended_queue_copy(args...) \
692 CCC_flat_double_ended_queue_copy(args)
693# define flat_double_ended_queue_reserve(args...) \
694 CCC_flat_double_ended_queue_reserve(args)
695# define flat_double_ended_queue_emplace(args...) \
696 CCC_flat_double_ended_queue_emplace(args)
697# define flat_double_ended_queue_push_back(args...) \
698 CCC_flat_double_ended_queue_push_back(args)
699# define flat_double_ended_queue_push_back_range(args...) \
700 CCC_flat_double_ended_queue_push_back_range(args)
701# define flat_double_ended_queue_push_front(args...) \
702 CCC_flat_double_ended_queue_push_front(args)
703# define flat_double_ended_queue_push_front_range(args...) \
704 CCC_flat_double_ended_queue_push_front_range(args)
705# define flat_double_ended_queue_insert_range(args...) \
706 CCC_flat_double_ended_queue_insert_range(args)
707# define flat_double_ended_queue_pop_front(args...) \
708 CCC_flat_double_ended_queue_pop_front(args)
709# define flat_double_ended_queue_pop_back(args...) \
710 CCC_flat_double_ended_queue_pop_back(args)
711# define flat_double_ended_queue_front(args...) \
712 CCC_flat_double_ended_queue_front(args)
713# define flat_double_ended_queue_back(args...) \
714 CCC_flat_double_ended_queue_back(args)
715# define flat_double_ended_queue_is_empty(args...) \
716 CCC_flat_double_ended_queue_is_empty(args)
717# define flat_double_ended_queue_count(args...) \
718 CCC_flat_double_ended_queue_count(args)
719# define flat_double_ended_queue_clear(args...) \
720 CCC_flat_double_ended_queue_clear(args)
721# define flat_double_ended_queue_clear_and_free(args...) \
722 CCC_flat_double_ended_queue_clear_and_free(args)
723# define flat_double_ended_queue_clear_and_free_reserve(args...) \
724 CCC_flat_double_ended_queue_clear_and_free_reserve(args)
725# define flat_double_ended_queue_at(args...) \
726 CCC_flat_double_ended_queue_at(args)
727# define flat_double_ended_queue_data(args...) \
728 CCC_flat_double_ended_queue_data(args)
729# define flat_double_ended_queue_begin(args...) \
730 CCC_flat_double_ended_queue_begin(args)
731# define flat_double_ended_queue_reverse_begin(args...) \
732 CCC_flat_double_ended_queue_reverse_begin(args)
733# define flat_double_ended_queue_next(args...) \
734 CCC_flat_double_ended_queue_next(args)
735# define flat_double_ended_queue_reverse_next(args...) \
736 CCC_flat_double_ended_queue_reverse_next(args)
737# define flat_double_ended_queue_end(args...) \
738 CCC_flat_double_ended_queue_end(args)
739# define flat_double_ended_queue_reverse_end(args...) \
740 CCC_flat_double_ended_queue_reverse_end(args)
741# define flat_double_ended_queue_validate(args...) \
742 CCC_flat_double_ended_queue_validate(args)
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).
CCC_Result CCC_flat_double_ended_queue_push_back_range(CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array)
Push the range of user types to the back of the flat_double_ended_queue. O(N).
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_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.
CCC_Result CCC_flat_double_ended_queue_copy(CCC_Flat_double_ended_queue *destination, CCC_Flat_double_ended_queue const *source, CCC_Allocator *allocate)
Copy the queue from source to newly initialized destination.
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_front_range(CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array)
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).
CCC_Result CCC_flat_double_ended_queue_reserve(CCC_Flat_double_ended_queue *queue, size_t to_add, CCC_Allocator *allocate)
Reserves space for at least to_add more elements.
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_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).
void * CCC_flat_double_ended_queue_push_back(CCC_Flat_double_ended_queue *queue, void const *type)
Push the user type to the back of the flat_double_ended_queue. O(1) if no allocation permission amort...
CCC_Result CCC_flat_double_ended_queue_clear_and_free(CCC_Flat_double_ended_queue *queue, CCC_Type_destructor *destructor)
Set size of queue to 0 and call destructor on each element if needed. Free the underlying Buffer sett...
CCC_Count CCC_flat_double_ended_queue_count(CCC_Flat_double_ended_queue const *queue)
Return the count of active queue slots. O(1).
void * CCC_flat_double_ended_queue_insert_range(CCC_Flat_double_ended_queue *queue, void *position, size_t count, void const *type_array)
Push the range of user types before position of the flat_double_ended_queue. O(N).
void * CCC_flat_double_ended_queue_push_front(CCC_Flat_double_ended_queue *queue, void const *type)
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_begin(CCC_Flat_double_ended_queue const *queue)
Return a pointer to the front element of the flat_double_ended_queue. O(1).
CCC_Result CCC_flat_double_ended_queue_clear_and_free_reserve(CCC_Flat_double_ended_queue *queue, CCC_Type_destructor *destructor, CCC_Allocator *allocate)
Frees all slots in the queue and frees the underlying Buffer that was previously dynamically reserved...
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).
CCC_Result CCC_flat_double_ended_queue_clear(CCC_Flat_double_ended_queue *queue, CCC_Type_destructor *destructor)
Set size of queue to 0 and call destructor on each element if needed. O(1) if no destructor is provid...
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:202
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:133
void CCC_Type_destructor(CCC_Type_context)
A callback function for destroying an element in the container.
Definition: types.h:376
CCC_Result
A result of actions on containers.
Definition: types.h:148
void * CCC_Allocator(CCC_Allocator_context)
An allocation function at the core of all containers.
Definition: types.h:340