Shiokaze Framework
A research-oriented fluid solver for computer graphics
recursive_configurable_module.h
Go to the documentation of this file.
1 /*
2 ** recursive_configurable_module.h
3 **
4 ** This is part of Shiokaze, a research-oriented fluid solver for computer graphics.
5 ** Created by Ryoichi Ando <rand@nii.ac.jp> on Jan 12, 2018.
6 **
7 ** Permission is hereby granted, free of charge, to any person obtaining a copy of
8 ** this software and associated documentation files (the "Software"), to deal in
9 ** the Software without restriction, including without limitation the rights to use,
10 ** copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
11 ** Software, and to permit persons to whom the Software is furnished to do so,
12 ** subject to the following conditions:
13 **
14 ** The above copyright notice and this permission notice shall be included in all copies
15 ** or substantial portions of the Software.
16 **
17 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18 ** INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
19 ** PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 ** HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
21 ** CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
22 ** OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
25 //
26 #ifndef SHKZ_RECURSIVE_CONFIGURABLE_MODULE_H
27 #define SHKZ_RECURSIVE_CONFIGURABLE_MODULE_H
28 //
29 #include <shiokaze/core/module.h>
31 #include <vector>
32 #include <cassert>
33 //
39 #define DEFINE_MODULE(CLASS_T,LNG_NAME,ARG_NAME,DESCRIPTION) \
40  DEFINE_QUICK_ALLOC_MODULE(CLASS_T,ARG_NAME,DESCRIPTION) \
41  LONG_NAME(LNG_NAME) \
42  static std::unique_ptr<CLASS_T> quick_load_module( configuration &config, std::string name ) { \
43  auto result = unique_alloc_module<CLASS_T>(config,ARG_NAME,name,DESCRIPTION); \
44  result->recursive_load(config); \
45  return result; \
46  }
50 public:
57  virtual void recursive_load ( configuration &config ) override {
58  configuration::auto_group group(config,*this);
60  }
67  virtual void recursive_configure ( configuration &config ) override {
68  configuration::auto_group group(config,*this);
70  }
71 };
76 template <class T> class recursive_configurable_driver : public configurable, public messageable {
77 public:
86  recursive_configurable_driver ( std::string name, std::string argname="" ) : m_name(name), m_argname(argname) {}
95  recursive_configurable_driver ( recursive_configurable *parent, std::string name ) : m_name(name) {
96  assert(parent);
97  parent->add_child(this);
98  }
107  void set_name( std::string long_name, std::string argname="" ) {
108  m_long_name = long_name;
109  if( argname.size()) m_argname = argname;
110  }
117  void set_argument_name( std::string argname ) {
118  m_argname = argname;
119  }
128  void set_environment( std::string name, const void *value ) {
129  m_environment[name] = value;
130  }
137  virtual void load ( configuration &config ) override {
138  m_object = T::quick_alloc_module(config,m_name);
139  if( m_long_name.size()) m_object->set_name(m_long_name);
140  if( m_argname.size()) m_object->set_argument_name(m_argname);
141  m_object->recursive_load(config);
142  }
149  virtual void configure ( configuration &config ) override {
150  m_object->recursive_configure(config);
151  }
158  virtual void initialize( const configurable::environment_map &environment ) override {
159  configurable::environment_map merged_environment(m_environment);
160  merged_environment.insert(environment.begin(),environment.end());
161  m_object->recursive_initialize(merged_environment);
162  }
169  T* operator->() { return get(); }
176  const T* operator->() const { return get(); }
183  T* get() { return m_object.get(); }
190  const T* get() const { return m_object.get(); }
191  //
192 private:
193  //
194  std::string m_name, m_long_name, m_argname;
195  std::unique_ptr<T> m_object;
196  configurable::environment_map m_environment;
197  //
199  recursive_configurable_driver& operator=( const recursive_configurable_driver & ) = delete;
200 };
201 //
203 //
204 #endif
recursive_configurable_driver::load
virtual void load(configuration &config) override
Do loading.
Definition: recursive_configurable_module.h:137
recursive_configurable_driver::set_environment
void set_environment(std::string name, const void *value)
Set the pointer to an environmental value associated with an input name.
Definition: recursive_configurable_module.h:128
recursive_configurable_driver::recursive_configurable_driver
recursive_configurable_driver(recursive_configurable *parent, std::string name)
Constructor for recursive_configurable_driver.
Definition: recursive_configurable_module.h:95
recursive_configurable_driver::get
T * get()
Get the raw pointer.
Definition: recursive_configurable_module.h:183
module.h
recursive_configurable_driver
Class that encapsulates recursive_configurable class.
Definition: recursive_configurable_module.h:76
configurable
Class for managing the workflow of load - configure - initialize.
Definition: configurable.h:40
recursive_configurable_driver::configure
virtual void configure(configuration &config) override
Do configure.
Definition: recursive_configurable_module.h:149
recursive_configurable_driver::operator->
T * operator->()
Get the raw pointer.
Definition: recursive_configurable_module.h:169
recursive_configurable::recursive_load
virtual void recursive_load(configuration &config)
Load the program itself and relay the same to its children. Used to load files and libraries into mem...
Definition: configurable.h:139
SHKZ_BEGIN_NAMESPACE
#define SHKZ_BEGIN_NAMESPACE
Name space beggining definition for shiokaze.
Definition: common.h:39
recursive_configurable_driver::initialize
virtual void initialize(const configurable::environment_map &environment) override
Initialize with an environmental map.
Definition: recursive_configurable_module.h:158
recursive_configurable_driver::get
const T * get() const
Get the raw pointer.
Definition: recursive_configurable_module.h:190
recursive_configurable_driver::set_name
void set_name(std::string long_name, std::string argname="")
Set name.
Definition: recursive_configurable_module.h:107
recursive_configurable_module::recursive_configure
virtual void recursive_configure(configuration &config) override
Recursively call configure.
Definition: recursive_configurable_module.h:67
module
Module class.
Definition: module.h:49
recursive_configurable
Extended configurable class that holds multiple children of configurable.
Definition: configurable.h:126
configuration::auto_group
Class that automates the push and pop groups.
Definition: configuration.h:107
recursive_configurable::recursive_configure
virtual void recursive_configure(configuration &config)
Configure the program itself and relay the same to its children. Used to load and set parameters.
Definition: configurable.h:152
configurable::environment_map
std::map< std::string, const void * > environment_map
Type for environment_map.
Definition: configurable.h:46
configurable.h
recursive_configurable_module::recursive_load
virtual void recursive_load(configuration &config) override
Start recursively load configurables.
Definition: recursive_configurable_module.h:57
configuration
Class that controls the settings of the program.
Definition: configuration.h:39
messageable
Message class.
Definition: messageable.h:36
SHKZ_END_NAMESPACE
#define SHKZ_END_NAMESPACE
Name space end definition for shiokaze.
Definition: common.h:44
recursive_configurable_driver::set_argument_name
void set_argument_name(std::string argname)
Set argument name.
Definition: recursive_configurable_module.h:117
recursive_configurable_driver::recursive_configurable_driver
recursive_configurable_driver(std::string name, std::string argname="")
Constructor for recursive_configurable_driver.
Definition: recursive_configurable_module.h:86
recursive_configurable::add_child
virtual void add_child(configurable *child)
Add a child instance.
Definition: configurable.h:191
recursive_configurable_module
recursive_configurable class that also inherits module.
Definition: recursive_configurable_module.h:49
recursive_configurable_driver::operator->
const T * operator->() const
Get the const raw pointer.
Definition: recursive_configurable_module.h:176