oasys::InitSequencer Class Reference

#include <InitSequencer.h>

Inheritance diagram for oasys::InitSequencer:

oasys::Logger List of all members.

Detailed Description

Automatically checks and sequences initialization. Note, this code assumes single threading among the InitStep objects.

Suppose you have a singleton style modules A, B and C with an init method and B depends on A and C depends on A and B. C also has configuration options which need to be set. example is the namespace of the modules A, B and C.

 // A.cc
 OASYS_DECLARE_INIT_MODULE_0(example, A) { 
     A::init(); 
 }

 // B.cc - depends on A
 OASYS_DECLARE_INIT_MODULE_1(example, B, "example::A") { 
     B::init(); 
 }

 // C.cc - configuration option
 OASYS_DECLARE_INIT_CONFIG(example, C_config);

 // C.cc - depends on A, B and C_config
 OASYS_DECLARE_INIT_MODULE_2(example, C, "example::A", 
                             "example::B", "example::C_config") 
 { 
     C::init(); 
 }

Now to start component "C", something needs to call OASYS_INIT_CONFIG_DONE(example, C_config) first, and then:

 // ... some configuration setting code
 OASYS_INIT_CONFIG_DONE(example, C_config);

 // ...

 Singleton<InitSequencer> sequencer;
 sequencer->start("example::C");

Definition at line 98 of file InitSequencer.h.

Public Types

typedef std::map< std::string,
InitStep * > 
StepMap
typedef std::vector< std::string > Plan

Public Member Functions

 InitSequencer ()
int start (std::string step, Plan *plan=0)
 Perform the actions needed to start the component.
void add_step (InitStep *step)
InitStepget_step (const std::string &name)
void reset ()
void print_dot ()

Private Types

typedef std::vector< std::string > ReverseDepList
typedef std::map< std::string,
ReverseDepList
ReverseDepEdges

Private Member Functions

int run_steps ()
 Run the steps.
int topo_sort ()
 Do topological sort.
void dfs (InitStep *step, ReverseDepEdges &edges)
void mark_dep (const std::string &target)
 Mark steps that are needed to start target.
void add_extra_dep (InitExtraDependency *extra_dep)
 Add this step as a dependency.
void add_extra_deps ()
 Actually add the dependencies.

Private Attributes

StepMap steps_
int dfs_time_
std::vector< InitExtraDependency * > extra_dependencies_

Friends

class InitExtraDependency


Member Typedef Documentation

typedef std::map<std::string, InitStep*> oasys::InitSequencer::StepMap

Definition at line 102 of file InitSequencer.h.

typedef std::vector<std::string> oasys::InitSequencer::Plan

Definition at line 103 of file InitSequencer.h.

typedef std::vector<std::string> oasys::InitSequencer::ReverseDepList [private]

Definition at line 139 of file InitSequencer.h.

typedef std::map<std::string, ReverseDepList> oasys::InitSequencer::ReverseDepEdges [private]

Definition at line 140 of file InitSequencer.h.


Constructor & Destructor Documentation

oasys::InitSequencer::InitSequencer (  ) 

Definition at line 23 of file InitSequencer.cc.


Member Function Documentation

int oasys::InitSequencer::start ( std::string  step,
Plan plan = 0 
)

Perform the actions needed to start the component.

Parameters:
step which step to start
plan optional plan (made by humans) which the InitSequencer will try to execute.

Definition at line 29 of file InitSequencer.cc.

References add_extra_deps(), mark_dep(), run_steps(), and topo_sort().

void oasys::InitSequencer::add_step ( InitStep step  ) 

Add a step to the initialization.

Definition at line 53 of file InitSequencer.cc.

References ASSERT, log_warn, oasys::InitStep::name(), and steps_.

InitStep * oasys::InitSequencer::get_step ( const std::string &  name  ) 

Get a InitStep* from the name

Definition at line 68 of file InitSequencer.cc.

References ASSERT, and steps_.

void oasys::InitSequencer::reset (  ) 

Reset the done state of all of the modules. NOTE: This is mostly for the testing harness. You better know what you're doing if you call this.

Definition at line 75 of file InitSequencer.cc.

References steps_.

void oasys::InitSequencer::print_dot (  ) 

Log a dot graph of the dependencies.

Definition at line 85 of file InitSequencer.cc.

References log_info, and steps_.

int oasys::InitSequencer::run_steps (  )  [private]

Run the steps.

Definition at line 107 of file InitSequencer.cc.

References ASSERT, log_debug, log_warn, and steps_.

Referenced by start().

int oasys::InitSequencer::topo_sort (  )  [private]

Do topological sort.

Definition at line 141 of file InitSequencer.cc.

References dfs(), dfs_time_, log_debug, and steps_.

Referenced by start().

void oasys::InitSequencer::dfs ( InitStep step,
ReverseDepEdges edges 
) [private]

Definition at line 188 of file InitSequencer.cc.

References dfs_time_, oasys::InitStep::name(), steps_, and oasys::InitStep::time_.

Referenced by topo_sort().

void oasys::InitSequencer::mark_dep ( const std::string &  target  )  [private]

Mark steps that are needed to start target.

Definition at line 204 of file InitSequencer.cc.

References ASSERT, log_debug, and steps_.

Referenced by start().

void oasys::InitSequencer::add_extra_dep ( InitExtraDependency extra_dep  )  [private]

Add this step as a dependency.

Definition at line 249 of file InitSequencer.cc.

References extra_dependencies_.

void oasys::InitSequencer::add_extra_deps (  )  [private]

Actually add the dependencies.

Definition at line 255 of file InitSequencer.cc.

References ASSERT, extra_dependencies_, log_debug, and steps_.

Referenced by start().


Friends And Related Function Documentation

friend class InitExtraDependency [friend]

Definition at line 99 of file InitSequencer.h.


Member Data Documentation

StepMap oasys::InitSequencer::steps_ [private]

Definition at line 142 of file InitSequencer.h.

Referenced by add_extra_deps(), add_step(), dfs(), get_step(), mark_dep(), print_dot(), reset(), run_steps(), and topo_sort().

int oasys::InitSequencer::dfs_time_ [private]

Definition at line 143 of file InitSequencer.h.

Referenced by dfs(), and topo_sort().

std::vector<InitExtraDependency*> oasys::InitSequencer::extra_dependencies_ [private]

Definition at line 145 of file InitSequencer.h.

Referenced by add_extra_dep(), and add_extra_deps().


The documentation for this class was generated from the following files:
Generated on Fri Dec 22 14:48:07 2006 for DTN Reference Implementation by  doxygen 1.5.1