59#ifndef CCC_FLAT_BITSET_H
60#define CCC_FLAT_BITSET_H
67#include "private/private_flat_bitset.h"
105#define CCC_flat_bitset_block_count(bit_capacity) \
106 CCC_private_flat_bitset_block_count(bit_capacity)
112#define CCC_flat_bitset_block_bytes(bit_capacity) \
113 CCC_private_flat_bitset_block_bytes(bit_capacity)
117#define CCC_flat_bitset_default() CCC_private_flat_bitset_default()
143#define CCC_flat_bitset_with_storage( \
144 count, compound_literal_array, optional_storage_specifier... \
146 CCC_private_flat_bitset_with_storage( \
147 count, compound_literal_array, optional_storage_specifier \
186#define CCC_flat_bitset_from( \
188 start_string_index, \
192 optional_capacity... \
194 CCC_private_flat_bitset_from( \
196 start_string_index, \
235#define CCC_flat_bitset_with_capacity(allocator, capacity, optional_count...) \
236 CCC_private_flat_bitset_with_capacity(allocator, capacity, optional_count)
276#define CCC_flat_bitset_storage_for( \
277 bit_compound_literal_array, optional_storage_specifier... \
279 CCC_private_flat_bitset_storage_for( \
280 bit_compound_literal_array, optional_storage_specifier \
317#define CCC_flat_bitset_for(cap, count, bitblock_pointer...) \
318 CCC_private_flat_bitset_for(cap, count, bitblock_pointer)
433 size_t range_start_index,
434 size_t range_bit_count,
464 CCC_Flat_bitset *bitset,
size_t range_start_index,
size_t range_bit_count
493 CCC_Flat_bitset *bitset,
size_t range_start_index,
size_t range_bit_count
517 size_t range_start_index,
518 size_t range_bit_count
536 size_t range_start_index,
537 size_t range_bit_count
556 size_t range_start_index,
557 size_t range_bit_count
577 size_t range_start_index,
578 size_t range_bit_count
604 size_t range_start_index,
605 size_t range_bit_count,
626 size_t range_start_index,
627 size_t range_bit_count
653 size_t range_start_index,
654 size_t range_bit_count,
702 size_t range_start_index,
703 size_t range_bit_count,
726 size_t range_start_index,
727 size_t range_bit_count
756 size_t range_start_index,
757 size_t range_bit_count,
951 size_t range_start_index,
952 size_t range_bit_count
1005#ifdef FLAT_BITSET_USING_NAMESPACE_CCC
1009# define FLAT_BITSET_BLOCK_BITS CCC_FLAT_BITSET_BLOCK_BITS
1010# define flat_bitset_block_count(arguments...) \
1011 CCC_flat_bitset_block_count(arguments)
1012# define flat_bitset_block_bytes(arguments...) \
1013 CCC_flat_bitset_block_bytes(arguments)
1014# define flat_bitset_storage_for(arguments...) \
1015 CCC_flat_bitset_storage_for(arguments)
1016# define flat_bitset_default(arguments...) CCC_flat_bitset_default(arguments)
1017# define flat_bitset_for(arguments...) CCC_flat_bitset_for(arguments)
1018# define flat_bitset_from(arguments...) CCC_flat_bitset_from(arguments)
1019# define flat_bitset_with_capacity(arguments...) \
1020 CCC_flat_bitset_with_capacity(arguments)
1021# define flat_bitset_with_storage(arguments...) \
1022 CCC_flat_bitset_with_storage(arguments)
1023# define flat_bitset_copy(arguments...) CCC_flat_bitset_copy(arguments)
1024# define flat_bitset_reserve(arguments...) CCC_flat_bitset_reserve(arguments)
1025# define flat_bitset_test(arguments...) CCC_flat_bitset_test(arguments)
1026# define flat_bitset_set(arguments...) CCC_flat_bitset_set(arguments)
1027# define flat_bitset_set_all(arguments...) CCC_flat_bitset_set_all(arguments)
1028# define flat_bitset_set_range(arguments...) \
1029 CCC_flat_bitset_set_range(arguments)
1030# define flat_bitset_reset(arguments...) CCC_flat_bitset_reset(arguments)
1031# define flat_bitset_reset_all(arguments...) \
1032 CCC_flat_bitset_reset_all(arguments)
1033# define flat_bitset_reset_range(arguments...) \
1034 CCC_flat_bitset_reset_range(arguments)
1035# define flat_bitset_flip(arguments...) CCC_flat_bitset_flip(arguments)
1036# define flat_bitset_flip_all(arguments...) \
1037 CCC_flat_bitset_flip_all(arguments)
1038# define flat_bitset_flip_range(arguments...) \
1039 CCC_flat_bitset_flip_range(arguments)
1040# define flat_bitset_any(arguments...) CCC_flat_bitset_any(arguments)
1041# define flat_bitset_any_range(arguments...) \
1042 CCC_flat_bitset_any_range(arguments)
1043# define flat_bitset_none(arguments...) CCC_flat_bitset_none(arguments)
1044# define flat_bitset_none_range(arguments...) \
1045 CCC_flat_bitset_none_range(arguments)
1046# define flat_bitset_all(arguments...) CCC_flat_bitset_all(arguments)
1047# define flat_bitset_all_range(arguments...) \
1048 CCC_flat_bitset_all_range(arguments)
1049# define flat_bitset_first_trailing_one(arguments...) \
1050 CCC_flat_bitset_first_trailing_one(arguments)
1051# define flat_bitset_first_trailing_one_range(arguments...) \
1052 CCC_flat_bitset_first_trailing_one_range(arguments)
1053# define flat_bitset_first_trailing_ones(arguments...) \
1054 CCC_flat_bitset_first_trailing_ones(arguments)
1055# define flat_bitset_first_trailing_ones_range(arguments...) \
1056 CCC_flat_bitset_first_trailing_ones_range(arguments)
1057# define flat_bitset_first_trailing_zero(arguments...) \
1058 CCC_flat_bitset_first_trailing_zero(arguments)
1059# define flat_bitset_first_trailing_zero_range(arguments...) \
1060 CCC_flat_bitset_first_trailing_zero_range(arguments)
1061# define flat_bitset_first_trailing_zeros(arguments...) \
1062 CCC_flat_bitset_first_trailing_zeros(arguments)
1063# define flat_bitset_first_trailing_zeros_range(arguments...) \
1064 CCC_flat_bitset_first_trailing_zeros_range(arguments)
1065# define flat_bitset_first_leading_one(arguments...) \
1066 CCC_flat_bitset_first_leading_one(arguments)
1067# define flat_bitset_first_leading_one_range(arguments...) \
1068 CCC_flat_bitset_first_leading_one_range(arguments)
1069# define flat_bitset_first_leading_ones(arguments...) \
1070 CCC_flat_bitset_first_leading_ones(arguments)
1071# define flat_bitset_first_leading_ones_range(arguments...) \
1072 CCC_flat_bitset_first_leading_ones_range(arguments)
1073# define flat_bitset_first_leading_zero(arguments...) \
1074 CCC_flat_bitset_first_leading_zero(arguments)
1075# define flat_bitset_first_leading_zero_range(arguments...) \
1076 CCC_flat_bitset_first_leading_zero_range(arguments)
1077# define flat_bitset_first_leading_zeros(arguments...) \
1078 CCC_flat_bitset_first_leading_zeros(arguments)
1079# define flat_bitset_first_leading_zeros_range(arguments...) \
1080 CCC_flat_bitset_first_leading_zeros_range(arguments)
1081# define flat_bitset_or(arguments...) CCC_flat_bitset_or(arguments)
1082# define flat_bitset_and(arguments...) CCC_flat_bitset_and(arguments)
1083# define flat_bitset_xor(arguments...) CCC_flat_bitset_xor(arguments)
1084# define flat_bitset_shift_left(arguments...) \
1085 CCC_flat_bitset_shift_left(arguments)
1086# define flat_bitset_shift_right(arguments...) \
1087 CCC_flat_bitset_shift_right(arguments)
1088# define flat_bitset_is_equal(arguments...) \
1089 CCC_flat_bitset_is_equal(arguments)
1090# define flat_bitset_is_proper_subset(arguments...) \
1091 CCC_flat_bitset_is_proper_subset(arguments)
1092# define flat_bitset_is_subset(arguments...) \
1093 CCC_flat_bitset_is_subset(arguments)
1094# define flat_bitset_data(arguments...) CCC_flat_bitset_data(arguments)
1095# define flat_bitset_capacity(arguments...) \
1096 CCC_flat_bitset_capacity(arguments)
1097# define flat_bitset_blocks_capacity(arguments...) \
1098 CCC_flat_bitset_blocks_capacity(arguments)
1099# define flat_bitset_count(arguments...) CCC_flat_bitset_count(arguments)
1100# define flat_bitset_blocks_count(arguments...) \
1101 CCC_flat_bitset_blocks_count(arguments)
1102# define flat_bitset_is_empty(arguments...) \
1103 CCC_flat_bitset_is_empty(arguments)
1104# define flat_bitset_popcount(arguments...) \
1105 CCC_flat_bitset_popcount(arguments)
1106# define flat_bitset_popcount_range(arguments...) \
1107 CCC_flat_bitset_popcount_range(arguments)
1108# define flat_bitset_clear(arguments...) CCC_flat_bitset_clear(arguments)
1109# define flat_bitset_clear_and_free(arguments...) \
1110 CCC_flat_bitset_clear_and_free(arguments)
1111# define flat_bitset_push_back(arguments...) \
1112 CCC_flat_bitset_push_back(arguments)
1113# define flat_bitset_pop_back(arguments...) \
1114 CCC_flat_bitset_pop_back(arguments)
CCC_Tribool CCC_flat_bitset_is_empty(CCC_Flat_bitset const *bitset)
Return true if no bits are actively tracked by the user and set.
CCC_Tribool CCC_flat_bitset_set(CCC_Flat_bitset *bitset, size_t index, CCC_Tribool bit)
Set the bit at valid index index to value bit (true or false).
CCC_Count CCC_flat_bitset_first_leading_one(CCC_Flat_bitset const *bitset)
Return the index of the first leading bit set to 1 in the set, starting from the Most Significant Bit...
CCC_Tribool CCC_flat_bitset_is_proper_subset(CCC_Flat_bitset const *subset, CCC_Flat_bitset const *set)
Return CCC_TRUE if subset is a proper subset of set (subset ⊂ set).
CCC_Count CCC_flat_bitset_first_trailing_zeros_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count, size_t zeros_count)
Returns the index of the start of the first trailing zeros_count contiguous 0 bits in the range [i,...
CCC_Count CCC_flat_bitset_first_trailing_ones_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count, size_t ones_count)
Returns the index of the start of the first trailing number of contiguous 1 bits in the range [index,...
CCC_Result CCC_flat_bitset_reserve(CCC_Flat_bitset *bitset, size_t to_add, CCC_Allocator const *allocator)
Reserves space for at least to_add more bits.
CCC_Count CCC_flat_bitset_first_leading_zero(CCC_Flat_bitset const *bitset)
Return the index of the first leading bit set to 0 in the set, starting from the Most Significant Bit...
CCC_Count CCC_flat_bitset_first_leading_ones(CCC_Flat_bitset const *bitset, size_t ones_count)
Returns the index of the start of the first leading bit_count contiguous 1 bits.
CCC_Result CCC_flat_bitset_clear_and_free(CCC_Flat_bitset *bitset, CCC_Allocator const *allocator)
Clears the bit set by setting the size to 0 and freeing the underlying memory. Capacity becomes 0 as ...
CCC_Count CCC_flat_bitset_first_trailing_zero(CCC_Flat_bitset const *bitset)
Return the index of the first bit set to 0 in the set.
CCC_Count CCC_flat_bitset_count(CCC_Flat_bitset const *bitset)
Return total number of bits actively tracked by the user and set.
CCC_Tribool CCC_flat_bitset_any_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return true if any bits are 1 in the range [index, index + count).
CCC_Tribool CCC_flat_bitset_none_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return true if all bits are 0 in the range [index, index + count).
CCC_Result CCC_flat_bitset_set_all(CCC_Flat_bitset *bitset, CCC_Tribool bit)
Set all the bits to the provided value (CCC_TRUE or CCC_FALSE).
CCC_Result CCC_flat_bitset_shift_left(CCC_Flat_bitset *bitset, size_t left_shifts)
Shift the bit set left by left_shifts amount.
CCC_Tribool CCC_flat_bitset_is_equal(CCC_Flat_bitset const *left, CCC_Flat_bitset const *right)
Checks two bit sets of the same size (not capacity) for equality.
CCC_Result CCC_flat_bitset_push_back(CCC_Flat_bitset *bitset, CCC_Tribool bit, CCC_Allocator const *allocator)
Append a bit value to the set as the new Most Significant Bit.
@ CCC_FLAT_BITSET_BLOCK_BITS
The number of bits in a block of the bit set.
Definition: flat_bitset.h:98
CCC_Result CCC_flat_bitset_and(CCC_Flat_bitset *destination, CCC_Flat_bitset const *source)
Bitwise AND destination set with source set.
CCC_Tribool CCC_flat_bitset_is_subset(CCC_Flat_bitset const *subset, CCC_Flat_bitset const *set)
Return CCC_TRUE if subset is a subset of set (subset ⊆ set).
CCC_Result CCC_flat_bitset_set_range(CCC_Flat_bitset *bitset, size_t range_start_index, size_t range_bit_count, CCC_Tribool bit)
Set all the bits in the specified range starting at the Least Significant Bit of the range and ending...
CCC_Tribool CCC_flat_bitset_any(CCC_Flat_bitset const *bitset)
Return true if any bits in set are 1.
CCC_Count CCC_flat_bitset_first_leading_one_range(CCC_Flat_bitset const *bitset, size_t index, size_t count)
Return the index of the first leading bit set to 1 in the range [i, index + count).
void * CCC_flat_bitset_data(CCC_Flat_bitset const *bitset)
Return a reference to the base of the underlying block array.
CCC_Count CCC_flat_bitset_first_trailing_zeros(CCC_Flat_bitset const *bitset, size_t zeros_count)
Returns the index of the start of the first trailing number of contiguous 0 bits in the set.
CCC_Count CCC_flat_bitset_capacity(CCC_Flat_bitset const *bitset)
Return total number of bits the capacity of the set can hold.
CCC_Count CCC_flat_bitset_first_leading_zero_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return the index of the first leading bit set to 0 in the range [i, index + count).
CCC_Count CCC_flat_bitset_first_leading_ones_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count, size_t ones_count)
Returns the index of the start of the first leading bit_count contiguous 1 bits in the range [i,...
CCC_Result CCC_flat_bitset_or(CCC_Flat_bitset *destination, CCC_Flat_bitset const *source)
Bitwise OR destination set with source set.
CCC_Result CCC_flat_bitset_flip_all(CCC_Flat_bitset *bitset)
Toggle all of the bits to their opposing boolean value.
CCC_Tribool CCC_flat_bitset_pop_back(CCC_Flat_bitset *bitset)
Remove the Most Significant Bit from the set.
CCC_Tribool CCC_flat_bitset_reset(CCC_Flat_bitset *bitset, size_t index)
Set the bit at valid index index to boolean value b (true or false).
CCC_Tribool CCC_flat_bitset_test(CCC_Flat_bitset const *bitset, size_t index)
Test the bit at index index for boolean status (CCC_TRUE or CCC_FALSE).
CCC_Count CCC_flat_bitset_first_leading_zeros(CCC_Flat_bitset const *bitset, size_t zeros_count)
Returns the index of the start of the first leading number of contiguous 0 bits.
CCC_Count CCC_flat_bitset_first_trailing_one(CCC_Flat_bitset const *bitset)
Return the index of the first trailing bit set to 1 in the set.
CCC_Tribool CCC_flat_bitset_all_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return true if all bits are set to 1 in the range [index, index + count).
CCC_Result CCC_flat_bitset_reset_range(CCC_Flat_bitset *bitset, size_t range_start_index, size_t range_bit_count)
Set all the bits in the specified range starting at the Least Significant Bit of the range and ending...
CCC_Count CCC_flat_bitset_popcount(CCC_Flat_bitset const *bitset)
Return the number of bits set to CCC_TRUE. O(n).
CCC_Count CCC_flat_bitset_blocks_count(CCC_Flat_bitset const *bitset)
Return number of CCC_bitblocks used by the bit set for size bits.
CCC_Result CCC_flat_bitset_copy(CCC_Flat_bitset *destination, CCC_Flat_bitset const *source, CCC_Allocator const *allocator)
Copy the bit set at source to destination.
CCC_Count CCC_flat_bitset_blocks_capacity(CCC_Flat_bitset const *bitset)
Return number of CCC_bitblocks used by bit set for capacity bits.
CCC_Result CCC_flat_bitset_xor(CCC_Flat_bitset *destination, CCC_Flat_bitset const *source)
Bitwise XOR destination set with source set.
CCC_Count CCC_flat_bitset_first_trailing_zero_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return the index of the first bit set to 0 in the range [i, index + count).
CCC_Result CCC_flat_bitset_reset_all(CCC_Flat_bitset *bitset)
Set all the bits to CCC_FALSE.
CCC_Count CCC_flat_bitset_popcount_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return the number of bits set to CCC_TRUE in the range. O(n).
uint8_t CCC_Bit
A type to represent a single bit in the bit set.
Definition: flat_bitset.h:79
CCC_Result CCC_flat_bitset_flip_range(CCC_Flat_bitset *bitset, size_t range_start_index, size_t range_bit_count)
Flip all the bits in the range, starting at the Least Significant Bit in range and ending at the Most...
CCC_Count CCC_flat_bitset_first_trailing_one_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count)
Return the index of the first trailing bit set to 1 in the range [i, index + count).
CCC_Tribool CCC_flat_bitset_all(CCC_Flat_bitset const *bitset)
Return true if all bits in set are 1.
CCC_Tribool CCC_flat_bitset_flip(CCC_Flat_bitset *bitset, size_t index)
Toggle the bit at index i.
CCC_Tribool CCC_flat_bitset_none(CCC_Flat_bitset const *bitset)
Return true if all bits are set to 0.
CCC_Result CCC_flat_bitset_shift_right(CCC_Flat_bitset *bitset, size_t right_shifts)
Shift the bit set right by right_shifts amount.
CCC_Count CCC_flat_bitset_first_trailing_ones(CCC_Flat_bitset const *bitset, size_t ones_count)
Returns the index of the start of the first trailing number of contiguous 1 bits.
CCC_Count CCC_flat_bitset_first_leading_zeros_range(CCC_Flat_bitset const *bitset, size_t range_start_index, size_t range_bit_count, size_t zeros_count)
Returns the index of the start of the first leading number of contiguous 0 bits in the range [i,...
CCC_Result CCC_flat_bitset_clear(CCC_Flat_bitset *bitset)
Clears the bit set by setting the size to 0 and all bits to 0. The underlying memory capacity remains...
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:369
A type for returning an unsigned integer from a container for counting. Intended to count sizes,...
Definition: types.h:243
Definition: private_flat_bitset.h:34
size_t count
Definition: private_flat_bitset.h:38
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