Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

colvarparse.h

Go to the documentation of this file.
00001 #ifndef COLVARPARSE_H
00002 #define COLVARPARSE_H
00003 
00004 #include <cstring>
00005 #include <string>
00006 
00007 #include "colvarmodule.h"
00008 #include "colvarvalue.h"
00009 
00010 
00012 
00013 
00016 class colvarparse {
00017 
00018 protected:
00019 
00023   std::list<std::string> allowed_keywords;
00024 
00028   std::list<size_t>      data_begin_pos;
00029 
00033   std::list<size_t>      data_end_pos;
00034 
00041   bool save_delimiters;
00042 
00044   void add_keyword (char const *key);
00045 
00047   void strip_values (std::string &conf);
00048 
00049 public:
00050 
00051   inline colvarparse()
00052     : save_delimiters (true)
00053   {}
00054 
00056   enum Parse_Mode { 
00060     parse_normal, 
00064     parse_silent 
00065   };
00066 
00091 
00092 #define _get_keyval_scalar_proto_(_type_,_def_value_)           \
00093   bool get_keyval (std::string const &conf,                     \
00094                    char const *key,                             \
00095                    _type_ &value,                               \
00096                    _type_ const &def_value = _def_value_,       \
00097                    Parse_Mode const parse_mode = parse_normal)
00098 
00099     _get_keyval_scalar_proto_ (int, (int)0);
00100     _get_keyval_scalar_proto_ (size_t, (size_t)0);
00101     _get_keyval_scalar_proto_ (std::string, std::string (""));
00102     _get_keyval_scalar_proto_ (cvm::real, (cvm::real)0.0);
00103     _get_keyval_scalar_proto_ (cvm::rvector, cvm::rvector());
00104     _get_keyval_scalar_proto_ (cvm::quaternion, cvm::quaternion());
00105     _get_keyval_scalar_proto_ (colvarvalue, colvarvalue (colvarvalue::type_notset));
00106     _get_keyval_scalar_proto_ (bool, false);
00107 
00108 #define _get_keyval_vector_proto_(_type_,_def_value_)                   \
00109   bool get_keyval (std::string const &conf,                             \
00110                    char const *key,                                     \
00111                    std::vector<_type_> &values,                         \
00112                    std::vector<_type_> const &def_values =              \
00113                    std::vector<_type_> (0, static_cast<_type_>(_def_value_)),                \
00114                    Parse_Mode const parse_mode = parse_normal)
00115   
00116     _get_keyval_vector_proto_ (int, 0);
00117     _get_keyval_vector_proto_ (size_t, 0);
00118     _get_keyval_vector_proto_ (std::string, std::string (""));
00119     _get_keyval_vector_proto_ (cvm::real, 0.0);
00120     _get_keyval_vector_proto_ (cvm::rvector, cvm::rvector());
00121     _get_keyval_vector_proto_ (cvm::quaternion, cvm::quaternion());
00122     _get_keyval_vector_proto_ (colvarvalue, colvarvalue (colvarvalue::type_notset));
00123 
00124 
00128   void check_keywords (std::string &conf, char const *key);
00129 
00130 
00132   static inline std::string to_lower_cppstr (std::string const &in)
00133   {
00134     std::string out = "";
00135     for (size_t i = 0; i < in.size(); i++) {
00136       out.append (1, (char) ::tolower (in[i]) );
00137     }
00138     return out;
00139   }
00140 
00148   class read_block {
00149 
00150     std::string const   key;
00151     std::string * const data;
00152 
00153   public:
00154     inline read_block (std::string const &key_in, std::string &data_in)
00155       : key (key_in), data (&data_in)
00156     {}
00157     inline ~read_block() {}
00158     friend std::istream & operator >> (std::istream &is, read_block const &rb);
00159   };
00160 
00161 
00163   static std::string const white_space;
00164 
00173   bool key_lookup (std::string const &conf,
00174                    char const *key,
00175                    std::string &data = dummy_string,
00176                    size_t &save_pos = dummy_pos);
00177 
00179   static std::string dummy_string;
00181   static size_t dummy_pos;
00182 
00185   static std::istream & getline_nocomments (std::istream &is,
00186                                             std::string &s,
00187                                             char const delim = '\n');
00188 
00190   bool brace_check (std::string const &conf,
00191                     size_t const start_pos = 0);
00192 
00193 };
00194 
00195 
00196 #endif
00197 
00198 // Emacs
00199 // Local Variables:
00200 // mode: C++
00201 // End:

Generated on Sun Nov 22 04:07:42 2009 for NAMD by  doxygen 1.3.9.1