Greens-code
A modular quantum transport code
xml_utils.hpp
1 #ifndef XML_UTILS_HPP
2 #define XML_UTILS_HPP
3 
4 #include"shared_ptr.hpp"
5 #include <vector>
6 #include <list>
7 #include <utility>
8 
9 class loadable_Object;
10 typedef STD_TR1::shared_ptr<loadable_Object> loadable_Object_ref;
11 
34 class xml_chain{
35 public:
36  xml_chain(const std::string& s, loadable_Object_ref head);
37 
38  static std::string parse_first( const std::string& );
39 
40  size_t length() { return chain_data.size();};
41  loadable_Object_ref last();
42 
43  loadable_Object_ref operator[](size_t i);
44  const std::string& name(size_t i);
45 private:
46  std::vector<std::pair<std::string, loadable_Object_ref> > chain_data;
47 
48 };
49 
51 /*
52  component_range will pass components enumerated
53  by e.g. job_0, job_1, job_2, ....
54 */
55 template <class container_type>
56 
58 public:
59 
60  typedef typename container_type::value_type container_element;
61  typedef typename container_element::element_type T;
62 
63  typedef STD_TR1::shared_ptr< container_type > return_type;
64 
65 
66  static return_type parse(const std::string&, STD_TR1::shared_ptr<loadable_Object>);
67  static return_type parse(const std::string&, STD_TR1::shared_ptr<const loadable_Object>);
68 private:
69 
71 
72  static return_type create_single(const std::string&, STD_TR1::shared_ptr<loadable_Object>);
73  static return_type create_single(const std::string&, STD_TR1::shared_ptr<const loadable_Object>);
74  static return_type create_aufzaehlung(const std::string&, STD_TR1::shared_ptr<loadable_Object>);
75  static return_type create_aufzaehlung(const std::string&, STD_TR1::shared_ptr<const loadable_Object>);
76 };
77 
79 /*
80  param_range will pass parameters (either double, int, or std::string) enumerated
81  by e.g. var_0, var_1, var_2, ...., or by var_N, var_min, var_step, ...,
82  for details see \ref Enumeration.
83  It returns a std::vector of parsed values.
84  You will not need to instantiate any object, just use the static
85  parse function, e.g.
86 
87  param_range<double>::return_type energies(param_range<double>::parse("EF",get_ref()));
88  to init a vector of energies determined by EF_0,..., EF_min,... or EF_rand_min,...
89 */
90 template <class T>
92 public:
93  typedef std::vector<T> container_type;
94  typedef STD_TR1::shared_ptr< container_type > return_type;
95 
97  static return_type parse(const std::string&,STD_TR1::shared_ptr<loadable_Object>);
98 private:
99 
100  bool check_exist(const std::string&);
101 
102  const std::string& param;
103  STD_TR1::shared_ptr<loadable_Object> my_obj;
104 
105  param_range();
106  param_range(const param_range&);
107 
108  param_range(const std::string&, STD_TR1::shared_ptr<loadable_Object>);
109 
110  return_type create_single();
111  return_type create_continuum();
112  return_type create_random();
113  return_type create_aufzaehlung();
114 
115 };
116 
117 #include "xml_utils.tpp"
118 #endif
Definition: xml_utils.hpp:34
Class to parse an Enumeration of loadable_Objects.
Definition: xml_utils.hpp:57
An abstract base class supporting xml_file_reading of input parameters.
Definition: input_file.hpp:79
Class to parse an Enumeration of parameters.
Definition: xml_utils.hpp:91