11#include <util/param/ParamComposite.h>
12#include <util/param/Factory.h>
37 template <
typename Data>
48 Manager(
bool uniqueNames =
false);
136 void append(Data& data,
const std::string& name);
209 std::vector<Data*> ptrs_;
212 std::vector<std::string> names_;
224 bool createdFactory_;
231 template <
typename Data>
238 uniqueNames_(uniqueNames),
239 createdFactory_(false)
245 template <
typename Data>
249 for (
int i=0; i < size_; ++i) {
256 if (factoryPtr_ && createdFactory_) {
264 template <
typename Data>
274 template <
typename Data>
277 factory().addSubfactory(subfactory);
283 template <
typename Data>
286 if (factoryPtr_ && createdFactory_) {
288 createdFactory_ =
false;
290 factoryPtr_ = &factory;
296 template <
typename Data>
299 if (factoryPtr_ && createdFactory_) {
301 createdFactory_ =
false;
303 factoryPtr_ = factoryPtr;
309 template <
typename Data>
314 beginReadManager(in);
322 template <
typename Data>
325 setIsRequired(
false);
327 beginReadManager(in);
337 template <
typename Data>
341 Begin* beginPtr = &readBegin(in, managerName.c_str(), isRequired());
355 template <
typename Data>
372 typePtr = factoryPtr_->readObject(in, *
this, name, isEnd);
377 Data* firstPtr = findFirst(name);
379 std::string msg(
"Non-unique subclass name: ");
384 append(*typePtr, name);
386 std::string msg(
"Unknown subclass name: ");
398 template <
typename Data>
401 End* endPtr = &addEnd();
410 template <
typename Data>
420 if (isIoProcessor()) {
424 if (hasIoCommunicator()) {
425 bcast<int>(ioCommunicator(), size, 0);
429 for (
int i = 0; i < size; ++i) {
432 typePtr = factoryPtr_->loadObject(ar, *
this, name);
434 append(*typePtr, name);
436 std::string msg(
"Unknown subclass name: ");
447 template <
typename Data>
450 int size = ptrs_.size();
452 for (
int i = 0; i < size; ++i) {
454 (ptrs_[i])->save(ar);
461 template <
typename Data>
464 ptrs_.push_back(&data);
465 names_.push_back(name);
472 template <
typename Data>
484 template <
typename Data>
487 return (factoryPtr_ != 0);
493 template <
typename Data>
500 template <
typename Data>
511 template <
typename Data>
514 for (
int i = 0; i < size_; ++i) {
515 if (names_[i] == className) {
527 template <
typename Data>
531 factoryPtr_ = newDefaultFactory();
532 createdFactory_ =
true;
540 template <
typename Data>
543 UTIL_THROW(
"Call of un-implemented Manager<Data>::newDefaultFactory");
Beginning line of a composite parameter block.
bool isActive() const
Is this an active element (has it been read from file)?
Saving archive for binary istream.
Saving / output archive for binary ostream.
End bracket of a ParamComposite parameter block.
virtual void writeParam(std::ostream &out) const
Write the closing bracket.
static std::ostream & file()
Get log ostream by reference.
Template container for pointers to objects with a common base class.
Factory< Data > * factoryPtr_
Pointer to an associated Factory<Data> object.
void setFactory(Factory< Data > &factory)
Associate a Factory with this Manager.
virtual void readParam(std::istream &in)
Read and create a set of objects.
Factory< Data > & factory()
Return a reference to the factory.
virtual void initFactory()
Create factory if necessary.
Data * findFirst(std::string const &className)
Return pointer to first object with specified class name.
virtual Factory< Data > * newDefaultFactory() const
Create an instance of the default Factory<Data> class.
virtual ~Manager()
Destructor.
bool hasFactory() const
Return true if this Manager has a Factory, false otherwise.
virtual void readParameters(std::istream &in)
Read child blocks, return when closing bracket encountered.
virtual void loadParameters(Serializable::IArchive &ar)
Load a set of objects to an output archive.
virtual void save(Serializable::OArchive &ar)
Save a set of objects to an output archive.
void beginReadManager(std::istream &in)
Read (or attempt to read) opening line: "ManagerName{".
virtual void readParamOptional(std::istream &in)
Optionally read and create a set of objects.
Data & operator[](int i) const
Mimic C array subscripting.
void addSubfactory(Factory< Data > &subfactory)
Set a SubFactory for this Manager.
int size() const
Get logical size.
void append(Data &data, const std::string &name)
Append a Data object to the end of the sequence.
void endReadManager()
Add closing bracket to output format.
Manager(bool uniqueNames=false)
Constructor.
static bool echo()
Get echo parameter.
An object that can read multiple parameters from file.
std::string className() const
Get class name string.
File containing preprocessor macros for error handling.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Utility classes for scientific computation.