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>
718 template <
typename Type,
int N>
734 template <
typename Type,
int N>
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>
1279 template <
typename Type>
1290 template <
typename Type>
1292 ParamComposite::readCArray_(std::istream &in,
const char *label,
1293 Type *value,
int n,
bool isRequired)
1306 template <
typename Type>
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>
1355 template <
typename Type>
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>
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)
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>
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>
virtual void load(Serializable::IArchive &ar)
Load from an archive.
Beginning line of a composite parameter block.
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.
ParamComponent()
Constructor.
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.
BinaryFileIArchive IArchive
Type of input archive used by load method.
BinaryFileOArchive OArchive
Type of output archive used by save method.
File containing preprocessor macros for error handling.
Utility classes for scientific computation.