soagen icon indicating copy to clipboard operation
soagen copied to clipboard

Roadmap

Open marzer opened this issue 2 years ago • 0 comments

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:

  • [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] addition
    • [x] push_back()
    • [x] emplace_back()
  • [x] insertion
    • [x] insert(size_type)
    • [x] emplace(size_type)
  • [x] removal
    • [x] erase(size_type)
    • [x] unordered_erase(size_type) - a faster erase(size_type) using the pop-and-swap idiom
    • [x] pop_back()
    • [x] clear()
  • [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] allocators
    • [x] get_allocator()
    • [x] soagen::allocator for aligned-allocation support
    • [x] support for custom allocators
    • [x] fully-implemented the std::allocator protocol (propagate_on_container_XXXX etc.)
  • [x] table comparison
    • [x] EqualityComparable (==, !=)
    • [x] LessThanComparable (<, <=, >, >=)
  • [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] soagen::iterator<>
    • [x] begin()
    • [x] end()
    • [x] cbegin()
    • [x] cend()
    • [x] insert(iterator)
    • [x] emplace(iterator)
    • [x] erase(iterator)
    • [x] unordered_erase(iterator)
  • [x] soagen::span (multi-column std::span)
  • [x] misc
    • [x] swap()

marzer avatar Jul 21 '23 09:07 marzer