#pragma once #include "../../generator/generator.h" #include "AbstractVectorFactory.h" #include #include namespace atlas::collection { template class AutoThreadedVectorFactory : public AbstractVectorFactory { public: AutoThreadedVectorFactory(std::function>()> generator_factory) : m_gen { std::move(generator_factory) } { } AutoThreadedVectorFactory(AutoThreadedVectorFactory const&) = delete; AutoThreadedVectorFactory(AutoThreadedVectorFactory&&) = delete; AutoThreadedVectorFactory& operator=(AutoThreadedVectorFactory const&) = delete; AutoThreadedVectorFactory& operator=(AutoThreadedVectorFactory&&) = delete; auto fill(std::vector& v) -> void override final { std::for_each(std::execution::par_unseq, v.begin(), v.end(), [this](auto& v) { static thread_local auto gen { m_gen() }; v = gen->next(); }); } private: std::function>()> m_gen; }; }