12 #include "exceptions.hpp" 13 #include "singleton.hpp" 15 #ifdef USE_ABSTRACT_FUNCTIONS 16 #define D_ABSTRACT(X) = 0 18 #define D_ABSTRACT(X) { throw(E_real_virtual_function(" X ",class_Name()));} 21 const char*
const TRUE_TYPE_NAME =
"true_type_name";
35 typedef STD_TR1::shared_ptr< Observer > ref;
39 void notify(){ notified_();};
42 virtual void notified_() = 0;
81 typedef STD_TR1::shared_ptr< loadable_Object > ref;
82 typedef STD_TR1::shared_ptr< const loadable_Object > const_ref;
84 typedef std::pair<std::string, ref> ref_pair;
86 typedef STD_TR1::weak_ptr< loadable_Object > link;
87 typedef STD_TR1::weak_ptr< const loadable_Object > const_link;
90 void write_xml(std::ostream&)
const;
100 bool get_param(
const std::string& s,
double& v)
const;
101 bool get_param(
const std::string& s,
int& v)
const;
102 bool get_param(
const std::string& s, std::string& v)
const;
105 double get_double_param(
const std::string& s)
const;
106 int get_int_param(
const std::string& s)
const;
107 std::string get_string_param(
const std::string& s)
const;
110 void set_param(
const std::string& s,
double v);
111 void set_param(
const std::string& s,
int v);
112 void set_param(
const std::string& s, std::string v);
114 bool get_bool(
const std::string& s,
const bool def)
const;
117 void acquire_params(
const const_ref&);
122 component_list.push_back(ref_pair(s,o));};
128 bool get_component(
const std::string& s, const_ref&)
const;
129 bool get_component(
const std::string& s, ref&);
132 const_ref get_component(
const std::string& s)
const;
133 ref get_component(
const std::string& s);
142 template <
typename T>
143 STD_TR1::shared_ptr<T> get_dynamic_component(
const std::string& s);
145 template <
typename T>
146 STD_TR1::shared_ptr<const T> get_dynamic_component(
const std::string& s)
const;
159 const_ref get_ref()
const {
return const_ref(my_reference);};
169 template <
typename T>
170 STD_TR1::shared_ptr<T> get_dynamic_ref();
171 template <
typename T>
172 STD_TR1::shared_ptr<const T> get_dynamic_ref()
const;
182 void initialize(ref me);
189 void set_correct_ref(ref me);
199 void register_Observer( Observer::ref );
200 void unregister_Observer( Observer::ref );
204 return params.size();};
211 STD_TR1::shared_ptr<const T> clone(
const STD_TR1::shared_ptr<const T> r) {
213 STD_TR1::shared_ptr<T> result =
214 STD_TR1::dynamic_pointer_cast<T>(o);
220 STD_TR1::shared_ptr<T> clone( STD_TR1::shared_ptr<T> r) {
222 STD_TR1::shared_ptr<T> result =
223 STD_TR1::dynamic_pointer_cast<T>(o);
227 virtual size_t verbosity() {
return 10;}
230 mutable bool written;
237 enum {a_str, an_int, a_double} status;
241 std::map<std::string, paramstruct> params;
243 std::set< Observer::ref > observers;
245 std::map<std::string, ref > components;
246 std::list< ref_pair > component_list;
248 std::map<std::string, link> links;
250 void notify_Observers();
252 void finnish_writing()
const;
254 typedef std::map< const_ref, ref> ref_map;
256 ref clone(ref_map& )
const;
258 void clone_component( ref,
const std::string&, ref, ref_map& )
const;
259 void clone_link( ref,
const std::string&, ref, ref_map& )
const;
261 void initialize_from_clone( ref , const_ref );
263 virtual const char* name()
const {
return "root";};
264 virtual void init() D_ABSTRACT(init);
265 virtual void init_from_clone( const_ref );
268 STD_TR1::weak_ptr<loadable_Object> my_reference;
270 void write_xml_(std::ostream& os,
int indent)
const;
282 const char* name()
const {
return "Parameters";};
286 template <
typename T>
289 static T exec(
const std::string& name){
297 static T exec(
const std::string& name){
298 std::cerr <<
"Warning: " << name <<
" not registered. Reverting to Parameter\n";
299 T t(
new typename T::element_type);
300 t->set_param(TRUE_TYPE_NAME,name);
305 #include "input_file.tpp" 309 STD_TR1::shared_ptr<Parameters>
312 effective_manage_Loadable;
Definition: exceptions.hpp:179
void require_initialized() const
throws if is_initialized returns false
Definition: input_file.hpp:195
Definition: exceptions.hpp:133
Definition: input_file.hpp:295
Simple collection of Parameters.
Definition: input_file.hpp:277
ref get_ref()
Get a shared_ptr to this object.
Definition: input_file.hpp:158
void insert_object(const std::string &s, ref o)
insert an object as parameter
Definition: input_file.hpp:120
An abstract base class supporting xml_file_reading of input parameters.
Definition: input_file.hpp:79
Definition: input_file.hpp:287
Abstract observer helper class.
Definition: input_file.hpp:32
const char * class_Name() const
Calls virtual const char* name(), which must be redefined for derived classes.
Definition: input_file.hpp:97
size_t nparams() const
returns total number of parameters
Definition: input_file.hpp:203
bool is_initialized() const
returns whether the object has been correctly initialized
Definition: input_file.hpp:192
void link_object(const std::string &s, ref o)
insert a link to an object as parameter, the refered object must be defined elsewhere ...
Definition: input_file.hpp:125
loadable_Object()
Empty construction, objects are initialized by init routine.
Definition: input_file.hpp:93