You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
soagen is aiming to be a fully-comprehensive std::vector-like SoA container generator. This means providing feature parity where possible, as well as providing new features and QoL changes that std::vector can't ever have (for API/ABI breaking reasons). Here's a roadmap.
ℹ️ All list items are in no particular order - there's no implied priority.
Planned:
soagen::iterator<>
rbegin()
rend()
crbegin()
crend()
insert(iterator, iterator)
emplace(iterator, iterator)
resize(size_t, args...)
resize(size_type, <tuple-like>)
The config allows you to set a per-variable default which is propagated to push_back() and friends - ideally resize() would also make use of this information
Automatically generate CRTP shims for SoA classes so their interface may be trivially adapted to other user-defined types
More features when not using the generator
Option to use a user-specified strong index type instead of std::size_t
Implemented:
size and capacity
size()
max_size()
empty()
allocation_size() - size of the underlying allocation in bytes
capacity()
reserve()
shrink_to_fit()
resize(size_type)
addition
push_back()
emplace_back()
insertion
insert(size_type)
emplace(size_type)
removal
erase(size_type)
unordered_erase(size_type) - a faster erase(size_type) using the pop-and-swap idiom
pop_back()
clear()
column + buffer access
data() - for tables where all column types are trivially-copyable
per-column pointer accessors (i.e. data() for each column)
for_each_column()
allocators
get_allocator()
soagen::allocator for aligned-allocation support
support for custom allocators
fully-implemented the std::allocator protocol (propagate_on_container_XXXX etc.)
table comparison
EqualityComparable (==, !=)
LessThanComparable (<, <=, >, >=)
row access
soagen::row<> ref type for unpacking rows as structs
front(), back()
row(), operator[], at()
EqualityComparable rows (==, !=)
LessThanComparable rows (<, <=, >, >=)
structured binding support
row 'subview' support (i.e. only a subset of the columns)
push_back(soagen::row<>)
emplace_back(soagen::row<>)
insert(size_type, soagen::row<>)
emplace(size_type, soagen::row<>)
conversions between row types
soagen::iterator<>
begin()
end()
cbegin()
cend()
insert(iterator)
emplace(iterator)
erase(iterator)
unordered_erase(iterator)
soagen::span (multi-column std::span)
misc
swap()
The text was updated successfully, but these errors were encountered:
soagen
is aiming to be a fully-comprehensivestd::vector
-like SoA container generator. This means providing feature parity where possible, as well as providing new features and QoL changes thatstd::vector
can't ever have (for API/ABI breaking reasons). Here's a roadmap.Planned:
soagen::iterator<>
rbegin()
rend()
crbegin()
crend()
insert(iterator, iterator)
emplace(iterator, iterator)
resize(size_t, args...)
resize(size_type, <tuple-like>)
default
which is propagated topush_back()
and friends - ideallyresize()
would also make use of this informationstd::size_t
Implemented:
size()
max_size()
empty()
allocation_size()
- size of the underlying allocation in bytescapacity()
reserve()
shrink_to_fit()
resize(size_type)
push_back()
emplace_back()
insert(size_type)
emplace(size_type)
erase(size_type)
unordered_erase(size_type)
- a fastererase(size_type)
using the pop-and-swap idiompop_back()
clear()
data()
- for tables where all column types are trivially-copyabledata()
for each column)for_each_column()
get_allocator()
soagen::allocator
for aligned-allocation supportstd::allocator
protocol (propagate_on_container_XXXX
etc.)==
,!=
)<
,<=
,>
,>=
)soagen::row<>
ref type for unpacking rows as structsfront()
,back()
row()
,operator[]
,at()
==
,!=
)<
,<=
,>
,>=
)push_back(soagen::row<>)
emplace_back(soagen::row<>)
insert(size_type, soagen::row<>)
emplace(size_type, soagen::row<>)
soagen::iterator<>
begin()
end()
cbegin()
cend()
insert(iterator)
emplace(iterator)
erase(iterator)
unordered_erase(iterator)
soagen::span
(multi-columnstd::span
)swap()
The text was updated successfully, but these errors were encountered: