BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SampleBuilderFactory Class Reference
Inheritance diagram for SampleBuilderFactory:
Collaboration diagram for SampleBuilderFactory:

Public Types

typedef std::function< ISampleBuilder *()> CreateItemCallback
 
typedef std::map< std::string, CreateItemCallbackCallbackMap_t
 

Public Member Functions

 SampleBuilderFactory ()
 
MultiLayercreateSampleByName (const std::string &name)
 
ISampleBuildercreateItem (const std::string &item_key) const
 
std::unique_ptr< ISampleBuildercreateItemPtr (const std::string &item_key) const
 
bool registerItem (const std::string &item_key, CreateItemCallback CreateFn)
 
bool contains (const std::string &item_key) const
 
size_t size () const
 

Protected Attributes

CallbackMap_t m_callbacks
 

Detailed Description

Factory to create standard pre-defined samples.

Definition at line 26 of file SampleBuilderFactory.h.

Member Typedef Documentation

◆ CreateItemCallback

typedef std::function<ISampleBuilder *()> IFactory< std::string , ISampleBuilder >::CreateItemCallback
inherited

function which will be used to create object of AbstractProduct base type

Definition at line 32 of file IFactory.h.

◆ CallbackMap_t

typedef std::map<std::string , CreateItemCallback> IFactory< std::string , ISampleBuilder >::CallbackMap_t
inherited

map for correspondance between object identifier and object creation function

Definition at line 35 of file IFactory.h.

Constructor & Destructor Documentation

◆ SampleBuilderFactory()

SampleBuilderFactory::SampleBuilderFactory ( )

Definition at line 49 of file SampleBuilderFactory.cpp.

50 {
51  registerItem("CylindersAndPrismsBuilder", create_new<CylindersAndPrismsBuilder>);
52 
53  registerItem("TwoTypesCylindersDistributionBuilder",
54  create_new<TwoTypesCylindersDistributionBuilder>);
55 
56  registerItem("CylindersInBABuilder", create_new<CylindersInBABuilder>);
57  registerItem("CylindersInDWBABuilder", create_new<CylindersInDWBABuilder>);
58  registerItem("LargeCylindersInDWBABuilder", create_new<LargeCylindersInDWBABuilder>);
59 
60  registerItem("CylindersWithSizeDistributionBuilder",
61  create_new<CylindersWithSizeDistributionBuilder>);
62 
63  registerItem("RadialParaCrystalBuilder", create_new<RadialParaCrystalBuilder>);
64 
65  registerItem("HardDiskBuilder", create_new<HardDiskBuilder>);
66 
67  registerItem("Basic2DParaCrystalBuilder", create_new<Basic2DParaCrystalBuilder>);
68 
69  registerItem("HexParaCrystalBuilder", create_new<HexParaCrystalBuilder>);
70 
71  registerItem("Lattice1DBuilder", create_new<Lattice1DBuilder>);
72 
73  registerItem("RectParaCrystalBuilder", create_new<RectParaCrystalBuilder>);
74 
75  registerItem("Basic2DLatticeBuilder", create_new<Basic2DLatticeBuilder>);
76 
77  registerItem("SquareLatticeBuilder", create_new<SquareLatticeBuilder>);
78 
79  registerItem("CenteredSquareLatticeBuilder", create_new<CenteredSquareLatticeBuilder>);
80 
81  registerItem("RotatedSquareLatticeBuilder", create_new<RotatedSquareLatticeBuilder>);
82 
83  registerItem("FiniteSquareLatticeBuilder", create_new<FiniteSquareLatticeBuilder>);
84 
85  registerItem("SuperLatticeBuilder", create_new<SuperLatticeBuilder>);
86 
87  registerItem("CustomMorphologyBuilder", create_new<CustomMorphologyBuilder>);
88 
89  registerItem("RotatedPyramidsBuilder", create_new<RotatedPyramidsBuilder>);
90 
91  registerItem("CoreShellParticleBuilder", create_new<CoreShellParticleBuilder>);
92 
93  registerItem("CoreShellBoxRotateZandYBuilder", create_new<CoreShellBoxRotateZandYBuilder>);
94 
95  registerItem("SizeDistributionDAModelBuilder", create_new<SizeDistributionDAModelBuilder>);
96 
97  registerItem("SizeDistributionLMAModelBuilder", create_new<SizeDistributionLMAModelBuilder>);
98 
99  registerItem("SizeDistributionSSCAModelBuilder", create_new<SizeDistributionSSCAModelBuilder>);
100 
101  registerItem("CylindersInSSCABuilder", create_new<CylindersInSSCABuilder>);
102 
103  registerItem("MesoCrystalBuilder", create_new<MesoCrystalBuilder>);
104 
105  registerItem("MagneticParticleZeroFieldBuilder", create_new<MagneticParticleZeroFieldBuilder>);
106 
107  registerItem("MagneticCylindersBuilder", create_new<MagneticCylindersBuilder>);
108 
109  registerItem("MagneticSubstrateZeroFieldBuilder",
110  create_new<MagneticSubstrateZeroFieldBuilder>);
111 
112  registerItem("SimpleMagneticLayerBuilder", create_new<SimpleMagneticLayerBuilder>);
113 
114  registerItem("SimpleMagneticRotationBuilder", create_new<SimpleMagneticRotationBuilder>);
115 
116  registerItem("MagneticLayerBuilder", create_new<MagneticLayerBuilder>);
117 
118  registerItem("FeNiBilayerBuilder", create_new<FeNiBilayerBuilder>);
119 
120  registerItem("FeNiBilayerTanhBuilder", create_new<FeNiBilayerTanhBuilder>);
121 
122  registerItem("FeNiBilayerNCBuilder", create_new<FeNiBilayerNCBuilder>);
123 
124  registerItem("FeNiBilayerSpinFlipBuilder", create_new<FeNiBilayerSpinFlipBuilder>);
125 
126  registerItem("FeNiBilayerSpinFlipTanhBuilder", create_new<FeNiBilayerSpinFlipTanhBuilder>);
127 
128  registerItem("FeNiBilayerSpinFlipNCBuilder", create_new<FeNiBilayerSpinFlipNCBuilder>);
129 
130  registerItem("MagneticRotationBuilder", create_new<MagneticRotationBuilder>);
131 
132  registerItem("MagneticSpheresBuilder", create_new<MagneticSpheresBuilder>);
133 
134  registerItem("MultiLayerWithRoughnessBuilder", create_new<MultiLayerWithRoughnessBuilder>);
135 
136  registerItem("MultiLayerWithNCRoughnessBuilder", create_new<MultiLayerWithNCRoughnessBuilder>);
137 
138  registerItem("TwoLayerRoughnessBuilder", create_new<TwoLayerRoughnessBuilder>);
139 
140  registerItem("MultipleLayoutBuilder", create_new<MultipleLayoutBuilder>);
141 
142  registerItem("TriangularRippleBuilder", create_new<TriangularRippleBuilder>);
143 
144  registerItem("AsymRippleBuilder", create_new<AsymRippleBuilder>);
145 
146  registerItem("CosineRippleBuilder", create_new<CosineRippleBuilder>);
147 
148  registerItem("ParticleCompositionBuilder", create_new<ParticleCompositionBuilder>);
149 
150  registerItem("BoxCompositionRotateXBuilder", create_new<BoxCompositionRotateXBuilder>);
151 
152  registerItem("BoxCompositionRotateYBuilder", create_new<BoxCompositionRotateYBuilder>);
153 
154  registerItem("BoxCompositionRotateZBuilder", create_new<BoxCompositionRotateZBuilder>);
155 
156  registerItem("BoxCompositionRotateZandYBuilder", create_new<BoxCompositionRotateZandYBuilder>);
157 
158  registerItem("BoxStackCompositionBuilder", create_new<BoxStackCompositionBuilder>);
159 
160  registerItem("ParticleInVacuumBuilder", create_new<ParticleInVacuumBuilder>);
161 
162  registerItem("TransformBoxBuilder", create_new<TransformBoxBuilder>);
163 
164  registerItem("LayersWithAbsorptionBuilder", create_new<LayersWithAbsorptionBuilder>);
165 
166  registerItem("LayersWithAbsorptionBySLDBuilder", create_new<LayersWithAbsorptionBySLDBuilder>);
167 
168  registerItem("BoxesSquareLatticeBuilder", create_new<BoxesSquareLatticeBuilder>);
169 
170  registerItem("RotatedCylindersBuilder", create_new<RotatedCylindersBuilder>);
171 
172  registerItem("SlicedCompositionBuilder", create_new<SlicedCompositionBuilder>);
173 
174  registerItem("RotatedPyramidsDistributionBuilder",
175  create_new<RotatedPyramidsDistributionBuilder>);
176 
177  registerItem("SpheresWithLimitsDistributionBuilder",
178  create_new<SpheresWithLimitsDistributionBuilder>);
179 
180  registerItem("ConesWithLimitsDistributionBuilder",
181  create_new<ConesWithLimitsDistributionBuilder>);
182 
183  registerItem("LinkedBoxDistributionBuilder", create_new<LinkedBoxDistributionBuilder>);
184 
185  registerItem("HomogeneousMultilayerBuilder", create_new<HomogeneousMultilayerBuilder>);
186 
187  registerItem("PlainMultiLayerBySLDBuilder", create_new<PlainMultiLayerBySLDBuilder>);
188 
189  registerItem("ResonatorBuilder", create_new<ResonatorBuilder>);
190 
191  registerItem("SlicedCylindersBuilder", create_new<SlicedCylindersBuilder>);
192 
193  registerItem("SLDSlicedCylindersBuilder", create_new<SLDSlicedCylindersBuilder>);
194 
195  registerItem("AveragedSlicedCylindersBuilder", create_new<AveragedSlicedCylindersBuilder>);
196 
197  registerItem("ThickAbsorptiveSampleBuilder", create_new<ThickAbsorptiveSampleBuilder>);
198 }
bool registerItem(const std::string &item_key, CreateItemCallback CreateFn)
Registers object's creation function.
Definition: IFactory.h:53

