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/FSArrayParam.h>
18#include <util/param/CArray2DParam.h>
19#include <util/param/DMatrixParam.h>
20#include <util/param/DSymmMatrixParam.h>
21#include <util/archives/Serializable_includes.h>
31 template <
class Data>
class Factory;
148 virtual void readParam(std::istream &in);
193 virtual void writeParam(std::ostream &out)
const;
304 template <
typename Type>
317 template <
typename Type>
330 template <
typename Type>
332 readCArray(std::istream &in,
const char *label, Type *value,
int n);
343 template <
typename Type>
357 template <
typename Type>
371 template <
typename Type>
384 template <
typename Type,
int N>
386 readFArray(std::istream &in,
const char *label,
397 template <
typename Type,
int N>
411 template <
typename Type,
int N>
425 template <
typename Type,
int N>
441 template <
typename Type>
444 Type *value,
int m,
int n,
int np);
457 template <
typename Type>
460 Type *value,
int m,
int n,
int np);
472 template <
typename Type>
487 template <
typename Type>
501 template <
typename Type>
515 template <
typename Type>
597 template <
typename Type>
599 const char *label, Type &value,
612 template <
typename Type>
614 const char *label, Type &value);
626 template <
typename Type>
642 template <
typename Type>
657 template <
typename Type>
673 template <
typename Type>
687 template <
typename Type,
int N>
702 template <
typename Type,
int N>
706 {
return loadFArray<Type, N>(ar, label, array,
true); }
718 template <
typename Type,
int N>
734 template <
typename Type,
int N>
738 {
return loadFSArray<Type, N>(ar, label, array, size,
true); }
752 template <
typename Type>
755 Type *value,
int m,
int n,
int np,
bool isRequired);
770 template <
typename Type>
773 Type *value,
int m,
int n,
int np);
786 template <
typename Type>
801 template <
typename Type>
816 template <
typename Type>
830 template <
typename Type>
948 template <
typename Type>
962 template <
typename Type>
964 addCArray(std::istream &in,
const char *label,
977 template <
typename Type>
979 addDArray(std::istream &in,
const char *label,
991 template <
typename Type,
int N>
993 addFArray(std::istream &in,
const char *label,
1006 template <
typename Type,
int N>
1008 addFSArray(std::istream &in,
const char *label,
1024 template <
typename Type>
1027 Type *value,
int m,
int n,
int np,
1041 template <
typename Type>
1043 addDMatrix(std::istream &in,
const char *label,
1050 std::vector<ParamComponent*> list_;
1053 std::vector<bool> isLeaf_;
1059 std::string className_;
1075 template <
typename Type>
1089 template <
typename Type>
1091 readCArray_(std::istream &in,
const char *label, Type *value,
1104 template <
typename Type>
1106 readDArray_(std::istream &in,
const char *label,
1118 template <
typename Type,
int N>
1120 readFArray_(std::istream &in,
const char *label,
1133 template <
typename Type,
int N>
1135 readFSArray_(std::istream &in,
const char *label,
1152 template <
typename Type>
1154 readCArray2D_(std::istream &in,
const char *label,
1155 Type *value,
int m,
int n,
int np,
bool isRequired);
1168 template <
typename Type>
1170 readDMatrix_(std::istream &in,
const char *label,
1183 template <
typename Type>
1185 readDSymmMatrix_(std::istream &in,
const char *label,
1196 {
return className_; }
1202 {
return isRequired_; }
1208 {
return isActive_; }
1215 template <
typename Type>
1217 ParamComposite::read_(std::istream &in,
const char *label, Type &value,
1231 template <
typename Type>
1246 template <
typename Type>
1249 {
return read_<Type>(in, label, value,
true); }
1254 template <
typename Type>
1258 {
return read_<Type>(in, label, value,
false); }
1263 template <
typename Type>
1266 Type &value,
bool isRequired)
1279 template <
typename Type>
1283 {
return loadParameter<Type>(ar, label, value,
true); }
1290 template <
typename Type>
1292 ParamComposite::readCArray_(std::istream &in,
const char *label,
1293 Type *value,
int n,
bool isRequired)
1306 template <
typename Type>
1309 Type *value,
int n,
bool isRequired)
1321 template <
typename Type>
1325 {
return readCArray_<Type>(in, label, value, n,
true); }
1330 template <
typename Type>
1334 {
return readCArray_<Type>(in, label, value, n,
false); }
1339 template <
typename Type>
1342 Type *value,
int n,
bool isRequired)
1355 template <
typename Type>
1359 {
return loadCArray<Type>(ar, label, value, n,
true); }
1366 template <
typename Type>
1368 ParamComposite::readDArray_(std::istream &in,
const char *label,
1382 template <
typename Type>
1397 template <
typename Type>
1402 {
return readDArray_<Type>(in, label, array, n,
true); }
1407 template <
typename Type>
1412 {
return readDArray_<Type>(in, label, array, n,
false); }
1417 template <
typename Type>
1433 template <
typename Type>
1437 {
return loadDArray<Type>(ar, label, array, n,
true); }
1446 template <
typename Type,
int N>
1448 ParamComposite::readFArray_(std::istream &in,
const char *label,
1462 template <
typename Type,
int N>
1463 FArrayParam<Type, N>&
1477 template <
typename Type,
int N>
1482 {
return readFArray_<Type>(in, label, array,
true); }
1487 template <
typename Type,
int N>
1492 {
return readFArray_<Type>(in, label, array,
false); }
1497 template <
typename Type,
int N>
1515 template <
typename Type,
int N>
1517 ParamComposite::readFSArray_(std::istream &in,
const char *label,
1532 template <
typename Type,
int N>
1533 FSArrayParam<Type, N>&
1548 template <
typename Type,
int N>
1553 {
return readFSArray_<Type>(in, label, array, size,
true); }
1558 template <
typename Type,
int N>
1565 {
return readFSArray_<Type>(in, label, array, size,
false); }
1570 template <
typename Type,
int N>
1590 template <
typename Type>
1592 ParamComposite::readCArray2D_(std::istream &in,
const char *label,
1593 Type *value,
int m,
int n,
int np,
1607 template <
typename Type>
1608 CArray2DParam<Type>&
1610 Type *value,
int m,
int n,
int np,
1623 template <
typename Type>
1626 Type *value,
int m,
int n,
int np)
1627 {
return readCArray2D_<Type>(in, label, value, m, n, np,
true); }
1632 template <
typename Type>
1635 const char *label, Type *value,
1636 int m,
int n,
int np)
1637 {
return readCArray2D_<Type>(in, label, value, m, n, np,
false); }
1642 template <
typename Type>
1646 Type *value,
int m,
int n,
int np,
1660 template <
typename Type>
1664 Type *value,
int m,
int n,
int np)
1665 {
return loadCArray2D<Type>(ar, label, value, m, n, np,
true); }
1672 template <
typename Type>
1674 ParamComposite::readDMatrix_(std::istream &in,
const char *label,
1689 template <
typename Type>
1705 template <
typename Type>
1709 {
return readDMatrix_<Type>(in, label, matrix, m, n,
true); }
1714 template <
typename Type>
1718 {
return readDMatrix_<Type>(in, label, matrix, m, n,
false); }
1723 template <
typename Type>
1740 template <
typename Type>
1744 {
return loadDMatrix<Type>(ar, label, matrix, m, n,
true); }
1751 template <
typename Type>
1753 ParamComposite::readDSymmMatrix_(std::istream &in,
1770 template <
typename Type>
1771 inline DSymmMatrixParam<Type>&
1776 {
return readDSymmMatrix_<Type>(in, label, matrix, n,
true); }
1781 template <
typename Type>
1787 {
return readDMatrix_<Type>(in, label, matrix, n,
false); }
1792 template <
typename Type>
1811 template <
typename Type>
1817 {
return loadDSymmMatrix<Type>(ar, label, matrix, n,
true); }
virtual void load(Serializable::IArchive &ar)
Load from an archive.
Beginning line of a composite parameter block.
Saving archive for binary istream.
Saving / output archive for binary ostream.
An empty line within a parameter file.
A Parameter associated with a 2D built-in C array.
A Parameter associated with a 1D C array.
A Parameter associated with a DArray container.
Dynamically allocatable contiguous array template.
A Parameter associated with a 2D built-in C array.
Dynamically allocated Matrix.
A Parameter associated with a square symmetric DMatrix.
End bracket of a ParamComposite parameter block.
A Parameter associated with a FArray container.
A fixed size (static) contiguous array template.
A Parameter associated with a FSArray container.
A fixed capacity (static) contiguous array with a variable logical size.
virtual void load(Serializable::IArchive &ar)
Load from an archive.
Abstract base class for classes that input and ouput parameters to file.
An object that can read multiple parameters from file.
virtual void load(Serializable::IArchive &ar)
Load all parameters from an input archive.
ScalarParam< Type > & add(std::istream &in, const char *label, Type &value, bool isRequired=true)
Add a new required ScalarParam < Type > object.
virtual void loadOptional(Serializable::IArchive &ar)
Load an optional ParamComposite.
FSArrayParam< Type, N > & addFSArray(std::istream &in, const char *label, FSArray< Type, N > &array, int size, bool isRequired=true)
Add (but do not read) a FSArray < Type, N > array parameter.
FSArrayParam< Type, N > & readOptionalFSArray(std::istream &in, const char *label, FSArray< Type, N > &array, int size)
Add and read an optional FSArray < Type, N > array parameter.
DSymmMatrixParam< Type > & readDSymmMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
Add and read a required symmetrix DMatrix.
DArrayParam< Type > & readDArray(std::istream &in, const char *label, DArray< Type > &array, int n)
Add and read a required DArray < Type > parameter.
DArrayParam< Type > & readOptionalDArray(std::istream &in, const char *label, DArray< Type > &array, int n)
Add and read an optional DArray < Type > parameter.
virtual void readParameters(std::istream &in)
Read the body of parameter block, without begin and end lines.
FArrayParam< Type, N > & readOptionalFArray(std::istream &in, const char *label, FArray< Type, N > &array)
Add and read an optional FArray < Type, N > array parameter.
ScalarParam< Type > & read(std::istream &in, const char *label, Type &value)
Add and read a new required ScalarParam < Type > object.
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.
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 & readBegin(std::istream &in, const char *label, bool isRequired=true)
Add and read a class label and opening bracket.
void addParamComposite(ParamComposite &child, bool next=true)
Add a child ParamComposite object to the format array.
void saveOptional(Serializable::OArchive &ar)
Saves isActive flag, and then calls save() iff isActive is true.
void setClassName(const char *className)
Set class name string.
void setIsRequired(bool isRequired)
Set or unset the isActive flag.
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.
FSArrayParam< Type, N > & readFSArray(std::istream &in, const char *label, FSArray< Type, N > &array, int size)
Add and read a required FSArray < Type, N > array parameter.
void resetParam()
Resets ParamComposite to its empty state.
virtual ~ParamComposite()
Virtual destructor.
virtual void save(Serializable::OArchive &ar)
Saves all parameters to an archive.
Begin & addBegin(const char *label)
Add a Begin object representing a class name and bracket.
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.
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.
void setIsActive(bool isActive)
Set or unset the isActive flag.
virtual void writeParam(std::ostream &out) const
Write all parameters to an output stream.
ScalarParam< Type > & readOptional(std::istream &in, const char *label, Type &value)
Add and read a new optional ScalarParam < Type > object.
void loadParamComposite(Serializable::IArchive &ar, ParamComposite &child, bool next=true)
Add and load a required child ParamComposite.
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.
CArrayParam< Type > & loadCArray(Serializable::IArchive &ar, const char *label, Type *value, int n, bool isRequired)
Add a C array parameter and load its elements.
CArrayParam< Type > & readCArray(std::istream &in, const char *label, Type *value, int n)
Add and read a required C array parameter.
virtual void readParam(std::istream &in)
Read the parameter file block.
Blank & addBlank()
Create and add a new Blank object, representing a blank line.
bool isActive() const
Is this parameter active?
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.
ScalarParam< Type > & loadParameter(Serializable::IArchive &ar, const char *label, Type &value, bool isRequired)
Add and load a new ScalarParam < Type > object.
FSArrayParam< Type, N > & loadFSArray(Serializable::IArchive &ar, const char *label, FSArray< Type, N > &array, int size)
Add and load a required FSArray < Type > array parameter.
End & addEnd()
Add a closing bracket.
ParamComposite()
Constructor.
std::string className() const
Get class name string.
void loadParamCompositeOptional(Serializable::IArchive &ar, ParamComposite &child, bool next=true)
Add and load an optional child ParamComposite if isActive.
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.
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.
Blank & readBlank(std::istream &in)
Add and read a new Blank object, representing a blank line.
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.
FSArrayParam< Type, N > & loadFSArray(Serializable::IArchive &ar, const char *label, FSArray< Type, N > &array, int size, bool isRequired)
Add and load an FSArray < Type, N > array parameter.
void readParamComposite(std::istream &in, ParamComposite &child, bool next=true)
Add and read a required child ParamComposite.
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.
DSymmMatrixParam< Type > & readOptionalDSymmMatrix(std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
Add and read an optional DMatrix matrix parameter.
CArrayParam< Type > & readOptionalCArray(std::istream &in, const char *label, Type *value, int n)
Add and read an optional C array parameter.
virtual void readParamOptional(std::istream &in)
Read optional parameter file block.
void readParamCompositeOptional(std::istream &in, ParamComposite &child, bool next=true)
Add and attempt to read an optional child ParamComposite.
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.
End & readEnd(std::istream &in)
Add and read the closing bracket.
void setParent(ParamComponent ¶m, bool next=true)
Set this to the parent of a child component.
DArrayParam< Type > & loadDArray(Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n, bool isRequired)
Add an load a DArray < Type > array parameter.
virtual void loadParameters(Serializable::IArchive &ar)
Load state from archive, without adding Begin and End lines.
void addComponent(ParamComponent ¶m, bool isLeaf=true)
Add a new ParamComponent 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.
FArrayParam< Type, N > & loadFArray(Serializable::IArchive &ar, const char *label, FArray< Type, N > &array)
Add and load a required FArray < Type > array parameter.
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.
bool isRequired() const
Is this ParamComposite required in the input file?
virtual void readParam(std::istream &in)
Read a label and (if the label matches) a parameter value.
virtual void load(Serializable::IArchive &ar)
Load from an archive.
Template for a Parameter object associated with a scalar variable.
File containing preprocessor macros for error handling.
Utility classes for scientific computation.