103 static_cast<char*
>(inlineBuffer) -
104 static_cast<char*
>(
static_cast<void*
>(
this))))
147 return static_cast<char*
>(
static_cast<void*
>(
this)) +
mInlineOffset;
150 return static_cast<const char*
>(
static_cast<const void*
>(
this)) +
mInlineOffset;
191template <
typename T,
typename =
void>
198template <
typename T,
typename =
void>
223 new (dst) T(*
static_cast<const T*
>(src));
235template <
typename T,
typename =
void>
242template <
typename T,
typename =
void>
255 new (dst) T(
static_cast<T&&
>(*
static_cast<T*
>(src)));
270 T& ta = *
static_cast<T*
>(a);
271 T& tb = *
static_cast<T*
>(b);
272 T tmp(
static_cast<T&&
>(ta));
273 ta =
static_cast<T&&
>(tb);
274 tb =
static_cast<T&&
>(tmp);
304 T* p =
static_cast<T*
>(first);
305 for (fl::size i = 0; i < count; ++i) {
Polymorphic memory resource base class (PMR-style).
void move_assign(vector_basic &other) FL_NO_EXCEPT
Move-assign from another vector_basic (clears this first).
fl::size capacity() const FL_NO_EXCEPT
bool hasInlineBuffer() const FL_NO_EXCEPT
Does this vector have an inline buffer at all?
const vector_element_ops * mOps
void trivial_swap(void *a, void *b) const FL_NO_EXCEPT
void trivial_copy(void *dst, const void *src, fl::size count) const FL_NO_EXCEPT
const void * element_ptr(fl::size index) const FL_NO_EXCEPT
void ensure_capacity(fl::size n) FL_NO_EXCEPT
Ensure capacity for at least n elements. Grows if needed.
void * element_ptr(fl::size index) FL_NO_EXCEPT
Pointer to element at index (byte arithmetic).
fl::size size() const FL_NO_EXCEPT
void * inlineBufferPtr() FL_NO_EXCEPT
Compute inline buffer pointer from offset.
void resize_impl(fl::size n) FL_NO_EXCEPT
Resize to n elements. New elements are default-constructed (zeroed for trivial).
void resize_value_impl(fl::size n, const void *value) FL_NO_EXCEPT
Resize to n elements. New elements are copy-constructed from value.
const void * inlineBufferPtr() const FL_NO_EXCEPT
void push_back_move_impl(void *element) FL_NO_EXCEPT
bool isInline() const FL_NO_EXCEPT
Is data currently in the inline buffer?
void shrink_to_fit_impl() FL_NO_EXCEPT
void push_back_copy_impl(const void *element) FL_NO_EXCEPT
void grow_to(fl::size new_capacity) FL_NO_EXCEPT
Grow to new_capacity. Moves existing elements.
void insert_move_impl(fl::size index, void *element) FL_NO_EXCEPT
Insert element at index by move. Shifts subsequent elements right.
void copy_from(const vector_basic &other) FL_NO_EXCEPT
Copy all elements from another vector_basic.
vector_basic(vector_basic &&) FL_NO_EXCEPT=delete
memory_resource * mResource
void trivial_default_construct(void *ptr, fl::size count) const FL_NO_EXCEPT
vector_basic(const vector_basic &) FL_NO_EXCEPT=delete
const void * data_raw() const FL_NO_EXCEPT
vector_basic(void *inlineBuffer, fl::size inlineCapacity, fl::size elementSize, memory_resource *resource, const vector_element_ops *ops) FL_NO_EXCEPT
Vector with inline buffer (for VectorN).
void uninitialized_move_n_impl(void *dst, void *src, fl::size count) const FL_NO_EXCEPT
void trivial_move_left(void *dst, const void *src, fl::size count) const FL_NO_EXCEPT
vector_basic(fl::size elementSize, memory_resource *resource, const vector_element_ops *ops) FL_NO_EXCEPT
Heap-only vector (no inline buffer).
bool empty() const FL_NO_EXCEPT
void clear_impl() FL_NO_EXCEPT
void reserve_impl(fl::size n) FL_NO_EXCEPT
void erase_impl(fl::size index) FL_NO_EXCEPT
Erase element at index. Shifts subsequent elements left.
void erase_range_impl(fl::size first_index, fl::size count) FL_NO_EXCEPT
Erase range [first_index, first_index + count).
void move_from(vector_basic &other) FL_NO_EXCEPT
Move-steal contents from another vector_basic.
void pop_back_impl() FL_NO_EXCEPT
bool full() const FL_NO_EXCEPT
fl::size element_size() const FL_NO_EXCEPT
void insert_copy_impl(fl::size index, const void *element) FL_NO_EXCEPT
Insert element at index by copy. Shifts subsequent elements right.
void * data_raw() FL_NO_EXCEPT
Type-erased vector base class.
PMR-style polymorphic memory resource for type-erased allocation.
fl::enable_if< has_default_ctor< T >::value, void(*)(void *)>::type get_default_construct_fn() FL_NO_EXCEPT
fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *)>::type get_move_construct_fn() FL_NO_EXCEPT
fl::enable_if< is_swappable< T >::value, void(*)(void *, void *)>::type get_swap_fn() FL_NO_EXCEPT
fl::enable_if< has_copy_ctor< T >::value, void(*)(void *, constvoid *)>::type get_copy_construct_fn() FL_NO_EXCEPT
u8 u8 fract8 blur_amount FL_NO_EXCEPT
constexpr int type_rank< T >::value
add_rvalue_reference< T >::type declval() FL_NO_EXCEPT
integral_constant< bool, false > false_type
const vector_element_ops * vector_element_ops_for() FL_NO_EXCEPT
Generate a static ops table for type T.
integral_constant< bool, true > true_type
Base definition for an LED controller.
void(* default_construct)(void *ptr)
void(* swap_elements)(void *a, void *b)
void(* copy_construct)(void *dst, const void *src)
void(* move_construct)(void *dst, void *src)
void(* destroy_n)(void *first, fl::size count)
Destroy count elements starting at first (count == 1 for a single element: one destroy thunk per type...
Function pointer table for type-specific element operations.