31 lines
945 B
C++
31 lines
945 B
C++
#pragma once
|
|
|
|
#include "../../generator/generator.h"
|
|
#include "AbstractVectorFactory.h"
|
|
#include "fill_with.h"
|
|
#include <algorithm>
|
|
|
|
namespace atlas::collection {
|
|
template <typename T>
|
|
class SingleThreadedVectorFactory : public AbstractVectorFactory<T> {
|
|
|
|
public:
|
|
SingleThreadedVectorFactory(std::unique_ptr<generator::Generator<T>> generator)
|
|
: m_gen { std::move(generator) }
|
|
{
|
|
}
|
|
|
|
SingleThreadedVectorFactory(SingleThreadedVectorFactory const&) = delete;
|
|
SingleThreadedVectorFactory(SingleThreadedVectorFactory&&) = delete;
|
|
SingleThreadedVectorFactory& operator=(SingleThreadedVectorFactory const&) = delete;
|
|
SingleThreadedVectorFactory& operator=(SingleThreadedVectorFactory&&) = delete;
|
|
|
|
auto fill(std::vector<T>& v) -> void override final
|
|
{
|
|
detail::fill_with(v.begin(), v.end(), [this]() { return m_gen->next(); });
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<generator::Generator<T>> m_gen;
|
|
};
|
|
}
|