NGSolve  5.3
ngstd/flags.hpp
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