Go to the documentation of this file.00001 #ifndef _PARAMETER_SET_H
00002 #define _PARAMETER_SET_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __cplusplus
00032 #error This is a C++ include file and cannot be used from plain C
00033 #endif
00034
00035 #include <map>
00036 #include <memory>
00037 #include <string.h>
00038 #include <stdexcept>
00039 #include <stdlib.h>
00040 #include <xercesc/dom/DOMBuilder.hpp>
00041 #include <xercesc/dom/DOMElement.hpp>
00042 #include <xercesc/dom/DOMNode.hpp>
00043 #include <xercesc/util/PlatformUtils.hpp>
00044 #include <ParamStrX.h>
00045 #include <InMemoryXmlData.h>
00046 #include <ParamSetDef.h>
00047 #include <BoolParam.h>
00048 #include <IntParam.h>
00049 #include <IntArrayParam.h>
00050 #include <DoubleArrayParam.h>
00051 #include <DoubleParam.h>
00052 #include <StringParam.h>
00053 #include <StringArrayParam.h>
00054 #include <parameterConstants.h>
00055
00056 using std::auto_ptr;
00057 using std::domain_error;
00058 using std::invalid_argument;
00059 using std::map;
00060 using std::string;
00061 using XERCES_CPP_NAMESPACE_QUALIFIER DOMElement;
00062 using XERCES_CPP_NAMESPACE_QUALIFIER DOMNodeList;
00063 using XERCES_CPP_NAMESPACE_QUALIFIER DOMBuilder;
00064
00067 namespace Parameters {
00068
00072 class ParameterSet
00073 {
00074 public:
00075
00076
00084 ParameterSet(string xmlFileName);
00085
00090 ParameterSet(InMemoryXmlData * fileInfo);
00091
00095 virtual ~ParameterSet();
00096
00097
00098
00104 IntParam getIntParam(string paramName);
00105
00111 DoubleParam getDoubleParam(string paramName);
00112
00118 StringParam getStringParam(string paramName);
00119
00125 BoolParam getBoolParam(string paramName);
00126
00132 IntArrayParam getIntArrayParam(string paramName);
00133
00139 DoubleArrayParam getDoubleArrayParam(string paramName);
00140
00146 StringArrayParam getStringArrayParam(string paramName);
00147
00148
00149
00155 void setParam(string paramName, IntParam value);
00156
00162 void setParam(string paramName, DoubleParam value);
00163
00169 void setParam(string paramName, StringParam value);
00170
00176 void setParam(string paramName, BoolParam value);
00177
00183 void setParam(string paramName, IntArrayParam value);
00184
00190 void setParam(string paramName, DoubleArrayParam value);
00191
00197 void setParam(string paramName, StringArrayParam value);
00198
00203 ParamSetDef* getParamSetDef();
00204
00208 string getName();
00209
00213 string toString();
00214
00215 private:
00216
00220 void setName(string psetName);
00221
00226 string getParamSetDefFileName();
00227
00232 void validate();
00233
00238 void validateBoolParams();
00243 void validateBoolParam(BoolParamDef pDef);
00244
00249 void validateIntParams();
00254 void validateIntParam(IntParamDef pDef);
00255
00260 void validateDoubleParams();
00265 void validateDoubleParam(DoubleParamDef pDef);
00266
00271 void validateStringParams();
00276 void validateStringParam(StringParamDef pDef);
00277
00282 void validateIntArrayParams();
00287 void validateIntArrayParam(IntArrayParamDef pDef);
00288
00293 void validateStringArrayParams();
00298 void validateStringArrayParam(StringArrayParamDef pDef);
00299
00304 void validateDoubleArrayParams();
00309 void validateDoubleArrayParam(DoubleArrayParamDef pDef);
00310
00314 int parseDOM(const char* xmlParamSet, InMemoryXmlData * fileInfo);
00315 int parseFile(const string & xmlFile);
00316 int parseSAX(const string & xmlParamSet);
00320 void handleBoolParam(DOMElement *paramElem);
00324 void handleIntParam(DOMElement *paramElem);
00328 void handleIntArrayParam(DOMElement *paramElem);
00332 void handleDoubleParam(DOMElement *paramElem);
00336 void handleDoubleArrayParam(DOMElement *paramElem);
00340 void handleStringParam(DOMElement *paramElem);
00344 void handleStringArrayParam(DOMElement *paramElem);
00348 void processParamNodes(DOMNodeList *paramNodes);
00352 void initialize();
00353 void setSchemaLocation(DOMBuilder * parser);
00354
00355 string name;
00356 string psetDefFileName;
00357 map<string, IntParam> intParamMap;
00358 map<string, IntArrayParam> intArrayParamMap;
00359 map<string, DoubleParam> doubleParamMap;
00360 map<string, DoubleArrayParam> doubleArrayParamMap;
00361 map<string, StringParam> stringParamMap;
00362 map<string, StringArrayParam> stringArrayParamMap;
00363 map<string, BoolParam> boolParamMap;
00364
00365
00366 XMLCh* PSETDEF_TAG_NAME;
00367 XMLCh* PARAMETER_TAG_NAME;
00368 XMLCh* NAME_TAG_NAME;
00369 XMLCh* VALUE_TAG_NAME;
00370 XMLCh* UNITS_TAG_NAME;
00371
00372 XMLCh* INT_PARAM_TYPE;
00373 XMLCh* DOUBLE_PARAM_TYPE;
00374 XMLCh* STRING_PARAM_TYPE;
00375 XMLCh* BOOL_PARAM_TYPE;
00376 XMLCh* INT_ARRAY_PARAM_TYPE;
00377 XMLCh* DOUBLE_ARRAY_PARAM_TYPE;
00378 XMLCh* STRING_ARRAY_PARAM_TYPE;
00379
00380 auto_ptr<ParamSetDef> ParameterSetDef;
00381 };
00382
00383 }
00384 #endif