SNAP Library 2.3, User Reference  2014-06-16 11:58:46
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
pp.h
Go to the documentation of this file.
1 // Property-Tag
3 typedef enum {
5 
6 class TPpTag{
7 public:
8  static TStr GetStr(const int& Tag);
9  static TPpTagVal GetTag(const TStr& Str);
10  static TPpTagVal LoadTxt(TILx& Lx){
11  return GetTag(Lx.GetIdStr());}
12  static void SaveTxt(TOLx& Lx, const TInt& Tag){SaveTxt(Lx, int(Tag));}
13  static void SaveTxt(TOLx& Lx, const int& Tag){
14  Lx.PutIdStr(GetStr(Tag));}
15 };
16 
18 // Property-Value
19 class TPpVal{
20 private:
23 public:
25  TPpVal(const TPpVal& PpVal): Tag(PpVal.Tag), Bool(PpVal.Bool),
26  Int(PpVal.Int), Flt(PpVal.Flt), Str(PpVal.Str), ValV(PpVal.ValV){}
27  TPpVal(const bool& b): Tag(ptBool), Bool(b){}
28  TPpVal(const TBool& b): Tag(ptBool), Bool(b){}
29  TPpVal(const int& _Int): Tag(ptInt), Int(_Int){}
30  TPpVal(const TInt& _Int): Tag(ptInt), Int(_Int){}
31  TPpVal(const double& _Flt): Tag(ptFlt), Flt(_Flt){}
32  TPpVal(const TFlt& _Flt): Tag(ptFlt), Flt(_Flt){}
33  TPpVal(const TStr& _Str): Tag(ptStr), Str(_Str){}
34  TPpVal(const char* CStr): Tag(ptStr), Str(TStr(CStr)){}
35  TPpVal(const TVec<TPpVal>& _ValV): Tag(ptValV), ValV(_ValV){}
36  TPpVal(TSIn& SIn):
37  Tag(SIn), Bool(SIn), Int(SIn), Flt(SIn), Str(SIn), ValV(SIn){}
38  void Save(TSOut& SOut){
39  Tag.Save(SOut); Bool.Save(SOut); Int.Save(SOut);
40  Flt.Save(SOut); Str.Save(SOut); ValV.Save(SOut);}
41 
42  TPpVal& operator=(const TPpVal& PpVal){
43  Tag=PpVal.Tag; Bool=PpVal.Bool; Int=PpVal.Int;
44  Flt=PpVal.Flt; Str=PpVal.Str; ValV=PpVal.ValV; return *this;}
45  bool operator==(const TPpVal& PpVal) const;
46  bool operator<(const TPpVal& PpVal) const {
47  if ((Tag==PpVal.Tag)&&(int(Tag)==ptInt)){return Int<PpVal.Int;}
48  else if ((Tag==PpVal.Tag)&&(int(Tag)==ptFlt)){return Flt<PpVal.Flt;}
49  else {Fail; return false;}}
50 
51  int GetTag() const {return (int)Tag;}
52  TBool GetBool() const {IAssert(int(Tag)==ptBool); return Bool;}
53  TInt GetInt() const {IAssert(int(Tag)==ptInt); return Int;}
54  TFlt GetFlt() const {IAssert(int(Tag)==ptFlt); return Flt;}
55  TStr GetStr() const {IAssert(int(Tag)==ptStr); return Str;}
56  TVec<TPpVal> GetValV() const {IAssert(int(Tag)==ptValV); return ValV;}
57 
58  TStr GetValStr(const bool& DoAddTag=false) const;
59  static TPpVal LoadTxt(TILx& Lx);
60  void SaveTxt(TOLx& Lx) const;
61 };
63 
65 // Property
66 class TPp;
67 typedef TPt<TPp> PPp;
68 typedef TVec<PPp> TPpV;
69 
70 class TPp{
71 private:
73 private:
74  static TStr PpNm;
75 private:
82  void IAssertSubPp() const {IAssert((int(Tag)==ptSel)||(int(Tag)==ptSet));}
83  int GetPpN(const TStr& IdNm) const;
84  void GetChA(const int& Lev, const bool& Brief, TChA& ChA) const;
85 public:
86  TPp():
87  IdNm(), UcIdNm(), DescNm(),
88  Tag(ptUndef), ValVTag(),
89  Val(), DfVal(), MnVal(), MxVal(),
90  CcValV(), PpV(){}
91  TPp(const TPp& Pp):
92  IdNm(Pp.IdNm), UcIdNm(Pp.IdNm.GetUc()), DescNm(Pp.DescNm),
93  Tag(Pp.Tag), ValVTag(Pp.ValVTag),
94  Val(Pp.Val), DfVal(Pp.DfVal), MnVal(Pp.MnVal), MxVal(Pp.MxVal),
95  CcValV(Pp.CcValV), PpV(Pp.PpV){}
96  TPp(const TStr& _IdNm, const TStr& _DescNm,
97  const TPpTagVal& _Tag=ptUndef, const TPpTagVal& _ValVTag=ptUndef):
98  IdNm(_IdNm), UcIdNm(_IdNm.GetUc()), DescNm(_DescNm),
99  Tag(_Tag), ValVTag(_ValVTag),
100  Val(), DfVal(), MnVal(), MxVal(),
101  CcValV(), PpV(){IAssert(int(ValVTag)!=ptValV);}
102  TPp(TSIn& SIn):
103  IdNm(SIn), UcIdNm(SIn), DescNm(SIn),
104  Tag(SIn), ValVTag(SIn),
105  Val(SIn), DfVal(SIn), MnVal(SIn), MxVal(SIn),
106  CcValV(SIn), PpV(SIn){}
107  static PPp Load(TSIn& SIn){return new TPp(SIn);}
108  void Save(TSOut& SOut){
109  IdNm.Save(SOut); UcIdNm.Save(SOut); DescNm.Save(SOut);
110  Tag.Save(SOut); ValVTag.Save(SOut);
111  Val.Save(SOut); DfVal.Save(SOut); MnVal.Save(SOut); MxVal.Save(SOut);
112  CcValV.Save(SOut); PpV.Save(SOut);}
113 
114  TPp& operator=(const TPp& Pp){
115  if (this!=&Pp){
116  IdNm=Pp.IdNm; UcIdNm=Pp.UcIdNm; DescNm=Pp.DescNm;
117  Tag=Pp.Tag; ValVTag=Pp.ValVTag;
118  Val=Pp.Val; DfVal=Pp.DfVal; MnVal=Pp.MnVal; MxVal=Pp.MxVal;
119  CcValV=Pp.CcValV; PpV=Pp.PpV;}
120  return *this;}
121 
122  // basic operations
123  TStr GetIdNm() const {return IdNm;}
124  TStr GetUcIdNm() const {return UcIdNm;}
125  TStr GetDescNm() const {return DescNm;}
126  int GetTag() const {return Tag;}
127  int GetValVTag() const {return ValVTag;}
128  void PutVal(const TPpVal& _Val);
129  TPpVal GetVal() const {if (Val==TPpVal()){return DfVal;} else {return Val;}}
130 
131  // property definition
132  void PutDfVal(const TPpVal& _DfVal){PutVal(_DfVal); DfVal=Val;}
133  TPpVal GetDfVal() const {return DfVal;}
134  void PutMnMxVal(const TPpVal& _MnVal, const TPpVal& _MxVal){
135  IAssert((int(Tag)==ptInt)||(int(Tag)==ptFlt));
136  IAssert((Tag==_MnVal.GetTag())&&(Tag==_MxVal.GetTag()));
137  MnVal=_MnVal; MxVal=_MxVal;}
138  TPpVal GetMnVal() const {IAssert((int(Tag)==ptInt)||(int(Tag)==ptFlt)); return MnVal;}
139  TPpVal GetMxVal() const {IAssert((int(Tag)==ptInt)||(int(Tag)==ptFlt)); return MxVal;}
140  void AddCcVal(const TPpVal& _Val){
141  IAssert((int(Tag)==ptStr)||(int(Tag)==_Val.GetTag()));
142  IAssert(CcValV.SearchForw(_Val)==-1); CcValV.Add(_Val);}
143  void PutCcValV(const TPpValV& CcValV){
144  for (int CcValN=0; CcValN<CcValV.Len(); CcValN++){AddCcVal(CcValV[CcValN]);}}
145  int GetCcVals() const {IAssert(int(Tag)==ptStr); return CcValV.Len();}
146  TPpVal GetCcVal(const int& CcValN) const {
147  IAssert(int(Tag)==ptStr); return CcValV[CcValN];}
148 
149  // property put/get
150  bool IsPp(const TStr& IdNm) const {IAssertSubPp(); return GetPpN(IdNm)!=-1;}
151  bool IsPp(const TStr& IdNm, PPp& Pp) const {
152  IAssertSubPp(); int PpN=GetPpN(IdNm);
153  if (PpN==-1){return false;} else {Pp=GetPp(PpN); return true;}}
154  int GetPps() const {IAssertSubPp(); return PpV.Len();}
155  int AddPp(const PPp& Pp){IAssertSubPp(); return PpV.Add(Pp);}
156  void AddPpV(const TPpV& PpV){
157  for (int PpN=0; PpN<PpV.Len(); PpN++){AddPp(PpV[PpN]);}}
158  PPp GetPp(const int& PpN) const {IAssertSubPp(); return PpV[PpN];}
159  PPp GetPp(const TStr& IdPath) const;
160  PPp GetSelPp() const {
161  IAssert(int(Tag)==ptSel); return GetPp(GetVal().GetStr());}
162 
163  // add&create property shortcuts
164  int AddPpInt(const TStr& IdNm, const TStr& DescNm=TStr()){
165  PPp Pp=PPp(new TPp(IdNm, DescNm, ptInt)); return AddPp(Pp);}
166  int AddPpInt(const TStr& IdNm, const TStr& DescNm,
167  const int& MnVal, const int& MxVal, const int& DfVal){
168  PPp Pp=PPp(new TPp(IdNm, DescNm, ptInt));
169  Pp->PutMnMxVal(MnVal, MxVal); Pp->PutDfVal(DfVal); return AddPp(Pp);}
170  int AddPpFlt(const TStr& IdNm, const TStr& DescNm=TStr()){
171  PPp Pp=PPp(new TPp(IdNm, DescNm, ptFlt)); return AddPp(Pp);}
172  int AddPpFlt(const TStr& IdNm, const TStr& DescNm,
173  const double& MnVal, const double& MxVal, const double& DfVal){
174  PPp Pp=PPp(new TPp(IdNm, DescNm, ptFlt));
175  Pp->PutMnMxVal(MnVal, MxVal); Pp->PutDfVal(DfVal); return AddPp(Pp);}
176  int AddPpStr(const TStr& IdNm, const TStr& DescNm=TStr(), const TStr& DfVal=TStr()){
177  PPp Pp=PPp(new TPp(IdNm, DescNm, ptStr));
178  Pp->PutDfVal(DfVal); return AddPp(Pp);}
179  static PPp GetSetPp(const TStr& IdNm, const TStr& DescNm=TStr()){
180  return PPp(new TPp(IdNm, DescNm, ptSet));}
181 
182  // boolean property put/get shortcuts
183  void PutValBool(const bool& Val){PutVal(TPpVal(Val));}
184  TBool GetValBool() const {return GetVal().GetBool();}
185  void PutValBool(const TStr& IdPath, const bool& Val){
186  GetPp(IdPath)->PutVal(TPpVal(Val));}
187  TBool GetValBool(const TStr& IdPath) const {
188  return GetPp(IdPath)->GetVal().GetBool();}
189 
190  // integer property put/get shortcuts
191  void PutValInt(const int& Val){PutVal(TPpVal(Val));}
192  TInt GetValInt() const {return GetVal().GetInt();}
193  void PutValInt(const TStr& IdPath, const int& Val){
194  GetPp(IdPath)->PutVal(TPpVal(Val));}
195  TInt GetValInt(const TStr& IdPath) const {
196  return GetPp(IdPath)->GetVal().GetInt();}
197 
198  // float property put/get shortcuts
199  void PutValFlt(const double& Val){PutVal(TPpVal(Val));}
200  TFlt GetValFlt() const {return GetVal().GetFlt();}
201  void PutValFlt(const TStr& IdPath, const double& Val){
202  GetPp(IdPath)->PutVal(TPpVal(Val));}
203  TFlt GetValFlt(const TStr& IdPath) const {
204  return GetPp(IdPath)->GetVal().GetFlt();}
205 
206  // string property put/get shortcuts
207  void PutValStr(const TStr& Val){PutVal(TPpVal(Val));}
208  TStr GetValStr() const {return GetVal().GetStr();}
209  void PutValStr(const TStr& IdPath, const TStr& Val){
210  GetPp(IdPath)->PutVal(TPpVal(Val));}
211  TStr GetValStr(const TStr& IdPath) const {
212  return GetPp(IdPath)->GetVal().GetStr();}
213 
214  // value property vector put/get shortcuts
215  void PutValValV(const TPpValV& Val){PutVal(TPpVal(Val));}
216  TPpValV GetValValV() const {return GetVal().GetValV();}
217  void PutValValV(const TStr& IdPath, const TPpValV& Val){
218  GetPp(IdPath)->PutVal(TPpVal(Val));}
219  TPpValV GetValValV(const TStr& IdPath) const {
220  return GetPp(IdPath)->GetVal().GetValV();}
221 
222  // string
223  TStr GetStr(const bool& Brief=true) const {
224  TChA ChA; GetChA(0, Brief, ChA); return ChA;}
225 
226  // file
227  static PPp LoadTxt(const PSIn& SIn){
228  TILx Lx(SIn, TFSet()|iloCmtAlw|iloSigNum|oloCsSens); return LoadTxt(Lx);}
229  void SaveTxt(const PSOut& SOut) const {
231  static PPp LoadTxt(TILx& Lx);
232  void SaveTxt(TOLx& Lx, const int& Lev=0) const;
233 
234  friend class TPt<TPp>;
235 };
236 
237 inline PPp MkClone(const PPp& Pp){return new TPp(*Pp);}
238 
void PutValInt(const int &Val)
Definition: pp.h:191
Definition: bd.h:440
#define IAssert(Cond)
Definition: bd.h:262
int AddPpInt(const TStr &IdNm, const TStr &DescNm=TStr())
Definition: pp.h:164
TStr GetStr() const
Definition: pp.h:55
TPp()
Definition: pp.h:86
TStr GetUcIdNm() const
Definition: pp.h:124
Definition: lx.h:248
static PPp LoadTxt(const PSIn &SIn)
Definition: pp.h:227
TInt Tag
Definition: pp.h:21
void PutValStr(const TStr &IdPath, const TStr &Val)
Definition: pp.h:209
TPpVal(const TStr &_Str)
Definition: pp.h:33
TPpV PpV
Definition: pp.h:81
static PPp GetSetPp(const TStr &IdNm, const TStr &DescNm=TStr())
Definition: pp.h:179
void PutValBool(const TStr &IdPath, const bool &Val)
Definition: pp.h:185
TInt GetValInt(const TStr &IdPath) const
Definition: pp.h:195
void PutValFlt(const double &Val)
Definition: pp.h:199
int GetTag() const
Definition: pp.h:51
int GetCcVals() const
Definition: pp.h:145
void IAssertSubPp() const
Definition: pp.h:82
TStr GetStr(const bool &Brief=true) const
Definition: pp.h:223
void Save(TSOut &SOut) const
Definition: dt.h:1057
TPpVal MnVal
Definition: pp.h:79
TPp(const TPp &Pp)
Definition: pp.h:91
static TStr GetStr(const int &Tag)
Definition: pp.cpp:3
TInt Int
Definition: pp.h:22
#define Fail
Definition: bd.h:238
TPpVal(const bool &b)
Definition: pp.h:27
TPpVal GetMxVal() const
Definition: pp.h:139
Definition: pp.h:19
TPpValV GetValValV() const
Definition: pp.h:216
Definition: bits.h:119
TSizeTy Len() const
Returns the number of elements in the vector.
Definition: ds.h:535
static TPpTagVal GetTag(const TStr &Str)
Definition: pp.cpp:17
void SaveTxt(TOLx &Lx) const
Definition: pp.cpp:89
TPpVal GetVal() const
Definition: pp.h:129
Definition: pp.h:4
TPpVal GetCcVal(const int &CcValN) const
Definition: pp.h:146
Definition: pp.h:4
void Save(TSOut &SOut) const
Definition: dt.h:902
void PutValBool(const bool &Val)
Definition: pp.h:183
Definition: pp.h:4
TStr IdNm
Definition: pp.h:76
void PutValValV(const TPpValV &Val)
Definition: pp.h:215
TPp & operator=(const TPp &Pp)
Definition: pp.h:114
TPpVal GetDfVal() const
Definition: pp.h:133
TInt ValVTag
Definition: pp.h:77
TStr Str
Definition: pp.h:22
int GetPps() const
Definition: pp.h:154
TPpVal()
Definition: pp.h:24
TStr GetIdNm() const
Definition: pp.h:123
Definition: dt.h:1289
TPt< TPp > PPp
Definition: pp.h:66
Definition: fl.h:58
void Save(TSOut &SOut) const
Definition: ds.h:885
void AddPpV(const TPpV &PpV)
Definition: pp.h:156
Definition: pp.h:4
bool operator<(const TPpVal &PpVal) const
Definition: pp.h:46
static TStr PpNm
Definition: pp.h:74
TPpVal GetMnVal() const
Definition: pp.h:138
void PutValFlt(const TStr &IdPath, const double &Val)
Definition: pp.h:201
int AddPpFlt(const TStr &IdNm, const TStr &DescNm=TStr())
Definition: pp.h:170
TCRef CRef
Definition: pp.h:72
PPp GetSelPp() const
Definition: pp.h:160
int AddPpFlt(const TStr &IdNm, const TStr &DescNm, const double &MnVal, const double &MxVal, const double &DfVal)
Definition: pp.h:172
PPp MkClone(const PPp &Pp)
Definition: pp.h:237
TPpVal(const TPpVal &PpVal)
Definition: pp.h:25
Definition: lx.h:126
void Save(TSOut &SOut)
Definition: pp.h:38
int GetPpN(const TStr &IdNm) const
Definition: pp.cpp:111
int AddPp(const PPp &Pp)
Definition: pp.h:155
static PPp Load(TSIn &SIn)
Definition: pp.h:107
TStr DescNm
Definition: pp.h:76
TStr UcIdNm
Definition: pp.h:76
void GetChA(const int &Lev, const bool &Brief, TChA &ChA) const
Definition: pp.cpp:118
TBool GetValBool(const TStr &IdPath) const
Definition: pp.h:187
TVec< TPpVal > ValV
Definition: pp.h:22
void PutValValV(const TStr &IdPath, const TPpValV &Val)
Definition: pp.h:217
TInt GetInt() const
Definition: pp.h:53
TBool GetValBool() const
Definition: pp.h:184
TStr GetDescNm() const
Definition: pp.h:125
TPpVal(const TFlt &_Flt)
Definition: pp.h:32
TPp(const TStr &_IdNm, const TStr &_DescNm, const TPpTagVal &_Tag=ptUndef, const TPpTagVal &_ValVTag=ptUndef)
Definition: pp.h:96
void Save(TSOut &SOut, const bool &IsSmall=false) const
Definition: dt.h:440
static TPpVal LoadTxt(TILx &Lx)
Definition: pp.cpp:67
void Save(TSOut &SOut)
Definition: pp.h:108
Definition: lx.h:129
TPpVal Val
Definition: pp.h:78
void SaveTxt(const PSOut &SOut) const
Definition: pp.h:229
TPpValV CcValV
Definition: pp.h:80
Definition: lx.h:251
TStr GetValStr(const bool &DoAddTag=false) const
Definition: pp.cpp:46
TPpVal(const TBool &b)
Definition: pp.h:28
TStr GetValStr() const
Definition: pp.h:208
TFlt Flt
Definition: pp.h:22
TBool Bool
Definition: pp.h:22
bool operator==(const TPpVal &PpVal) const
Definition: pp.cpp:31
TFlt GetFlt() const
Definition: pp.h:54
void PutValInt(const TStr &IdPath, const int &Val)
Definition: pp.h:193
bool IsPp(const TStr &IdNm, PPp &Pp) const
Definition: pp.h:151
TPpVal(const int &_Int)
Definition: pp.h:29
void PutValStr(const TStr &Val)
Definition: pp.h:207
Definition: fl.h:128
TPpVal DfVal
Definition: pp.h:78
TPpVal & operator=(const TPpVal &PpVal)
Definition: pp.h:42
TStr GetValStr(const TStr &IdPath) const
Definition: pp.h:211
TInt Tag
Definition: pp.h:77
Definition: dt.h:1041
void PutCcValV(const TPpValV &CcValV)
Definition: pp.h:143
Definition: pp.h:4
static void SaveTxt(TOLx &Lx, const TInt &Tag)
Definition: pp.h:12
TInt GetValInt() const
Definition: pp.h:192
TPpVal(const char *CStr)
Definition: pp.h:34
void AddCcVal(const TPpVal &_Val)
Definition: pp.h:140
Definition: dt.h:201
TPpVal(const TVec< TPpVal > &_ValV)
Definition: pp.h:35
Definition: pp.h:70
TPpVal(TSIn &SIn)
Definition: pp.h:36
TStr GetIdStr(const TStr &IdStr=TStr())
Definition: lx.h:185
Definition: pp.h:6
TPpTagVal
Definition: pp.h:3
int AddPpInt(const TStr &IdNm, const TStr &DescNm, const int &MnVal, const int &MxVal, const int &DfVal)
Definition: pp.h:166
Definition: dt.h:412
TBool GetBool() const
Definition: pp.h:52
Definition: pp.h:4
TPp(TSIn &SIn)
Definition: pp.h:102
int GetTag() const
Definition: pp.h:126
TFlt GetValFlt(const TStr &IdPath) const
Definition: pp.h:203
Definition: lx.h:249
TPpValV GetValValV(const TStr &IdPath) const
Definition: pp.h:219
TSizeTy SearchForw(const TVal &Val, const TSizeTy &BValN=0) const
Returns the position of an element with value Val.
Definition: ds.h:1440
int AddPpStr(const TStr &IdNm, const TStr &DescNm=TStr(), const TStr &DfVal=TStr())
Definition: pp.h:176
void PutMnMxVal(const TPpVal &_MnVal, const TPpVal &_MxVal)
Definition: pp.h:134
void PutDfVal(const TPpVal &_DfVal)
Definition: pp.h:132
Definition: bd.h:196
TFlt GetValFlt() const
Definition: pp.h:200
Definition: lx.h:248
static void SaveTxt(TOLx &Lx, const int &Tag)
Definition: pp.h:13
TVec< TPpVal > TPpValV
Definition: pp.h:62
TPpVal MxVal
Definition: pp.h:79
Definition: lx.h:248
Definition: pp.h:4
TPpVal(const double &_Flt)
Definition: pp.h:31
void PutVal(const TPpVal &_Val)
Definition: pp.cpp:130
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
Definition: ds.h:559
Definition: dt.h:881
PPp GetPp(const int &PpN) const
Definition: pp.h:158
TVec< TPpVal > GetValV() const
Definition: pp.h:56
Definition: pp.h:4
static TPpTagVal LoadTxt(TILx &Lx)
Definition: pp.h:10
void Save(TSOut &SOut) const
Definition: dt.h:1305
TVec< PPp > TPpV
Definition: pp.h:68
int GetValVTag() const
Definition: pp.h:127
Definition: lx.h:126
bool IsPp(const TStr &IdNm) const
Definition: pp.h:150
void PutIdStr(const TStr &Str, const bool &CheckIdStr=true)
Definition: lx.h:286
TPpVal(const TInt &_Int)
Definition: pp.h:30