VAPoR  0.1
ParamNode.h
Go to the documentation of this file.
1 //
2 // $Id$
3 //
4 
5 #ifndef _ParamNode_h_
6 #define _ParamNode_h_
7 
8 #include <iostream>
9 #include <map>
10 #include <vector>
11 #include <string>
12 #include <vapor/MyBase.h>
13 #include <vapor/XmlNode.h>
14 
15 namespace VAPoR {
16 
17 class ParamsBase;
18 //
30 class PARAMS_API ParamNode : public XmlNode {
31 public:
32 
33  class DirtyFlag {
34  public:
35  DirtyFlag() {_status = true;}
36  bool Test() const {return(_status);}
37  void Set() {_status = true;}
38  void Clear() {_status = false;}
39  private:
40  bool _status;
41  };
42 
43 
54  ParamNode(
55  const string &tag, const map<string, string> &attrs,
56  size_t numChildrenHint = 0
57  );
58 
59  ParamNode(
60  const string &tag,
61  size_t numChildrenHint = 0
62  );
63 
71  virtual ParamNode *Construct(
72  const string &tag, const map<string, string> &attrs,
73  size_t numChildrenHint = 0
74  ) { return(new ParamNode(tag, attrs, numChildrenHint)); }
75 
82  ParamNode(const ParamNode &pn);
83 
87  ParamNode* NodeCopy();
88 
90  ParamNode* ShallowCopy();
91 
101  virtual ParamNode* deepCopy() ;
102 
103  virtual ~ParamNode();
104 
105 
112  //
113  void SetAllFlags(bool dirty);
114 
126  //
127  int SetElementDouble(
128  const string &tag, double value
129  );
141  //
142  int SetElementDouble(
143  const string &tag, const vector<double> &values
144  );
156  //
157  int SetElementDouble(
158  const vector<string> &tagpath, const vector<double> &values
159  );
160 
173  virtual const vector<double> &GetElementDouble(const vector<string> &tagpath, const vector<double>& defaultVal = XmlNode::_emptyDoubleVec );
174 
187  virtual const vector<double> &GetElementDouble(const string &tag, const vector<double>& defaultVal = XmlNode::_emptyDoubleVec);
188 
189  int SetElementLong(
190  const string &tag, const vector<long> &values
191  );
203  //
204  int SetElementLong(
205  const string &tag, long value
206  );
218  //
219  int SetElementLong(
220  const vector<string> &tagpath, const vector<long> &values
221  );
235  virtual const vector<long> &GetElementLong(const vector<string> &tagpath, const vector<long>& defaultVal = XmlNode::_emptyLongVec);
248  virtual const vector<long> &GetElementLong(const string &tag, const vector<long>& defaultVal= XmlNode::_emptyLongVec);
249 
250 
262  //
263  int SetElementString(
264  const string &tag, const string &value
265  );
277  //
278  int SetElementString(
279  const vector<string> &tagpath, const string &value
280  );
293  //
294  int SetElementStringVec(const string &tag, const vector<string> &values);
310  //
311  int SetElementStringVec(const string &tag, const vector<string> &values, const string blankSub);
324  //
325  int SetElementStringVec(const vector<string> &tagpath, const vector<string> &values);
332  //
345  virtual const string &GetElementString(const string &tag, const string& defaultVal = XmlNode::_emptyString);
346 
359  virtual const string &GetElementString(const vector<string> &tagpath, const string& defaultVal = XmlNode::_emptyString );
360 
373  virtual void GetElementStringVec(const vector<string> &tagpath, vector <string> &vec, const vector<string>& defaultVal = _emptyStringVec) ;
386  virtual void GetElementStringVec(const string &tag, vector <string> &vec, const vector<string>& defaultVal = _emptyStringVec);
400  virtual void GetElementStringVec(const string &tag, vector <string> &vec, const string blankSub);
412  //
413  int SetFlagDirty(const vector<string> &tagpath);
414 
420  //
421 
422  int SetFlagDirty(const string &tag);
435  //
436  int AddNode(const string& tag, ParamNode* child);
437 
452  //
453  int AddNode(const vector<string>& tagpath, ParamNode* child);
454 
469  //
470  int AddRegisteredNode(const string& tag, ParamNode* child, ParamsBase* associate);
471 
487  //
488  int AddRegisteredNode(const vector<string>& tagPath, ParamNode* child, ParamsBase* associate);
489 
500  //
501  ParamNode *GetChild(size_t index) const {return((ParamNode *) XmlNode::GetChild(index));}
502 
510  //
511  ParamNode *GetNode(const vector<string> &tagpath);
512 
520  //
521  ParamNode *GetNode(const string &tag) const {return((ParamNode *) XmlNode::GetChild(tag));}
528  //
529  int ReplaceNode(const vector<string> &tagpath, ParamNode* newNode);
530 
537  //
538  int ReplaceNode(const string &tag, ParamNode* newNode);
539 
544  //
545  int DeleteNode(const string &tag);
546 
552  //
553  int DeleteNode(const vector<string> &tagpath);
570  //
571  int RegisterDirtyFlag(const string &tag, ParamNode::DirtyFlag *df);
572 
591  //
592  int RegisterDirtyFlag(const vector<string> &tagpath, ParamNode::DirtyFlag *df);
593 
606  //
607  int UnRegisterDirtyFlag(
608  const vector<string> &tagpath, const ParamNode::DirtyFlag *df
609  );
610 
623  //
624  int UnRegisterDirtyFlag(
625  const string &tag, const ParamNode::DirtyFlag *df
626  );
627 
637  //
638  void SetParamsBase(ParamsBase* pBase) {_paramsBase = pBase;}
639 
647  //
648 ParamsBase* GetParamsBase() {return _paramsBase;}
649 
650 static const string _paramsBaseAttr;
651 static const string _paramNodeAttr;
652 
653 protected:
654  map <string, vector <DirtyFlag *> > _dirtyFlags;
655  static const string _typeAttr;
656 
657 
658  vector<long> longvec;
659  vector<double>doublevec;
660 
662 };
663 
664 };
665 
666 #endif // _ParamNode_h_
#define PARAMS_API
Definition: common.h:63
vector< long > longvec
Definition: ParamNode.h:658
static const string _paramsBaseAttr
Definition: ParamNode.h:650
static const string _typeAttr
Definition: ParamNode.h:655
Nodes with state in Xml tree representation.
Definition: ParamsBase.h:57
static vector< long > _emptyLongVec
Definition: XmlNode.h:448
ParamsBase * GetParamsBase()
Definition: ParamNode.h:648
ParamsBase * _paramsBase
Definition: ParamNode.h:661
ParamNode * GetNode(const string &tag) const
Definition: ParamNode.h:521
An Xml tree.
Definition: XmlNode.h:47
static string _emptyString
Definition: XmlNode.h:451
map< string, vector< DirtyFlag * > > _dirtyFlags
Definition: ParamNode.h:654
void SetParamsBase(ParamsBase *pBase)
Definition: ParamNode.h:638
virtual XmlNode * GetChild(size_t index) const
virtual ParamNode * Construct(const string &tag, const map< string, string > &attrs, size_t numChildrenHint=0)
Definition: ParamNode.h:71
static const string _paramNodeAttr
Definition: ParamNode.h:651
static vector< double > _emptyDoubleVec
Definition: XmlNode.h:449
vector< double > doublevec
Definition: ParamNode.h:659
An Xml tree.
Definition: ParamNode.h:30
ParamNode * GetChild(size_t index) const
Definition: ParamNode.h:501