C Container Collection (CCC)
Loading...
Searching...
No Matches
flat_double_ended_queue.h
Go to the documentation of this file.
1
41#ifndef CCC_FLAT_DOUBLE_ENDED_QUEUE_H
42#define CCC_FLAT_DOUBLE_ENDED_QUEUE_H
43
45#include <stddef.h>
48#include "private/private_flat_double_ended_queue.h"
49#include "types.h"
50
62
79#define CCC_flat_double_ended_queue_initialize( \
80 type_name, allocate, context_data, capacity, count, data_pointer...) \
81 CCC_private_flat_double_ended_queue_initialize( \
82 type_name, allocate, context_data, capacity, count, data_pointer)
83
133#define CCC_flat_double_ended_queue_from( \
134 allocate, context_data, optional_capacity, compound_literal_array...) \
135 CCC_private_flat_double_ended_queue_from( \
136 allocate, context_data, optional_capacity, compound_literal_array)
137
163#define CCC_flat_double_ended_queue_with_capacity(type_name, allocate, \
164 context_data, capacity) \
165 CCC_private_flat_double_ended_queue_with_capacity(type_name, allocate, \
166 context_data, capacity)
167
175#define CCC_flat_double_ended_queue_with_compound_literal( \
176 count, compound_literal_array...) \
177 CCC_private_flat_double_ended_queue_with_compound_literal( \
178 count, compound_literal_array)
179
188#define CCC_flat_double_ended_queue_with_context_compound_literal( \
189 context, count, compound_literal_array...) \
190 CCC_private_flat_double_ended_queue_with_context_compound_literal( \
191 context, count, compound_literal_array)
192
200#define CCC_flat_double_ended_queue_with_allocator(type_name, allocate) \
201 CCC_private_flat_double_ended_queue_with_allocator(type_name, allocate)
202
211#define CCC_flat_double_ended_queue_with_context_allocator(type_name, \
212 allocate, context) \
213 CCC_private_flat_double_ended_queue_with_context_allocator( \
214 type_name, allocate, context)
215
338 CCC_Flat_double_ended_queue const *source,
339 CCC_Allocator *allocate);
340
362 size_t to_add, CCC_Allocator *allocate);
363
379#define CCC_flat_double_ended_queue_emplace_back( \
380 flat_double_ended_queue_pointer, value...) \
381 CCC_private_flat_double_ended_queue_emplace_back( \
382 flat_double_ended_queue_pointer, value)
383
392#define CCC_flat_double_ended_queue_emplace_front( \
393 flat_double_ended_queue_pointer, value...) \
394 CCC_private_flat_double_ended_queue_emplace_front( \
395 flat_double_ended_queue_pointer, value)
396
404[[nodiscard]] void *
406 void const *type);
407
421 CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array);
422
429[[nodiscard]] void *
431 void const *type);
432
446 CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array);
447
487[[nodiscard]] void *
489 void *position, size_t count,
490 void const *type_array);
491
498
505
522 CCC_Type_destructor *destructor);
523
536 CCC_Type_destructor *destructor);
537
571 CCC_Allocator *allocate);
572
584[[nodiscard]] void *
586
593 CCC_Flat_double_ended_queue const *queue);
594
600[[nodiscard]] void *
602 void const *iterator_pointer);
603
610 CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer);
611
615[[nodiscard]] void *
617
622 CCC_Flat_double_ended_queue const *queue);
623
637[[nodiscard]] void *
639 size_t i);
640
645[[nodiscard]] void *
647
652[[nodiscard]] void *
654
659[[nodiscard]] CCC_Tribool
661
666[[nodiscard]] CCC_Count
668
673[[nodiscard]] CCC_Count
675
687[[nodiscard]] void *
689
695[[nodiscard]] CCC_Tribool
697
703#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
704typedef CCC_Flat_double_ended_queue Flat_double_ended_queue;
705# define flat_double_ended_queue_initialize(arguments...) \
706 CCC_flat_double_ended_queue_initialize(arguments)
707# define flat_double_ended_queue_from(arguments...) \
708 CCC_flat_double_ended_queue_from(arguments)
709# define flat_double_ended_queue_with_capacity(arguments...) \
710 CCC_flat_double_ended_queue_with_capacity(arguments)
711# define flat_double_ended_queue_with_compound_literal(arguments...) \
712 CCC_flat_double_ended_queue_with_compound_literal(arguments)
713# define flat_double_ended_queue_with_context_compound_literal( \
714 arguments...) \
715 CCC_flat_double_ended_queue_with_context_compound_literal(arguments)
716# define flat_double_ended_queue_with_allocator(arguments...) \
717 CCC_flat_double_ended_queue_with_allocator(arguments)
718# define flat_double_ended_queue_with_context_allocator(arguments...) \
719 CCC_flat_double_ended_queue_with_context_allocator(arguments)
720# define flat_double_ended_queue_copy(arguments...) \
721 CCC_flat_double_ended_queue_copy(arguments)
722# define flat_double_ended_queue_reserve(arguments...) \
723 CCC_flat_double_ended_queue_reserve(arguments)
724# define flat_double_ended_queue_emplace(arguments...) \
725 CCC_flat_double_ended_queue_emplace(arguments)
726# define flat_double_ended_queue_push_back(arguments...) \
727 CCC_flat_double_ended_queue_push_back(arguments)
728# define flat_double_ended_queue_push_back_range(arguments...) \
729 CCC_flat_double_ended_queue_push_back_range(arguments)
730# define flat_double_ended_queue_push_front(arguments...) \
731 CCC_flat_double_ended_queue_push_front(arguments)
732# define flat_double_ended_queue_push_front_range(arguments...) \
733 CCC_flat_double_ended_queue_push_front_range(arguments)
734# define flat_double_ended_queue_insert_range(arguments...) \
735 CCC_flat_double_ended_queue_insert_range(arguments)
736# define flat_double_ended_queue_pop_front(arguments...) \
737 CCC_flat_double_ended_queue_pop_front(arguments)
738# define flat_double_ended_queue_pop_back(arguments...) \
739 CCC_flat_double_ended_queue_pop_back(arguments)
740# define flat_double_ended_queue_front(arguments...) \
741 CCC_flat_double_ended_queue_front(arguments)
742# define flat_double_ended_queue_back(arguments...) \
743 CCC_flat_double_ended_queue_back(arguments)
744# define flat_double_ended_queue_is_empty(arguments...) \
745 CCC_flat_double_ended_queue_is_empty(arguments)
746# define flat_double_ended_queue_count(arguments...) \
747 CCC_flat_double_ended_queue_count(arguments)
748# define flat_double_ended_queue_clear(arguments...) \
749 CCC_flat_double_ended_queue_clear(arguments)
750# define flat_double_ended_queue_clear_and_free(arguments...) \
751 CCC_flat_double_ended_queue_clear_and_free(arguments)
752# define flat_double_ended_queue_clear_and_free_reserve(arguments...) \
753 CCC_flat_double_ended_queue_clear_and_free_reserve(arguments)
754# define flat_double_ended_queue_at(arguments...) \
755 CCC_flat_double_ended_queue_at(arguments)
756# define flat_double_ended_queue_data(arguments...) \
757 CCC_flat_double_ended_queue_data(arguments)
758# define flat_double_ended_queue_begin(arguments...) \
759 CCC_flat_double_ended_queue_begin(arguments)
760# define flat_double_ended_queue_reverse_begin(arguments...) \
761 CCC_flat_double_ended_queue_reverse_begin(arguments)
762# define flat_double_ended_queue_next(arguments...) \
763 CCC_flat_double_ended_queue_next(arguments)
764# define flat_double_ended_queue_reverse_next(arguments...) \
765 CCC_flat_double_ended_queue_reverse_next(arguments)
766# define flat_double_ended_queue_end(arguments...) \
767 CCC_flat_double_ended_queue_end(arguments)
768# define flat_double_ended_queue_reverse_end(arguments...) \
769 CCC_flat_double_ended_queue_reverse_end(arguments)
770# define flat_double_ended_queue_validate(arguments...) \
771 CCC_flat_double_ended_queue_validate(arguments)
772#endif /* FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC */
773
774#endif /* CCC_FLAT_DOUBLE_ENDED_QUEUE_H */
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