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).