C Container Collection (CCC)
Loading...
Searching...
No Matches
flat_double_ended_queue.h
Go to the documentation of this file.
1
42#ifndef CCC_FLAT_DOUBLE_ENDED_QUEUE_H
43#define CCC_FLAT_DOUBLE_ENDED_QUEUE_H
44
46#include <stddef.h>
49#include "buffer.h"
50#include "private/private_flat_double_ended_queue.h"
51#include "types.h"
52
64
85#define CCC_flat_double_ended_queue_default(type_name) \
86 CCC_private_flat_double_ended_queue_default(type_name)
87
96#define CCC_flat_double_ended_queue_for( \
97 type_name, capacity, count, data_pointer... \
98) \
99 CCC_private_flat_double_ended_queue_for( \
100 type_name, capacity, count, data_pointer \
101 )
102
153#define CCC_flat_double_ended_queue_from( \
154 allocator, optional_capacity, compound_literal_array... \
155) \
156 CCC_private_flat_double_ended_queue_from( \
157 allocator, optional_capacity, compound_literal_array \
158 )
159
184#define CCC_flat_double_ended_queue_with_capacity( \
185 type_name, allocator, capacity \
186) \
187 CCC_private_flat_double_ended_queue_with_capacity( \
188 type_name, allocator, capacity \
189 )
190
197#define CCC_flat_double_ended_queue_with_storage( \
198 count, compound_literal_array... \
199) \
200 CCC_private_flat_double_ended_queue_with_storage( \
201 count, compound_literal_array \
202 )
203
267 CCC_Flat_double_ended_queue *destination,
268 CCC_Flat_double_ended_queue const *source,
269 CCC_Allocator const *allocator
270);
271
283 size_t to_add,
284 CCC_Allocator const *allocator
285);
286
304#define CCC_flat_double_ended_queue_emplace_back( \
305 flat_double_ended_queue_pointer, allocator_pointer, value... \
306) \
307 CCC_private_flat_double_ended_queue_emplace_back( \
308 flat_double_ended_queue_pointer, allocator_pointer, value \
309 )
310
321#define CCC_flat_double_ended_queue_emplace_front( \
322 flat_double_ended_queue_pointer, allocator_pointer, value... \
323) \
324 CCC_private_flat_double_ended_queue_emplace_front( \
325 flat_double_ended_queue_pointer, allocator_pointer, value \
326 )
327
339 void const *type,
340 CCC_Allocator const *allocator
341);
342
358 CCC_Buffer const *range,
359 CCC_Allocator const *allocator
360);
361
372 void const *type,
373 CCC_Allocator const *allocator
374);
375
391 CCC_Buffer const *range,
392 CCC_Allocator const *allocator
393);
394
433 void *position,
434 CCC_Buffer const *range,
435 CCC_Allocator const *allocator
436);
437
444
451
469 CCC_Flat_double_ended_queue *queue, CCC_Destructor const *destructor
470);
471
486 CCC_Destructor const *destructor,
487 CCC_Allocator const *allocator
488);
489
501[[nodiscard]] void *
503
510 CCC_Flat_double_ended_queue const *queue
511);
512
519 CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer
520);
521
528 CCC_Flat_double_ended_queue const *queue, void const *iterator_pointer
529);
530
534[[nodiscard]] void *
536
541 CCC_Flat_double_ended_queue const *queue
542);
543
558 CCC_Flat_double_ended_queue const *queue, size_t i
559);
560
565[[nodiscard]] void *
567
572[[nodiscard]] void *
574
579[[nodiscard]] CCC_Tribool
581
586[[nodiscard]] CCC_Count
588
593[[nodiscard]] CCC_Count
595
607[[nodiscard]] void *
609
615[[nodiscard]] CCC_Tribool
617
623#ifdef FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC
624/* NOLINTBEGIN(readability-identifier-naming) */
625typedef CCC_Flat_double_ended_queue Flat_double_ended_queue;
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)
690/* NOLINTEND(readability-identifier-naming) */
691#endif /* FLAT_DOUBLE_ENDED_QUEUE_USING_NAMESPACE_CCC */
692
693#endif /* CCC_FLAT_DOUBLE_ENDED_QUEUE_H */
The 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_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