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(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)
85
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)
141
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)
173
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)
185
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)
198
316 CCC_Flat_double_ended_queue const *source,
317 CCC_Allocator *allocate);
318
340 size_t to_add, CCC_Allocator *allocate);
341
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)
361
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)
375
383[[nodiscard]] void *
385 void const *type);
386
400 CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array);
401
409[[nodiscard]] void *
411 void const *type);
412
426 CCC_Flat_double_ended_queue *queue, size_t count, void const *type_array);
427
467[[nodiscard]] void *
469 void *position, size_t count,
470 void const *type_array);
471
478
485
502 CCC_Type_destructor *destructor);
503
516 CCC_Type_destructor *destructor);
517
551 CCC_Allocator *allocate);
552
564[[nodiscard]] void *
566
573 CCC_Flat_double_ended_queue const *queue);
574
580[[nodiscard]] void *
582 void const *iterator_pointer);
583
590 CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer);
591
595[[nodiscard]] void *
597
602 CCC_Flat_double_ended_queue const *queue);
603
617[[nodiscard]] void *
619 size_t i);
620
625[[nodiscard]] void *
627
632[[nodiscard]] void *
634
639[[nodiscard]] CCC_Tribool
641
646[[nodiscard]] CCC_Count
648
653[[nodiscard]] CCC_Count
655
667[[nodiscard]] void *
669
675[[nodiscard]] CCC_Tribool
677
683#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
684typedef CCC_Flat_double_ended_queue Flat_double_ended_queue;
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)
743#endif /* FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC */
744
745#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