soagen
soagen copied to clipboard
Roadmap
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
defaultwhich is propagated topush_back()and friends - ideallyresize()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:
- [x] size and capacity
- [x]
size() - [x]
max_size() - [x]
empty() - [x]
allocation_size()- size of the underlying allocation in bytes - [x]
capacity() - [x]
reserve() - [x]
shrink_to_fit() - [x]
resize(size_type)
- [x]
- [x] addition
- [x]
push_back() - [x]
emplace_back()
- [x]
- [x] insertion
- [x]
insert(size_type) - [x]
emplace(size_type)
- [x]
- [x] removal
- [x]
erase(size_type) - [x]
unordered_erase(size_type)- a fastererase(size_type)using the pop-and-swap idiom - [x]
pop_back() - [x]
clear()
- [x]
- [x] column + buffer access
- [x]
data()- for tables where all column types are trivially-copyable - [x] per-column pointer accessors (i.e.
data()for each column) - [x]
for_each_column()
- [x]
- [x] allocators
- [x]
get_allocator() - [x]
soagen::allocatorfor aligned-allocation support - [x] support for custom allocators
- [x] fully-implemented the
std::allocatorprotocol (propagate_on_container_XXXXetc.)
- [x]
- [x] table comparison
- [x] EqualityComparable (
==,!=) - [x] LessThanComparable (
<,<=,>,>=)
- [x] EqualityComparable (
- [x] row access
- [x]
soagen::row<>ref type for unpacking rows as structs - [x]
front(),back() - [x]
row(),operator[],at() - [x] EqualityComparable rows (
==,!=) - [x] LessThanComparable rows (
<,<=,>,>=) - [x] structured binding support
- [x] row 'subview' support (i.e. only a subset of the columns)
- [x]
push_back(soagen::row<>) - [x]
emplace_back(soagen::row<>) - [x]
insert(size_type, soagen::row<>) - [x]
emplace(size_type, soagen::row<>) - [x] conversions between row types
- [x]
- [x]
soagen::iterator<>- [x]
begin() - [x]
end() - [x]
cbegin() - [x]
cend() - [x]
insert(iterator) - [x]
emplace(iterator) - [x]
erase(iterator) - [x]
unordered_erase(iterator)
- [x]
- [x]
soagen::span(multi-columnstd::span) - [x] misc
- [x]
swap()
- [x]