Simpatico  v1.10
ParamComposite.h
1 #ifndef UTIL_PARAM_COMPOSITE_H
2 #define UTIL_PARAM_COMPOSITE_H
3 
4 /*
5 * Util Package - C++ Utilities for Scientific Computation
6 *
7 * Copyright 2010 - 2017, The Regents of the University of Minnesota
8 * Distributed under the terms of the GNU General Public License.
9 */
10 
11 #include <util/global.h>
12 #include <util/param/ParamComponent.h> // base class
13 #include <util/param/ScalarParam.h> // member function template
14 #include <util/param/CArrayParam.h> // member function template
15 #include <util/param/DArrayParam.h> // member function template
16 #include <util/param/FArrayParam.h> // member function template
17 #include <util/param/CArray2DParam.h> // member function template
18 #include <util/param/DMatrixParam.h> // member function template
19 #include <util/param/DSymmMatrixParam.h> // member function template
20 #include <util/archives/Serializable_includes.h>
21 
22 #include <vector>
23 
24 namespace Util
25 {
26 
27  class Begin;
28  class End;
29  class Blank;
30  template <class Data> class Factory;
31 
90  {
91 
92  public:
93 
98 
102  ParamComposite(const ParamComposite& other);
103 
111  ParamComposite(int capacity);
112 
116  virtual ~ParamComposite();
117 
126  void resetParam();
127 
129 
130 
147  virtual void readParam(std::istream &in);
148 
164  virtual void readParamOptional(std::istream &in);
165 
180  virtual void readParameters(std::istream &in)
181  {};
182 
192  virtual void writeParam(std::ostream &out);
193 
195 
197 
209  virtual void load(Serializable::IArchive &ar);
210 
218  virtual void loadOptional(Serializable::IArchive &ar);
219 
234  {};
235 
255  virtual void save(Serializable::OArchive &ar);
256 
263 
265 
271 
279  void
280  readParamComposite(std::istream &in, ParamComposite &child,
281  bool next = true);
282 
290  void
291  readParamCompositeOptional(std::istream &in,
292  ParamComposite &child, bool next = true);
293 
303  template <typename Type>
304  ScalarParam<Type>& read(std::istream &in, const char *label,
305  Type &value);
306 
316  template <typename Type>
318  readOptional(std::istream &in, const char *label, Type &value);
319 
329  template <typename Type>
331  readCArray(std::istream &in, const char *label, Type *value, int n);
332 
342  template <typename Type>
344  readOptionalCArray(std::istream &in, const char *label,
345  Type *value, int n);
346 
356  template <typename Type>
358  readDArray(std::istream &in, const char *label,
359  DArray<Type>& array, int n);
360 
370  template <typename Type>
372  readOptionalDArray(std::istream &in, const char *label,
373  DArray<Type>& array, int n);
374 
383  template <typename Type, int N>
385  readFArray(std::istream &in, const char *label,
386  FArray<Type, N >& array);
387 
396  template <typename Type, int N>
398  readOptionalFArray(std::istream &in, const char *label,
399  FArray<Type, N >& array);
400 
412  template <typename Type>
414  readCArray2D(std::istream &in, const char *label,
415  Type *value, int m, int n, int np);
416 
428  template <typename Type>
430  readOptionalCArray2D(std::istream &in, const char *label,
431  Type *value, int m, int n, int np);
432 
443  template <typename Type>
445  readDMatrix(std::istream &in, const char *label,
446  DMatrix<Type>& matrix, int m, int n);
447 
458  template <typename Type>
460  readOptionalDMatrix(std::istream &in, const char *label,
461  DMatrix<Type>& matrix, int m, int n);
462 
472  template <typename Type>
474  readDSymmMatrix(std::istream &in, const char *label,
475  DMatrix<Type>& matrix, int n);
476 
486  template <typename Type>
488  readOptionalDSymmMatrix(std::istream &in, const char *label,
489  DMatrix<Type>& matrix, int n);
490 
499  Begin& readBegin(std::istream &in, const char* label,
500  bool isRequired = true);
501 
508  End& readEnd(std::istream &in);
509 
516  Blank& readBlank(std::istream &in);
517 
519 
529 
537  void
539  ParamComposite &child, bool next = true);
540 
551  void
553  ParamComposite &child, bool next = true);
554 
568  template <typename Type>
570  const char *label, Type &value,
571  bool isRequired);
572 
583  template <typename Type>
585  const char *label, Type &value);
586 
597  template <typename Type>
599  loadCArray(Serializable::IArchive &ar, const char *label,
600  Type *value, int n, bool isRequired);
601 
613  template <typename Type>
615  loadCArray(Serializable::IArchive &ar, const char *label,
616  Type *value, int n);
617 
628  template <typename Type>
630  loadDArray(Serializable::IArchive &ar, const char *label,
631  DArray<Type>& array, int n, bool isRequired);
632 
644  template <typename Type>
646  loadDArray(Serializable::IArchive &ar, const char *label,
647  DArray<Type>& array, int n);
648 
658  template <typename Type, int N>
660  loadFArray(Serializable::IArchive &ar, const char *label,
661  FArray<Type, N >& array, bool isRequired);
662 
673  template <typename Type, int N>
675  loadFArray(Serializable::IArchive &ar, const char *label,
676  FArray<Type, N >& array)
677  { return loadFArray<Type, N>(ar, label, array, true); }
678 
691  template <typename Type>
693  loadCArray2D(Serializable::IArchive &ar, const char *label,
694  Type *value, int m, int n, int np, bool isRequired);
695 
709  template <typename Type>
711  loadCArray2D(Serializable::IArchive &ar, const char *label,
712  Type *value, int m, int n, int np);
713 
725  template <typename Type>
727  loadDMatrix(Serializable::IArchive &ar, const char *label,
728  DMatrix<Type>& matrix, int m, int n, bool isRequired);
729 
740  template <typename Type>
742  loadDMatrix(Serializable::IArchive &ar, const char *label,
743  DMatrix<Type>& matrix, int m, int n);
744 
755  template <typename Type>
757  loadDSymmMatrix(Serializable::IArchive &ar, const char *label,
758  DMatrix<Type>& matrix, int n, bool isRequired);
759 
769  template <typename Type>
771  loadDSymmMatrix(Serializable::IArchive &ar, const char *label,
772  DMatrix<Type>& matrix, int n);
773 
775 
779 
780 
787  void addParamComposite(ParamComposite& child, bool next = true);
788 
795  Begin& addBegin(const char* label);
796 
802  End& addEnd();
803 
809  Blank& addBlank();
810 
812 
814 
818  std::string className() const;
819 
823  bool isRequired() const;
824 
828  bool isActive() const;
829 
831 
832  protected:
833 
839  void setClassName(const char* className);
840 
848  void setIsRequired(bool isRequired);
849 
857  void setIsActive(bool isActive);
858 
868  void setParent(ParamComponent& param, bool next = true);
869 
876  void addComponent(ParamComponent& param, bool isLeaf = true);
877 
887  template <typename Type>
888  ScalarParam<Type>& add(std::istream &in, const char *label,
889  Type &value, bool isRequired = true);
890 
901  template <typename Type>
903  addCArray(std::istream &in, const char *label,
904  Type *value, int n, bool isRequired = true);
905 
916  template <typename Type>
918  addDArray(std::istream &in, const char *label,
919  DArray<Type>& array, int n, bool isRequired = true);
920 
930  template <typename Type, int N>
932  addFArray(std::istream &in, const char *label,
933  FArray<Type, N >& array, bool isRequired = true);
934 
947  template <typename Type>
949  addCArray2D(std::istream &in, const char *label,
950  Type *value, int m, int n, int np,
951  bool isRequired = true);
952 
964  template <typename Type>
966  addDMatrix(std::istream &in, const char *label,
967  DMatrix<Type>& matrix, int m, int n,
968  bool isRequired = true);
969 
970  private:
971 
973  std::vector<ParamComponent*> list_;
974 
976  std::vector<bool> isLeaf_;
977 
979  int size_;
980 
982  std::string className_;
983 
985  bool isRequired_;
986 
988  bool isActive_;
989 
998  template <typename Type>
999  ScalarParam<Type>& read_(std::istream &in, const char *label,
1000  Type &value, bool isRequired);
1001 
1012  template <typename Type>
1014  readCArray_(std::istream &in, const char *label, Type *value,
1015  int n, bool isRequired);
1016 
1027  template <typename Type>
1029  readDArray_(std::istream &in, const char *label,
1030  DArray<Type>& array, int n, bool isRequired);
1031 
1041  template <typename Type, int N>
1043  readFArray_(std::istream &in, const char *label,
1044  FArray<Type, N >& array, bool isRequired);
1045 
1060  template <typename Type>
1062  readCArray2D_(std::istream &in, const char *label,
1063  Type *value, int m, int n, int np, bool isRequired);
1064 
1076  template <typename Type>
1078  readDMatrix_(std::istream &in, const char *label,
1079  DMatrix<Type>& matrix, int m, int n, bool isRequired);
1080 
1091  template <typename Type>
1093  readDSymmMatrix_(std::istream &in, const char *label,
1094  DMatrix<Type>& matrix, int n, bool isRequired);
1095 
1096  };
1097 
1098  // Inline accessor functions
1099 
1100  /*
1101  * Get class name string.
1102  */
1103  inline std::string ParamComposite::className() const
1104  { return className_; }
1105 
1106  /*
1107  * Is this ParamComposite required in the input file?
1108  */
1109  inline bool ParamComposite::isRequired() const
1110  { return isRequired_; }
1111 
1112  /*
1113  * Is this parameter active?
1114  */
1115  inline bool ParamComposite::isActive() const
1116  { return isActive_; }
1117 
1118  // Function templates for scalar parameters
1119 
1120  /*
1121  * Add and read a scalar parameter (private).
1122  */
1123  template <typename Type>
1125  ParamComposite::read_(std::istream &in, const char *label, Type &value,
1126  bool isRequired)
1127  {
1128  ScalarParam<Type>* ptr;
1129  ptr = new ScalarParam<Type>(label, value, isRequired);
1130  setParent(*ptr);
1131  ptr->readParam(in);
1132  addComponent(*ptr);
1133  return *ptr;
1134  }
1135 
1136  /*
1137  * Add (but do not read) a scalar parameter (protected).
1138  */
1139  template <typename Type>
1141  ParamComposite::add(std::istream &in, const char *label, Type &value,
1142  bool isRequired)
1143  {
1144  ScalarParam<Type>* ptr;
1145  ptr = new ScalarParam<Type>(label, value, isRequired);
1146  setParent(*ptr);
1147  addComponent(*ptr);
1148  return *ptr;
1149  }
1150 
1151  /*
1152  * Add and read a required scalar parameter.
1153  */
1154  template <typename Type>
1156  ParamComposite::read(std::istream &in, const char *label, Type &value)
1157  { return read_<Type>(in, label, value, true); }
1158 
1159  /*
1160  * Add and read a new optional ScalarParam < Type > object.
1161  */
1162  template <typename Type>
1163  inline ScalarParam<Type>&
1164  ParamComposite::readOptional(std::istream &in, const char *label,
1165  Type &value)
1166  { return read_<Type>(in, label, value, false); }
1167 
1168  /*
1169  * Add a new ScalarParam< Type > object, and load its value from an archive.
1170  */
1171  template <typename Type>
1174  Type &value, bool isRequired)
1175  {
1176  ScalarParam<Type>* ptr;
1177  ptr = new ScalarParam<Type>(label, value, isRequired);
1178  setParent(*ptr);
1179  ptr->load(ar);
1180  addComponent(*ptr);
1181  return *ptr;
1182  }
1183 
1184  /*
1185  * Add a new required ScalarParam< Type > object, and load from an archive.
1186  */
1187  template <typename Type>
1188  inline ScalarParam<Type>&
1190  Type &value)
1191  { return loadParameter<Type>(ar, label, value, true); }
1192 
1193  // Templates for 1D C Arrays
1194 
1195  /*
1196  * Add and read a CArrayParam associated with a built-in C-array (private).
1197  */
1198  template <typename Type>
1200  ParamComposite::readCArray_(std::istream &in, const char *label,
1201  Type *value, int n, bool isRequired)
1202  {
1203  CArrayParam<Type>* ptr;
1204  ptr = new CArrayParam<Type>(label, value, n, isRequired);
1205  setParent(*ptr);
1206  ptr->readParam(in);
1207  addComponent(*ptr);
1208  return *ptr;
1209  }
1210 
1211  /*
1212  * Add a CArrayParam built-in C-array parameter (protected).
1213  */
1214  template <typename Type>
1216  ParamComposite::addCArray(std::istream &in, const char *label,
1217  Type *value, int n, bool isRequired)
1218  {
1219  CArrayParam<Type>* ptr;
1220  ptr = new CArrayParam<Type>(label, value, n, isRequired);
1221  setParent(*ptr);
1222  addComponent(*ptr);
1223  return *ptr;
1224  }
1225 
1226  /*
1227  * Add and read a required CArrayParam.
1228  */
1229  template <typename Type>
1230  inline CArrayParam<Type>&
1231  ParamComposite::readCArray(std::istream &in, const char *label,
1232  Type *value, int n)
1233  { return readCArray_<Type>(in, label, value, n, true); }
1234 
1235  /*
1236  * Add and read an optional CArrayParam.
1237  */
1238  template <typename Type>
1239  inline CArrayParam<Type>&
1240  ParamComposite::readOptionalCArray(std::istream &in, const char *label,
1241  Type *value, int n)
1242  { return readCArray_<Type>(in, label, value, n, false); }
1243 
1244  /*
1245  * Add and load a C array parameter.
1246  */
1247  template <typename Type>
1250  Type *value, int n, bool isRequired)
1251  {
1252  CArrayParam<Type>* ptr;
1253  ptr = new CArrayParam<Type>(label, value, n, isRequired);
1254  setParent(*ptr);
1255  ptr->load(ar);
1256  addComponent(*ptr);
1257  return *ptr;
1258  }
1259 
1260  /*
1261  * Add and load a required C array parameter.
1262  */
1263  template <typename Type>
1264  inline CArrayParam<Type>&
1266  Type *value, int n)
1267  { return loadCArray<Type>(ar, label, value, n, true); }
1268 
1269  // Templates for DArray parameters
1270 
1271  /*
1272  * Add and read a DArrayParam associated with a DArray<Type> (private).
1273  */
1274  template <typename Type>
1276  ParamComposite::readDArray_(std::istream &in, const char *label,
1277  DArray<Type>& array, int n, bool isRequired)
1278  {
1279  DArrayParam<Type>* ptr;
1280  ptr = new DArrayParam<Type>(label, array, n, isRequired);
1281  setParent(*ptr);
1282  ptr->readParam(in);
1283  addComponent(*ptr);
1284  return *ptr;
1285  }
1286 
1287  /*
1288  * Add a DArray<Type> DArray parameter (protected).
1289  */
1290  template <typename Type>
1292  ParamComposite::addDArray(std::istream &in, const char *label,
1293  DArray<Type>& array, int n, bool isRequired)
1294  {
1295  DArrayParam<Type>* ptr;
1296  ptr = new DArrayParam<Type>(label, array, n, isRequired);
1297  setParent(*ptr);
1298  addComponent(*ptr);
1299  return *ptr;
1300  }
1301 
1302  /*
1303  * Add and read a required DArrayParam.
1304  */
1305  template <typename Type>
1306  inline
1308  ParamComposite::readDArray(std::istream &in, const char *label,
1309  DArray<Type>& array, int n)
1310  { return readDArray_<Type>(in, label, array, n, true); }
1311 
1312  /*
1313  * Add and read an optional DArrayParam.
1314  */
1315  template <typename Type>
1316  inline
1318  ParamComposite::readOptionalDArray(std::istream &in, const char *label,
1319  DArray<Type>& array, int n)
1320  { return readDArray_<Type>(in, label, array, n, false); }
1321 
1322  /*
1323  * Add a DArray < Type > parameter, and load its elements.
1324  */
1325  template <typename Type>
1328  DArray<Type>& array, int n, bool isRequired)
1329  {
1330  DArrayParam<Type>* ptr;
1331  ptr = new DArrayParam<Type>(label, array, n, isRequired);
1332  setParent(*ptr);
1333  ptr->load(ar);
1334  addComponent(*ptr);
1335  return *ptr;
1336  }
1337 
1338  /*
1339  * Add a required DArray < Type > parameter, and load its elements.
1340  */
1341  template <typename Type>
1342  inline DArrayParam<Type>&
1344  DArray<Type>& array, int n)
1345  { return loadDArray<Type>(ar, label, array, n, true); }
1346 
1347  // Templates for fixed size FArray array objects.
1348 
1349  /*
1350  * Add and read an FArrayParam<Type, N> fixed size array (private).
1351  */
1352  template <typename Type, int N>
1354  ParamComposite::readFArray_(std::istream &in, const char *label,
1355  FArray<Type, N>& array, bool isRequired)
1356  {
1357  FArrayParam<Type, N>* ptr;
1358  ptr = new FArrayParam<Type, N>(label, array, isRequired);
1359  setParent(*ptr);
1360  ptr->readParam(in);
1361  addComponent(*ptr);
1362  return *ptr;
1363  }
1364 
1365  /*
1366  * Add a FArrayParam<Type, N> parameter (protected).
1367  */
1368  template <typename Type, int N>
1370  ParamComposite::addFArray(std::istream &in, const char *label,
1371  FArray<Type, N>& array, bool isRequired)
1372  {
1373  FArrayParam<Type, N>* ptr;
1374  ptr = new FArrayParam<Type, N>(label, array, isRequired);
1375  setParent(*ptr);
1376  addComponent(*ptr);
1377  return *ptr;
1378  }
1379 
1380  /*
1381  * Add and read a required FArray < Type, N > array parameter.
1382  */
1383  template <typename Type, int N>
1384  inline
1386  ParamComposite::readFArray(std::istream &in, const char *label,
1387  FArray<Type, N >& array)
1388  { return readFArray_<Type>(in, label, array, true); }
1389 
1390  /*
1391  * Add and read an optional FArray < Type, N > array parameter.
1392  */
1393  template <typename Type, int N>
1394  inline
1396  ParamComposite::readOptionalFArray(std::istream &in, const char *label,
1397  FArray<Type, N >& array)
1398  { return readFArray_<Type>(in, label, array, false); }
1399 
1400  /*
1401  * Add and load an FArray < Type, N > fixed-size array parameter.
1402  */
1403  template <typename Type, int N>
1406  FArray<Type, N >& array, bool isRequired)
1407  {
1408  FArrayParam<Type, N>* ptr;
1409  ptr = new FArrayParam<Type, N>(label, array, isRequired);
1410  setParent(*ptr);
1411  ptr->load(ar);
1412  addComponent(*ptr);
1413  return *ptr;
1414  }
1415 
1416  // Templates for built-in two-dimensional C Arrays
1417 
1418  /*
1419  * Add and read a CArray2DParam 2D C array (private).
1420  */
1421  template <typename Type>
1423  ParamComposite::readCArray2D_(std::istream &in, const char *label,
1424  Type *value, int m, int n, int np,
1425  bool isRequired)
1426  {
1427  CArray2DParam<Type>* ptr;
1428  ptr = new CArray2DParam<Type>(label, value, m, n, np, isRequired);
1429  setParent(*ptr);
1430  ptr->readParam(in);
1431  addComponent(*ptr);
1432  return *ptr;
1433  }
1434 
1435  /*
1436  * Add a CArray2DParam 2D C array (protected).
1437  */
1438  template <typename Type>
1440  ParamComposite::addCArray2D(std::istream &in, const char *label,
1441  Type *value, int m, int n, int np,
1442  bool isRequired)
1443  {
1444  CArray2DParam<Type>* ptr;
1445  ptr = new CArray2DParam<Type>(label, value, m, n, np, isRequired);
1446  setParent(*ptr);
1447  addComponent(*ptr);
1448  return *ptr;
1449  }
1450 
1451  /*
1452  * Add and read a required CArray2DParam.
1453  */
1454  template <typename Type>
1455  inline CArray2DParam<Type>&
1456  ParamComposite::readCArray2D(std::istream &in, const char *label,
1457  Type *value, int m, int n, int np)
1458  { return readCArray2D_<Type>(in, label, value, m, n, np, true); }
1459 
1460  /*
1461  * Add and read an optional CArray2DParam.
1462  */
1463  template <typename Type>
1464  inline CArray2DParam<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); }
1469 
1470  /*
1471  * Add and load a CArray2DParam < Type > 2D C array parameter.
1472  */
1473  template <typename Type>
1476  const char *label,
1477  Type *value, int m, int n, int np,
1478  bool isRequired)
1479  {
1480  CArray2DParam<Type>* ptr;
1481  ptr = new CArray2DParam<Type>(label, value, m, n, np, isRequired);
1482  setParent(*ptr);
1483  ptr->load(ar);
1484  addComponent(*ptr);
1485  return *ptr;
1486  }
1487 
1488  /*
1489  * Add and load a required CArray2DParam < Type > 2D C array.
1490  */
1491  template <typename Type>
1494  const char *label,
1495  Type *value, int m, int n, int np)
1496  { return loadCArray2D<Type>(ar, label, value, m, n, np, true); }
1497 
1498  // Templates for DMatrix containers
1499 
1500  /*
1501  * Add and read a DMatrixParam DMatrix<Type> parameter (private).
1502  */
1503  template <typename Type>
1505  ParamComposite::readDMatrix_(std::istream &in, const char *label,
1506  DMatrix<Type>& matrix, int m, int n,
1507  bool isRequired)
1508  {
1509  DMatrixParam<Type>* ptr;
1510  ptr = new DMatrixParam<Type>(label, matrix, m, n, isRequired);
1511  setParent(*ptr);
1512  ptr->readParam(in);
1513  addComponent(*ptr);
1514  return *ptr;
1515  }
1516 
1517  /*
1518  * Add a DMatrixParam DMatrix<Type> parameter (protected).
1519  */
1520  template <typename Type>
1522  ParamComposite::addDMatrix(std::istream &in, const char *label,
1523  DMatrix<Type>& matrix, int m, int n,
1524  bool isRequired)
1525  {
1526  DMatrixParam<Type>* ptr;
1527  ptr = new DMatrixParam<Type>(label, matrix, m, n, isRequired);
1528  setParent(*ptr);
1529  addComponent(*ptr);
1530  return *ptr;
1531  }
1532 
1533  /*
1534  * Add and read a required DMatrixParam.
1535  */
1536  template <typename Type>
1537  inline DMatrixParam<Type>&
1538  ParamComposite::readDMatrix(std::istream &in, const char *label,
1539  DMatrix<Type>& matrix, int m, int n)
1540  { return readDMatrix_<Type>(in, label, matrix, m, n, true); }
1541 
1542  /*
1543  * Add and read an optional DMatrixParam.
1544  */
1545  template <typename Type>
1546  inline DMatrixParam<Type>&
1547  ParamComposite::readOptionalDMatrix(std::istream &in, const char *label,
1548  DMatrix<Type>& matrix, int m, int n)
1549  { return readDMatrix_<Type>(in, label, matrix, m, n, false); }
1550 
1551  /*
1552  * Add and load a DMatrix < Type > C two-dimensional matrix parameter.
1553  */
1554  template <typename Type>
1557  DMatrix<Type>& matrix, int m, int n,
1558  bool isRequired)
1559  {
1560  DMatrixParam<Type>* ptr;
1561  ptr = new DMatrixParam<Type>(label, matrix, m, n, isRequired);
1562  setParent(*ptr);
1563  ptr->load(ar);
1564  addComponent(*ptr);
1565  return *ptr;
1566  }
1567 
1568  /*
1569  * Add and load a required DMatrixParam< Type> matrix parameter.
1570  */
1571  template <typename Type>
1572  inline DMatrixParam<Type>&
1574  DMatrix<Type>& matrix, int m, int n)
1575  { return loadDMatrix<Type>(ar, label, matrix, m, n, true); }
1576 
1577  // Templates for Symmetric DMatrix containers
1578 
1579  /*
1580  * Add and read a symmetric DMatrixParam DMatrix (private).
1581  */
1582  template <typename Type>
1584  ParamComposite::readDSymmMatrix_(std::istream &in,
1585  const char *label,
1586  DMatrix<Type>& matrix,
1587  int n,
1588  bool isRequired)
1589  {
1591  ptr = new DSymmMatrixParam<Type>(label, matrix, n, isRequired);
1592  setParent(*ptr);
1593  ptr->readParam(in);
1594  addComponent(*ptr);
1595  return *ptr;
1596  }
1597 
1598  /*
1599  * Add and read a required DMatrixParam.
1600  */
1601  template <typename Type>
1602  inline DSymmMatrixParam<Type>&
1604  const char *label,
1605  DMatrix<Type>& matrix,
1606  int n)
1607  { return readDSymmMatrix_<Type>(in, label, matrix, n, true); }
1608 
1609  /*
1610  * Add and read an optional DMatrixParam.
1611  */
1612  template <typename Type>
1613  inline DSymmMatrixParam<Type>&
1615  const char *label,
1616  DMatrix<Type>& matrix,
1617  int n)
1618  { return readDMatrix_<Type>(in, label, matrix, n, false); }
1619 
1620  /*
1621  * Add and load a DMatrix < Type > C two-dimensional matrix parameter.
1622  */
1623  template <typename Type>
1626  const char *label,
1627  DMatrix<Type>& matrix,
1628  int n,
1629  bool isRequired)
1630  {
1632  ptr = new DSymmMatrixParam<Type>(label, matrix, n, isRequired);
1633  setParent(*ptr);
1634  ptr->load(ar);
1635  addComponent(*ptr);
1636  return *ptr;
1637  }
1638 
1639  /*
1640  * Add and load a required DMatrixParam< Type> matrix parameter.
1641  */
1642  template <typename Type>
1643  inline DSymmMatrixParam<Type>&
1645  const char *label,
1646  DMatrix<Type>& matrix,
1647  int n)
1648  { return loadDSymmMatrix<Type>(ar, label, matrix, n, true); }
1649 
1650 }
1651 #endif
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.
Definition: End.h:24
ParamComposite()
Constructor.
An empty line within a parameter file.
Definition: Blank.h:24
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 &param, 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.
Definition: CArray2DParam.h:29
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 &param, 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.
Definition: DMatrixParam.h:29
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.
Definition: ScalarParam.h:34
Utility classes for scientific computation.
Definition: accumulators.mod:1
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.
Definition: CArrayParam.h:22
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.
Definition: Parameter.cpp:98
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.
Definition: DArrayParam.h:26
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.
Definition: Parameter.cpp:36
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.
Definition: FArrayParam.h:26
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.
Definition: Begin.h:24
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.