NGSolve
5.3
|
00001 #ifndef FILE_NGS_FLAGS 00002 #define FILE_NGS_FLAGS 00003 00004 00005 /**************************************************************************/ 00006 /* File: flags.hpp */ 00007 /* Author: Joachim Schoeberl */ 00008 /* Date: 10. Oct. 96 */ 00009 /**************************************************************************/ 00010 00011 namespace ngstd 00012 { 00013 00022 class NGS_DLL_HEADER Flags 00023 { 00025 SymbolTable<string> strflags; 00027 SymbolTable<double> numflags; 00029 SymbolTable<int> defflags; 00031 SymbolTable<shared_ptr<Array<string>>> strlistflags; 00033 SymbolTable<shared_ptr<Array<double>>> numlistflags; 00034 public: 00036 Flags (); 00038 Flags (const Flags & flags); 00040 Flags (Flags && flags); 00042 Flags (std::initializer_list<string> list); 00044 Flags (string f1, string f2 = "", string f3 = "", string f4 = "", string f5 = ""); 00046 ~Flags (); 00047 00049 void DeleteFlags (); 00050 00052 Flags & SetFlag (const char * name, const string & val); 00054 Flags & SetFlag (const char * name, double val) &; 00056 Flags & SetFlag (const char * name) &; 00057 00059 Flags & SetFlag (const string & name, const string & val); 00061 Flags & SetFlag (const string & name, double val); 00063 Flags & SetFlag (const string & name); 00065 Flags & SetFlag (const string & name, const Array<string> & val); 00067 Flags & SetFlag (const string & name, const Array<double> & val); 00068 00069 00070 Flags SetFlag (const char * name) &&; 00071 Flags SetFlag (const char * name, double val) &&; 00072 00073 00074 00076 void SaveFlags (const char * filename) const; 00078 void PrintFlags (ostream & ost) const; 00080 void LoadFlags (const char * filename); 00086 void SetCommandLineFlag (const char * st); 00088 string GetStringFlag (const string & name, const char * def) const; 00090 string GetStringFlag (const string & name, string def = "") const; 00092 double GetNumFlag (const string & name, double def) const; 00094 const double * GetNumFlagPtr (const string & name) const; 00096 double * GetNumFlagPtr (const string & name); 00098 // int GetDefineFlag (const char * name) const; 00099 bool GetDefineFlag (const string & name) const throw(); 00101 const Array<string> & GetStringListFlag (const string & name) const; 00103 const Array<double> & GetNumListFlag (const string & name) const; 00104 00105 00107 bool StringFlagDefined (const string & name) const; 00109 bool NumFlagDefined (const string & name) const; 00111 bool StringListFlagDefined (const string & name) const; 00113 bool NumListFlagDefined (const string & name) const; 00114 00116 int GetNStringFlags () const { return strflags.Size(); } 00118 int GetNNumFlags () const { return numflags.Size(); } 00120 int GetNDefineFlags () const { return defflags.Size(); } 00122 int GetNStringListFlags () const { return strlistflags.Size(); } 00124 int GetNNumListFlags () const { return numlistflags.Size(); } 00125 00127 const string & GetStringFlag (int i, string & name) const 00128 { name = strflags.GetName(i); return strflags[i]; } 00129 double GetNumFlag (int i, string & name) const 00130 { name = numflags.GetName(i); return numflags[i]; } 00131 void GetDefineFlag (int i, string & name) const 00132 { name = defflags.GetName(i); } 00133 const shared_ptr<Array<double>> GetNumListFlag (int i, string & name) const 00134 { name = numlistflags.GetName(i).c_str(); return numlistflags[i]; } 00135 const shared_ptr<Array<string>> GetStringListFlag (int i, string & name) const 00136 { name = strlistflags.GetName(i); return strlistflags[i]; } 00137 00138 friend Archive & operator & (Archive & archive, Flags & flags); 00139 }; 00140 00141 00142 00144 inline ostream & operator<< (ostream & s, const Flags & flags) 00145 { 00146 flags.PrintFlags (s); 00147 return s; 00148 } 00149 00150 extern Archive & operator & (Archive & archive, Flags & flags); 00151 } 00152 00153 00154 #endif 00155