Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roadmap #1

Open
57 of 70 tasks
marzer opened this issue Jul 21, 2023 · 0 comments
Open
57 of 70 tasks

Roadmap #1

marzer opened this issue Jul 21, 2023 · 0 comments
Assignees
Labels
documentation Improvements or additions to documentation enhancement Enhancing an existing feature

Comments

@marzer
Copy link
Owner

marzer commented Jul 21, 2023

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()
@marzer marzer added documentation Improvements or additions to documentation enhancement Enhancing an existing feature labels Jul 21, 2023
@marzer marzer self-assigned this Jul 21, 2023
@marzer marzer pinned this issue Jul 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement Enhancing an existing feature
Projects
None yet
Development

No branches or pull requests

1 participant