Skip to main content

Struct-of-Arrays for C++.

Project description

soagen

Struct-of-Arrays for C++.



✨️ This README is a stub. Please see the HTML documentation: marzer.github.io/soagen✨️



Changelog

v0.8.0

  • Fixed the generator crashing on startup with recent versions of the schema package (#3, @ludditeongithub)
  • Fixed default option values (e.g. attributes, mixins) being shared between structs generated in a single invocation
  • Fixed the param_type column option being emitted into the wrong template slot, causing a compile error
  • Fixed the generated .natvis referencing a non-existent allocation member (debugger visualizers were broken)
  • Fixed table and span less-than comparisons (<, <=, >, >=) being non-lexicographic and intransitive
  • Fixed a compile error during copy-assignment when using a propagating or non-always-equal allocator
  • Fixed the std::start_lifetime_as fast-path for implicit-lifetime types never being used
  • Fixed SoA types failing to compile on recent Clang with "ambiguous partial specializations"
  • Fixed soagen::compressed_pair computing an incorrect alignment on MSVC
  • Fixed a compile error with memmove when instantiating an all-trivially-copyable SoA
  • Fixed a compile error calling data() on a const all-trivially-copyable SoA
  • Fixed a compile error in the strong-exception-guarantee reallocation path for element types that are copyable but not nothrow-movable
  • Fixed at() being marked as a pure function despite throwing on out-of-range access
  • Fixed at() being present even when exceptions are disabled
  • Fixed insert()/emplace() at a non-end position leaking an element when an element operation threw mid-operation
  • Fixed the generator updating file timestamps even if the content was unchanged
  • Fixed a generated file occasionally being read half-written by a concurrent build step
  • Fixed reserve()/resize()/resize_for_overwrite() allocation and alignment calculation bugs
  • Fixed the copy constructor taking its allocator from the destination's own uninitialised allocator instead of the source's
  • Fixed max_size() being computed with the wrong per-column alignment
  • Fixed <, <=, >, >= on tables/spans/SoAs being incorrectly noexcept in some circumstances
  • Fixed emplace()/emplace_back() failing to compile when two column names map to the same PascalCase template parameter
  • Fixed the generated .natvis casting column types unqualified
  • Fixed generated files silently overwriting each other when two configs output path
  • Fixed generated files being needlessly rewritten on every build when checked out with CRLF line endings
  • Added support for compiling with exceptions disabled (e.g. -fno-exceptions) (#5, @pgrAm)
  • Added support for passing a column enumerator (e.g. my_soa::columns::id) to row::get<>(), matching column<>()
  • Added comparison operators (==, !=, <, <=, >, >=) to span, and made SoA comparisons heterogeneous
  • Added rvalue_row_type<>
  • Added rvalue_iterator_type<>
  • Added rvalue_span_type<>
  • Added source_offset customization point for mix-ins
  • Added a --output (-o) command-line option to control where generated files are written (e.g. an ephemeral build directory)
  • Added resize_for_overwrite() for growing a table without initializing the new trivially-constructible elements (#4, @pgrAm)
  • Added validation for duplicate variable names, structs with no variables, and configs with no structs
  • Added support for invoking the generator as python -m soagen
  • Removed tomli requirement for Python 3.11 and later

v0.7.0

  • Fixed rvalue row corruption bug on MSVC (info)
  • Fuxed some SFINAE issues
  • Added Cols... selector template parameter to at(), front() and back()
  • Added structs.mixins
  • Added copy-based fallbacks for unordered_erase(), insert(), emplace() and swap_columns() (previously they required movability)

v0.6.0

  • Fixed swap_columns() fast-path breaking data()
  • Added spans
    • Added span
    • Added is_span<>
    • Added table::subspan() and table::const_subspan()
    • Added span_type<> and const_span_type<>
  • Added soa_type<>
  • Added const_iterator_type<>
  • Added const_row_type<>
  • Added column_indices<>
  • Added soagen::for_each_column()
  • Added row::for_each_column()
  • Added generic names first, second, ..., sixteenth for unnamed columns 0-15
  • Binary size improvements
  • Documentation improvements

v0.5.0

  • Added rows to soagen::table
  • Added iterators to soagen::table
  • Added soagen::table::for_each_column()

v0.4.0

  • Fixed soagen::is_table<>
  • Added support for emplace-constructing column values by unpacking all std::tuple-like types (not just the emplacer)
  • Added support for taking std::integral_constants in for_each_column()
  • Added soagen::same_table_type<>
  • Added conversions between soagen::row<> specializations
  • Optimized instantiation overhead for most type-traits

v0.3.0

  • Added hpp.combined
  • Added std::integral_constant<size_t> to the overload set used by for_each_column()
  • Added support for constructing rows from all std::tuple-like types
  • Optimized bulk-swap operations

v0.2.0

  • Added structs.annotations
  • Added structs.attributes
  • Added auto option for structs.default_constructible
  • Added soagen::row_base
  • Added soagen::table_base
  • Added soagen::iterator_base
  • Added Base template argument to soagen::table for CRTP
  • Added swap_columns<>()
  • Made column_indices member struct into enum class columns

v0.1.2

  • Minor refactors.

v0.1.1

  • Minor refactors.

v0.1.0

  • First public release 🎉️

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

soagen-0.8.0.tar.gz (165.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

soagen-0.8.0-py3-none-any.whl (195.4 kB view details)

Uploaded Python 3

File details

Details for the file soagen-0.8.0.tar.gz.

File metadata

  • Download URL: soagen-0.8.0.tar.gz
  • Upload date:
  • Size: 165.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for soagen-0.8.0.tar.gz
Algorithm Hash digest
SHA256 7f028e975bfc8d942dbcb52be4e34510ac3068e73b9591727261559a92397088
MD5 2282f331ddeef866c2f54fc052601f98
BLAKE2b-256 1c0ae30e32f519fba205175ef69d32813801423fbe82e270adbd9aba2cd6fd9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for soagen-0.8.0.tar.gz:

Publisher: publish.yaml on marzer/soagen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file soagen-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: soagen-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 195.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for soagen-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f7ca7ba2a9ba229945b04836a463881e6ebaea982e3c8a0e0be64d2972fe5fea
MD5 302990f6a1c44813c734fab049955814
BLAKE2b-256 13be47f63c6ee74255db12f5d04c4bb163172c5772e1d344913c577eaf6c9b50

See more details on using hashes here.

Provenance

The following attestation bundles were made for soagen-0.8.0-py3-none-any.whl:

Publisher: publish.yaml on marzer/soagen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page