NGSolve  4.9
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<char *> strflags;
00027     SymbolTable<double> numflags;
00029     SymbolTable<int> defflags;
00031     SymbolTable<Array<char*>*> strlistflags;
00033     SymbolTable<Array<double>*> numlistflags;
00034   public:
00036     Flags ();
00038     Flags (const Flags & flags);
00040     Flags (string f1, string f2 = "", string f3 = "", string f4 = "", string f5 = "");
00042     ~Flags ();
00043   
00045     void DeleteFlags ();
00047     Flags & SetFlag (const char * name, const char * val);
00049     Flags &  SetFlag (const char * name, double val);
00051     Flags &  SetFlag (const char * name);
00053     Flags &  SetFlag (const char * name, const Array<char*> & val);
00055     Flags &  SetFlag (const char * name, const Array<double> & val);
00056   
00058     void SaveFlags (const char * filename) const;
00060     void PrintFlags (ostream & ost) const;
00062     void LoadFlags (const char * filename);
00068     void SetCommandLineFlag (const char * st);
00069 
00070 
00072     const char * GetStringFlag (const char * name, const char * def) const;
00074     double GetNumFlag (const char * name, double def) const;
00076     const double * GetNumFlagPtr (const char * name) const;
00078     double * GetNumFlagPtr (const char * name);
00080     int GetDefineFlag (const char * name) const;
00081     int GetDefineFlag (const string & name) const;
00083     const Array<char*> & GetStringListFlag (const char * name) const;
00085     const Array<double> & GetNumListFlag (const char * name) const;
00086 
00087 
00089     int StringFlagDefined (const char * name) const;
00091     int NumFlagDefined (const char * name) const;
00093     int StringListFlagDefined (const char * name) const;
00095     int NumListFlagDefined (const char * name) const;
00096 
00098     int GetNStringFlags () const { return strflags.Size(); }
00100     int GetNNumFlags () const { return numflags.Size(); }
00102     int GetNDefineFlags () const { return defflags.Size(); }
00104     int GetNStringListFlags () const { return strlistflags.Size(); }
00106     int GetNNumListFlags () const { return numlistflags.Size(); }
00107 
00109     const char * GetStringFlag (int i, const char *& name) const
00110     { name = strflags.GetName(i); return strflags[i]; }
00111     double GetNumFlag (int i, const char *& name) const
00112     { name = numflags.GetName(i); return numflags[i]; }
00113     void GetDefineFlag (int i, const char *& name) const
00114     { name = defflags.GetName(i); }
00115     const Array<double> * GetNumListFlag (int i, const char *& name) const
00116     { name = numlistflags.GetName(i); return numlistflags[i]; }
00117     const Array<char*> * GetStringListFlag (int i, const char *& name) const
00118     { name = strlistflags.GetName(i); return strlistflags[i]; }
00119   };
00120 
00121 
00122 
00124   inline ostream & operator<< (ostream & s, const Flags & flags)
00125   {
00126     flags.PrintFlags (s);
00127     return s;
00128   }
00129 }
00130 
00131   
00132 #endif
00133