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
schemapackage (#3, @ludditeongithub) - Fixed default option values (e.g.
attributes,mixins) being shared between structs generated in a single invocation - Fixed the
param_typecolumn option being emitted into the wrong template slot, causing a compile error - Fixed the generated
.natvisreferencing 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_asfast-path for implicit-lifetime types never being used - Fixed SoA types failing to compile on recent Clang with "ambiguous partial specializations"
- Fixed
soagen::compressed_paircomputing an incorrect alignment on MSVC - Fixed a compile error with
memmovewhen instantiating an all-trivially-copyable SoA - Fixed a compile error calling
data()on aconstall-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 incorrectlynoexceptin some circumstances - Fixed
emplace()/emplace_back()failing to compile when two column names map to the same PascalCase template parameter - Fixed the generated
.natviscasting 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) torow::get<>(), matchingcolumn<>() - Added comparison operators (
==,!=,<,<=,>,>=) tospan, and made SoA comparisons heterogeneous - Added
rvalue_row_type<> - Added
rvalue_iterator_type<> - Added
rvalue_span_type<> - Added
source_offsetcustomization 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
tomlirequirement 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 toat(),front()andback() - Added
structs.mixins - Added copy-based fallbacks for
unordered_erase(),insert(),emplace()andswap_columns()(previously they required movability)
v0.6.0
- Fixed
swap_columns()fast-path breakingdata() - Added spans
- Added
span - Added
is_span<> - Added
table::subspan()andtable::const_subspan() - Added
span_type<>andconst_span_type<>
- Added
- 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, ...,sixteenthfor 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 theemplacer) - Added support for taking
std::integral_constantsinfor_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 byfor_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
autooption forstructs.default_constructible - Added
soagen::row_base - Added
soagen::table_base - Added
soagen::iterator_base - Added
Basetemplate argument tosoagen::tablefor CRTP - Added
swap_columns<>() - Made
column_indicesmember struct intoenum class columns
v0.1.2
- Minor refactors.
v0.1.1
- Minor refactors.
v0.1.0
- First public release 🎉️
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f028e975bfc8d942dbcb52be4e34510ac3068e73b9591727261559a92397088
|
|
| MD5 |
2282f331ddeef866c2f54fc052601f98
|
|
| BLAKE2b-256 |
1c0ae30e32f519fba205175ef69d32813801423fbe82e270adbd9aba2cd6fd9c
|
Provenance
The following attestation bundles were made for soagen-0.8.0.tar.gz:
Publisher:
publish.yaml on marzer/soagen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soagen-0.8.0.tar.gz -
Subject digest:
7f028e975bfc8d942dbcb52be4e34510ac3068e73b9591727261559a92397088 - Sigstore transparency entry: 2014238747
- Sigstore integration time:
-
Permalink:
marzer/soagen@cd7ddfd43319f1fc2634e67b4331b02c10a3c0ba -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/marzer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@cd7ddfd43319f1fc2634e67b4331b02c10a3c0ba -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7ca7ba2a9ba229945b04836a463881e6ebaea982e3c8a0e0be64d2972fe5fea
|
|
| MD5 |
302990f6a1c44813c734fab049955814
|
|
| BLAKE2b-256 |
13be47f63c6ee74255db12f5d04c4bb163172c5772e1d344913c577eaf6c9b50
|
Provenance
The following attestation bundles were made for soagen-0.8.0-py3-none-any.whl:
Publisher:
publish.yaml on marzer/soagen
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soagen-0.8.0-py3-none-any.whl -
Subject digest:
f7ca7ba2a9ba229945b04836a463881e6ebaea982e3c8a0e0be64d2972fe5fea - Sigstore transparency entry: 2014238838
- Sigstore integration time:
-
Permalink:
marzer/soagen@cd7ddfd43319f1fc2634e67b4331b02c10a3c0ba -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/marzer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@cd7ddfd43319f1fc2634e67b4331b02c10a3c0ba -
Trigger Event:
push
-
Statement type: