$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] interest in structure of arrays container?
From: Andreas Schäfer (gentryx_at_[hidden])
Date: 2016-10-16 04:28:38
Hey,
On 00:36 Sun 16 Oct , Michael Marcin wrote:
> Indeed this works well for a fixed sized dataset.
> It doesn't have the wasted duplicated information that a tuple of
> std::vectors has.
> It still doesn't provide an interface to query the soa directly for an
> iterator or size etc.
>
> Both a fixed-sized and dynamic-growth container are useful.
> Although I tend to need dynamic growth more often.
I've implemented your example using the soa_grid from LibFlatArray:
================================= 8< ============================
#include <libflatarray/flat_array.hpp>
class citizen
{
public:
std::string first_name;
std::string last_name;
int salary;
int age;
};
LIBFLATARRAY_REGISTER_SOA(
citizen,
((std::string)(first_name))
((std::string)(last_name))
((int)(salary))
((int)(age)))
int main()
{
LibFlatArray::soa_grid<citizen> citizens(300, 1, 1);
long accumulator = 0;
citizens.callback([&citizens, &accumulator](auto i) {
for (; i.index() < citizens.dim_x(); ++i) {
accumulator += i.salary();
}
});
int average = accumulator / citizens.dim_x();
return 0;
}
================================= 8< ============================
The size of the soa_grid can be chose at runtime, but it might not be
a good match for the use case you describe: it's essentially 3D and
hence doesn't support push_back() and friends. On the other hand,
LibFlatArray::soa_array is 1D and behaves much more like std::vector,
but it also has a maximum size that's fixated at compile time.
Would something like an soa_vector, that's resizable at runtime and
behaves much like a std::vector better suit your needs?
Cheers
-Andreas
-- ========================================================== Andreas Schäfer HPC and Supercomputing Institute for Multiscale Simulation Friedrich-Alexander-Universität Erlangen-Nürnberg, Germany +49 9131 85-20866 PGP/GPG key via keyserver http://www.libgeodecomp.org ========================================================== (\___/) (+'.'+) (")_(") This is Bunny. Copy and paste Bunny into your signature to help him gain world domination!