References IFactory< std::string, ISampleBuilder >::registerItem().

Here is the call graph for this function:

Member Function Documentation

◆ createSampleByName()

MultiLayer * SampleBuilderFactory::createSampleByName ( const std::string &  name)

Retrieves a SampleBuilder from the registry, does the build, and returns the result.

Definition at line 202 of file SampleBuilderFactory.cpp.

203 {
204  return createItemPtr(name)->buildSample();
205 }
std::unique_ptr< ISampleBuilder > createItemPtr(const std::string &item_key) const
Definition: IFactory.h:46

References IFactory< std::string, ISampleBuilder >::createItemPtr().

Here is the call graph for this function:

◆ createItem()

ISampleBuilder * IFactory< std::string , ISampleBuilder >::createItem ( const std::string &  item_key) const
inlineinherited

Creates object by calling creation function corresponded to given identifier.

Definition at line 38 of file IFactory.h.

39  {
40  auto it = m_callbacks.find(item_key);
41  assert(it != m_callbacks.end());
42  return (it->second)();
43  }
CallbackMap_t m_callbacks
map of correspondence of objectsId and creation functions
Definition: IFactory.h:68

◆ createItemPtr()

std::unique_ptr<ISampleBuilder > IFactory< std::string , ISampleBuilder >::createItemPtr ( const std::string &  item_key) const
inlineinherited

Definition at line 46 of file IFactory.h.

47  {
48  return std::unique_ptr<AbstractProduct>{createItem(item_key)};
49  }
ISampleBuilder * createItem(const std::string &item_key) const
Creates object by calling creation function corresponded to given identifier.
Definition: IFactory.h:38

◆ registerItem()

bool IFactory< std::string , ISampleBuilder >::registerItem ( const std::string &  item_key,
CreateItemCallback  CreateFn 
)
inlineinherited

Registers object's creation function.

Definition at line 53 of file IFactory.h.

54  {
55  assert(m_callbacks.find(item_key) == m_callbacks.end());
56  return m_callbacks.insert(make_pair(item_key, CreateFn)).second;
57  }

◆ contains()

bool IFactory< std::string , ISampleBuilder >::contains ( const std::string &  item_key) const
inlineinherited

Definition at line 59 of file IFactory.h.

60  {
61  return m_callbacks.find(item_key) != m_callbacks.end();
62  }

◆ size()

size_t IFactory< std::string , ISampleBuilder >::size ( ) const
inlineinherited

Returns number of registered objects.

Definition at line 65 of file IFactory.h.

65 { return m_callbacks.size(); }

Member Data Documentation

◆ m_callbacks

CallbackMap_t IFactory< std::string , ISampleBuilder >::m_callbacks
protectedinherited

map of correspondence of objectsId and creation functions

Definition at line 68 of file IFactory.h.


The documentation for this class was generated from the following files: