1 #ifndef UTIL_PARAM_COMPOSITE_H 2 #define UTIL_PARAM_COMPOSITE_H 12 #include <util/param/ParamComponent.h> 13 #include <util/param/ScalarParam.h> 14 #include <util/param/CArrayParam.h> 15 #include <util/param/DArrayParam.h> 16 #include <util/param/FArrayParam.h> 17 #include <util/param/CArray2DParam.h> 18 #include <util/param/DMatrixParam.h> 19 #include <util/param/DSymmMatrixParam.h> 20 #include <util/archives/Serializable_includes.h> 30 template <
class Data>
class Factory;
147 virtual void readParam(std::istream &in);
303 template <
typename Type>
316 template <
typename Type>
318 readOptional(std::istream &in,
const char *label, Type &value);
329 template <
typename Type>
331 readCArray(std::istream &in,
const char *label, Type *value,
int n);
342 template <
typename Type>
356 template <
typename Type>
358 readDArray(std::istream &in,
const char *label,
370 template <
typename Type>
383 template <
typename Type,
int N>
385 readFArray(std::istream &in,
const char *label,
396 template <
typename Type,
int N>
412 template <
typename Type>
415 Type *value,
int m,
int n,
int np);
428 template <
typename Type>
431 Type *value,
int m,
int n,
int np);
443 template <
typename Type>
458 template <
typename Type>
472 template <
typename Type>
486 template <
typename Type>
568 template <
typename Type>
570 const char *label, Type &value,
583 template <
typename Type>
585 const char *label, Type &value);
597 template <
typename Type>
600 Type *value,
int n,
bool isRequired);
613 template <
typename Type>
628 template <
typename Type>
644 template <
typename Type>
658 template <
typename Type,
int N>
673 template <
typename Type,
int N>
677 {
return loadFArray<Type, N>(ar, label, array,
true); }
691 template <
typename Type>
694 Type *value,
int m,
int n,
int np,
bool isRequired);
709 template <
typename Type>
712 Type *value,
int m,
int n,
int np);
725 template <
typename Type>
740 template <
typename Type>
755 template <
typename Type>
769 template <
typename Type>
887 template <
typename Type>
889 Type &value,
bool isRequired =
true);
901 template <
typename Type>
903 addCArray(std::istream &in,
const char *label,
904 Type *value,
int n,
bool isRequired =
true);
916 template <
typename Type>
918 addDArray(std::istream &in,
const char *label,
930 template <
typename Type,
int N>
932 addFArray(std::istream &in,
const char *label,
947 template <
typename Type>
950 Type *value,
int m,
int n,
int np,
951 bool isRequired =
true);
964 template <
typename Type>
966 addDMatrix(std::istream &in,
const char *label,
968 bool isRequired =
true);
973 std::vector<ParamComponent*> list_;
976 std::vector<bool> isLeaf_;
982 std::string className_;
998 template <
typename Type>
1000 Type &value,
bool isRequired);
1012 template <
typename Type>
1014 readCArray_(std::istream &in,
const char *label, Type *value,
1015 int n,
bool isRequired);
1027 template <
typename Type>
1029 readDArray_(std::istream &in,
const char *label,
1041 template <
typename Type,
int N>
1043 readFArray_(std::istream &in,
const char *label,
1060 template <
typename Type>
1062 readCArray2D_(std::istream &in,
const char *label,
1063 Type *value,
int m,
int n,
int np,
bool isRequired);
1076 template <
typename Type>
1078 readDMatrix_(std::istream &in,
const char *label,
1091 template <
typename Type>
1093 readDSymmMatrix_(std::istream &in,
const char *label,
1104 {
return className_; }
1110 {
return isRequired_; }
1116 {
return isActive_; }
1123 template <
typename Type>
1125 ParamComposite::read_(std::istream &in,
const char *label, Type &value,
1139 template <
typename Type>
1154 template <
typename Type>
1157 {
return read_<Type>(in, label, value,
true); }
1162 template <
typename Type>
1166 {
return read_<Type>(in, label, value,
false); }
1171 template <
typename Type>
1174 Type &value,
bool isRequired)
1187 template <
typename Type>
1191 {
return loadParameter<Type>(ar, label, value,
true); }
1198 template <
typename Type>
1200 ParamComposite::readCArray_(std::istream &in,
const char *label,
1201 Type *value,
int n,
bool isRequired)
1214 template <
typename Type>
1217 Type *value,
int n,
bool isRequired)
1229 template <
typename Type>
1233 {
return readCArray_<Type>(in, label, value, n,
true); }
1238 template <
typename Type>
1242 {
return readCArray_<Type>(in, label, value, n,
false); }
1247 template <
typename Type>
1250 Type *value,
int n,
bool isRequired)
1263 template <
typename Type>
1267 {
return loadCArray<Type>(ar, label, value, n,
true); }
1274 template <
typename Type>
1276 ParamComposite::readDArray_(std::istream &in,
const char *label,
1290 template <
typename Type>
1305 template <
typename Type>
1310 {
return readDArray_<Type>(in, label, array, n,
true); }
1315 template <
typename Type>
1320 {
return readDArray_<Type>(in, label, array, n,
false); }
1325 template <
typename Type>
1341 template <
typename Type>
1345 {
return loadDArray<Type>(ar, label, array, n,
true); }
1352 template <
typename Type,
int N>
1354 ParamComposite::readFArray_(std::istream &in,
const char *label,
1368 template <
typename Type,
int N>
1383 template <
typename Type,
int N>
1388 {
return readFArray_<Type>(in, label, array,
true); }
1393 template <
typename Type,
int N>
1398 {
return readFArray_<Type>(in, label, array,
false); }
1403 template <
typename Type,
int N>
1421 template <
typename Type>
1423 ParamComposite::readCArray2D_(std::istream &in,
const char *label,
1424 Type *value,
int m,
int n,
int np,
1438 template <
typename Type>
1441 Type *value,
int m,
int n,
int np,
1454 template <
typename Type>
1457 Type *value,
int m,
int n,
int np)
1458 {
return readCArray2D_<Type>(in, label, value, m, n, np,
true); }
1463 template <
typename Type>
1466 const char *label, Type *value,
1467 int m,
int n,
int np)
1468 {
return readCArray2D_<Type>(in, label, value, m, n, np,
false); }
1473 template <
typename Type>
1477 Type *value,
int m,
int n,
int np,
1491 template <
typename Type>
1495 Type *value,
int m,
int n,
int np)
1496 {
return loadCArray2D<Type>(ar, label, value, m, n, np,
true); }
1503 template <
typename Type>
1505 ParamComposite::readDMatrix_(std::istream &in,
const char *label,
1520 template <
typename Type>
1536 template <
typename Type>
1540 {
return readDMatrix_<Type>(in, label, matrix, m, n,
true); }
1545 template <
typename Type>
1549 {
return readDMatrix_<Type>(in, label, matrix, m, n,
false); }
1554 template <
typename Type>
1571 template <
typename Type>
1575 {
return loadDMatrix<Type>(ar, label, matrix, m, n,
true); }
1582 template <
typename Type>
1584 ParamComposite::readDSymmMatrix_(std::istream &in,
1601 template <
typename Type>
1607 {
return readDSymmMatrix_<Type>(in, label, matrix, n,
true); }
1612 template <
typename Type>
1618 {
return readDMatrix_<Type>(in, label, matrix, n,
false); }
1623 template <
typename Type>
1642 template <
typename Type>
1648 {
return loadDSymmMatrix<Type>(ar, label, matrix, n,
true); }
DSymmMatrixParam< Type > & readOptionalDSymmMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
Add and read an optional DMatrix matrix parameter.
virtual void loadOptional(Serializable::IArchive &ar)
Load an optional ParamComposite.
End bracket of a ParamComposite parameter block.
ParamComposite()
Constructor.
An empty line within a parameter file.
CArray2DParam< Type > & addCArray2D(std::istream &in, const char *label, Type *value, int m, int n, int np, bool isRequired=true)
Add (but do not read) a CArray2DParam < Type > 2D C-array.
DArrayParam< Type > & addDArray(std::istream &in, const char *label, DArray< Type > &array, int n, bool isRequired=true)
Add (but do not read) a DArray < Type > parameter.
bool isRequired() const
Is this ParamComposite required in the input file?
FArrayParam< Type, N > & addFArray(std::istream &in, const char *label, FArray< Type, N > &array, bool isRequired=true)
Add (but do not read) a FArray < Type, N > array parameter.
void resetParam()
Resets ParamComposite to its empty state.
virtual void readParamOptional(std::istream &in)
Read optional parameter file block.
DSymmMatrixParam< Type > & readDSymmMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
Add and read a required symmetrix DMatrix.
DMatrixParam< Type > & loadDMatrix(Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired)
Add and load a DMatrixParam < Type > matrix parameter.
DSymmMatrixParam< Type > & loadDSymmMatrix(Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int n, bool isRequired)
Add and load a symmetric DSymmMatrixParam < Type > matrix parameter.
void setParent(ParamComponent ¶m, bool next=true)
Set this to the parent of a child component.
void loadParamComposite(Serializable::IArchive &ar, ParamComposite &child, bool next=true)
Add and load a required child ParamComposite.
End & readEnd(std::istream &in)
Add and read the closing bracket.
void saveOptional(Serializable::OArchive &ar)
Saves isActive flag, and then calls save() iff isActive is true.
DMatrixParam< Type > & readDMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
Add and read a required DMatrix < Type > matrix parameter.
File containing preprocessor macros for error handling.
FArrayParam< Type, N > & readOptionalFArray(std::istream &in, const char *label, FArray< Type, N > &array)
Add and read an optional FArray < Type, N > array parameter.
DArrayParam< Type > & readOptionalDArray(std::istream &in, const char *label, DArray< Type > &array, int n)
Add and read an optional DArray < Type > parameter.
void setIsActive(bool isActive)
Set or unset the isActive flag.
A Parameter associated with a 2D built-in C array.
Blank & readBlank(std::istream &in)
Add and read a new Blank object, representing a blank line.
CArray2DParam< Type > & readOptionalCArray2D(std::istream &in, const char *label, Type *value, int m, int n, int np)
Add and read an optional CArray2DParam < Type > 2D C-array parameter.
End & addEnd()
Add a closing bracket.
bool isActive() const
Is this parameter active?
Saving / output archive for binary ostream.
void addComponent(ParamComponent ¶m, bool isLeaf=true)
Add a new ParamComponent object to the format array.
ScalarParam< Type > & add(std::istream &in, const char *label, Type &value, bool isRequired=true)
Add a new required ScalarParam < Type > object.
void loadParamCompositeOptional(Serializable::IArchive &ar, ParamComposite &child, bool next=true)
Add and load an optional child ParamComposite if isActive.
DArrayParam< Type > & loadDArray(Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n, bool isRequired)
Add an load a DArray < Type > array parameter.
std::string className() const
Get class name string.
A Parameter associated with a 2D built-in C array.
virtual void writeParam(std::ostream &out)
Write all parameters to an output stream.
virtual void save(Serializable::OArchive &ar)
Saves all parameters to an archive.
virtual ~ParamComposite()
Virtual destructor.
Template for a Parameter object associated with a scalar variable.
Utility classes for scientific computation.
CArrayParam< Type > & readCArray(std::istream &in, const char *label, Type *value, int n)
Add and read a required C array parameter.
FArrayParam< Type, N > & readFArray(std::istream &in, const char *label, FArray< Type, N > &array)
Add and read a required FArray < Type, N > array parameter.
Begin & addBegin(const char *label)
Add a Begin object representing a class name and bracket.
virtual void readParameters(std::istream &in)
Read the body of parameter block, without begin and end lines.
DMatrixParam< Type > & addDMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired=true)
Add and read a required DMatrix < Type > matrix parameter.
ScalarParam< Type > & loadParameter(Serializable::IArchive &ar, const char *label, Type &value, bool isRequired)
Add and load a new ScalarParam < Type > object.
FArrayParam< Type, N > & loadFArray(Serializable::IArchive &ar, const char *label, FArray< Type, N > &array)
Add and load a required FArray < Type > array parameter.
A Parameter associated with a 1D C array.
CArrayParam< Type > & loadCArray(Serializable::IArchive &ar, const char *label, Type *value, int n, bool isRequired)
Add a C array parameter and load its elements.
Abstract base class for classes that input and ouput parameters to file.
virtual void loadParameters(Serializable::IArchive &ar)
Load state from archive, without adding Begin and End lines.
void readParamCompositeOptional(std::istream &in, ParamComposite &child, bool next=true)
Add and attempt to read an optional child ParamComposite.
virtual void load(Serializable::IArchive &ar)
Load all parameters from an input archive.
Saving archive for binary istream.
virtual void readParam(std::istream &in)
Read the parameter file block.
CArrayParam< Type > & readOptionalCArray(std::istream &in, const char *label, Type *value, int n)
Add and read an optional C array parameter.
virtual void load(Serializable::IArchive &ar)
Load from an archive.
void addParamComposite(ParamComposite &child, bool next=true)
Add a child ParamComposite object to the format array.
DMatrixParam< Type > & readOptionalDMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
Add and read an optional DMatrix < Type > matrix parameter.
A Parameter associated with a DArray container.
CArrayParam< Type > & addCArray(std::istream &in, const char *label, Type *value, int n, bool isRequired=true)
Add (but do not read) a required C array parameter.
void setClassName(const char *className)
Set class name string.
void readParamComposite(std::istream &in, ParamComposite &child, bool next=true)
Add and read a required child ParamComposite.
Begin & readBegin(std::istream &in, const char *label, bool isRequired=true)
Add and read a class label and opening bracket.
virtual void readParam(std::istream &in)
Read a label and (if the label matches) a parameter value.
An object that can read multiple parameters from file.
ScalarParam< Type > & read(std::istream &in, const char *label, Type &value)
Add and read a new required ScalarParam < Type > object.
CArray2DParam< Type > & loadCArray2D(Serializable::IArchive &ar, const char *label, Type *value, int m, int n, int np, bool isRequired)
Add and load a CArray2DParam < Type > C 2D array parameter.
Blank & addBlank()
Create and add a new Blank object, representing a blank line.
DArrayParam< Type > & readDArray(std::istream &in, const char *label, DArray< Type > &array, int n)
Add and read a required DArray < Type > parameter.
A Parameter associated with a FArray container.
void setIsRequired(bool isRequired)
Set or unset the isActive flag.
ScalarParam< Type > & readOptional(std::istream &in, const char *label, Type &value)
Add and read a new optional ScalarParam < Type > object.
Beginning line of a composite parameter block.
A Parameter associated with a symmetric DMatrix.
FArrayParam< Type, N > & loadFArray(Serializable::IArchive &ar, const char *label, FArray< Type, N > &array, bool isRequired)
Add and load an FArray < Type, N > fixed-size array parameter.
CArray2DParam< Type > & readCArray2D(std::istream &in, const char *label, Type *value, int m, int n, int np)
Add and read a required CArray2DParam < Type > 2D C-array.