18 SampleProvider::SampleProvider() =
default;
22 if (other.m_multilayer)
23 setSample(*other.m_multilayer);
25 if (other.m_sample_builder)
26 setBuilder(other.m_sample_builder.
builder());
33 std::swap(m_multilayer, tmp.m_multilayer);
34 std::swap(m_sample_builder, tmp.m_sample_builder);
39 SampleProvider::~SampleProvider() =
default;
41 void SampleProvider::setSample(
const MultiLayer& multilayer)
43 m_multilayer.reset(multilayer.
clone());
44 m_multilayer->setParent(parent());
45 m_sample_builder.
reset();
48 void SampleProvider::setBuilder(
const std::shared_ptr<ISampleBuilder>& sample_builder)
50 m_sample_builder.
setSBN(sample_builder);
51 m_sample_builder.setParent(parent());
59 return m_multilayer.get();
70 throw std::runtime_error(
71 "SampleProvider::updateSample called before sample or builder was set");
77 return {&m_sample_builder};
79 return {m_multilayer.get()};
83 void SampleProvider::setParent(
const INode* newParent)
85 INode::setParent(newParent);
87 m_sample_builder.setParent(parent());
88 else if (m_multilayer)
89 m_multilayer->setParent(parent());
Defines class MultiLayer.
void swap(OutputDataIterator< TValue, TContainer > &left, OutputDataIterator< TValue, TContainer > &right)
make Swappable
Defines class SampleProvider.
Base class for tree-like structures containing parameterized objects.
Our sample model: a stack of layers one below the other.
MultiLayer * clone() const final override
Returns a clone of multilayer with clones of all layers and interfaces between layers.
void setSBN(const std::shared_ptr< ISampleBuilder > &sample_builder)
Sets sample builder and borrows its parameters.
std::shared_ptr< ISampleBuilder > builder() const
Returns current sample builder.
void reset()
Resets to initial state by removing builder and its borrowed parameters.
std::unique_ptr< MultiLayer > createMultiLayer()
Creates a multilayer using sample builder.
Holds either a Sample, or a SampleBuilderNode (which holds an ISampleBuilder).
void updateSample()
Generates new sample if sample builder defined.
const MultiLayer * sample() const
Returns current sample.
std::vector< const INode * > getChildren() const override
Returns a vector of children (const).