
On 11/06/2016 06:25 AM, Joaquin M López Muñoz wrote:
A couple of years ago I wrote two blog entries about high-performance data structures for polymorphic objects:
http://bannalia.blogspot.com/2014/05/fast-polymorphic-collections.html
http://bannalia.blogspot.com/2014/05/fast-polymorphic-collections-with.html
that spurred some interest in the community. Now I've had the time to turn these ideas into something resembling a full-fledged library:
http://rawgit.com/joaquintides/poly_collection/website/doc/html/index.html
and I'd be very grateful if people could give their opinion on usefulness, design, etc. so as to determine potential interest in an eventual official submission to Boost.
Thank you,
Joaquín M López Muñoz
Thanks for the update Joaquin. I noticed you also mentioned this library in reponse to another thread here: http://lists.boost.org/Archives/boost/2016/10/231186.php which made me wonder how it would perform in the benchmark mentioned in that thread: https://github.com/cppljevans/soa/blob/master/soa_compare.benchmark.cpp But then, I looked at the documentation here: http://rawgit.com/joaquintides/poly_collection/website/doc/html/poly_collect... and it looked like there was a separate pointer for each type. Hence, the storage looks like it would be simllar to: template<typename... Ts> soa_tuple=std::tuple<std::vector<Ts>...>; where the separate pointers would be the data() pointer for each element in soa_tuple. IOW, the storage would be like that of particles here: https://github.com/cppljevans/soa/blob/master/soa_compare.benchmark.cpp#L278 Hence, I'm wondering what's the advantage of your library's base_collection compared to the soa_tuple. Now, if you say soa_tuple contains duplicate entries of size(), then I could ask what's the advantage of base_collection vs that of the particles at: https://github.com/cppljevans/soa/blob/master/soa_compare.benchmark.cpp#L456 where there's just a single pointer to a contiguous block of storage: https://github.com/cppljevans/soa/blob/master/soa_block.hpp#L30 and the pointers to the specific types are given by the soa_block::begin_all function: https://github.com/cppljevans/soa/blob/master/soa_block.hpp#L294 in the soa_block<Ts...> type of the particles? Maybe you could provide another implentation of the emitter_t using your base_collection to see how they compare. -regards, Larry