yasmine
state_impl.hpp
Go to the documentation of this file.
1 // //
3 // This file is part of the Seadex yasmine ecosystem (http://yasmine.seadex.de). //
4 // Copyright (C) 2016-2017 Seadex GmbH //
5 // //
6 // Licensing information is available in the folder "license" which is part of this distribution. //
7 // The same information is available on the www @ http://yasmine.seadex.de/Licenses.html. //
8 // //
10 
11 
12 #ifndef STATE_IMPL_3DE89F57_84D8_41A8_98D2_67E95A9D1C27
13 #define STATE_IMPL_3DE89F57_84D8_41A8_98D2_67E95A9D1C27
14 
15 
16 #include "state.hpp"
17 #include "vertex_impl.hpp"
18 #include "behavior_fwd.hpp"
19 #include "event_fwd.hpp"
20 #include "optimization.hpp"
21 
22 
23 namespace sxy
24 {
25 
26 
27 class state_impl:
28  public virtual state, public vertex_impl
29 {
30 public:
31  explicit state_impl( const std::string& _name );
32  virtual ~state_impl() SX_NOEXCEPT SX_OVERRIDE;
33  SX_NO_COPY(state_impl)
34  virtual const state_machine_element * get_parent() const SX_OVERRIDE;
35  virtual void set_parent_region( region* const _parent_region ) SX_OVERRIDE;
36  virtual region * get_parent_region() const SX_OVERRIDE;
37  virtual size_t get_parent_region_index() const SX_OVERRIDE;
38  virtual region * get_region( const std::string& _region_name ) const SX_OVERRIDE;
39  virtual vertex * get_pseudostate( const std::string& _name_of_pseudostate ) const SX_OVERRIDE;
40  virtual raw_composite_states get_ancestors( composite_state* const _final_ancestor,
41  bool _include_final_ancestor = true ) const SX_OVERRIDE;
42  virtual raw_regions get_ancestors_as_regions() const SX_OVERRIDE;
43  virtual std::size_t get_nesting_level() const SX_OVERRIDE;
44  virtual void set_was_active() SX_OVERRIDE;
45  virtual bool was_active() const SX_OVERRIDE;
46  virtual void set_active() SX_OVERRIDE;
47  virtual void set_inactive() SX_OVERRIDE;
48  virtual bool is_active() const SX_OVERRIDE;
49  virtual bool is_complete() const SX_OVERRIDE;
50  virtual void execute_do_behavior( const event& _event, async_event_handler* const _async_event_handler,
51  event_collector& _event_collector ) const SX_OVERRIDE;
52  virtual void execute_enter_behavior( const event& _event, event_collector& _event_collector ) const SX_OVERRIDE;
53  virtual void execute_exit_behavior( const event& _event, event_collector& _event_collector ) const SX_OVERRIDE;
54  virtual void enter_state( const event& _event, event_collector& _event_collector ) SX_OVERRIDE;
55  virtual void exit_state( const event& _event, event_collector& _event_collector ) SX_OVERRIDE;
56  virtual bool has_error_event() const SX_OVERRIDE;
57  virtual event_sptr get_error_event() const SX_OVERRIDE
58  // HACK clang
59  // Implementation has to be here to avoid linker error under clang.
60  {
61  return( event_sptr() );
62  }
63 
64 
65 private:
66  void collect_ancestors( raw_composite_states& _ancestors, composite_state* const _final_ancestor ) const;
67  void collect_ancestors_as_regions( raw_regions& _ancestors_as_regions ) const;
68 
69  bool was_active_;
70  bool is_active_;
71  region* parent_;
72 
73 #ifdef Y_OPTIMIZE_4_SPEED
74  mutable raw_composite_states ancestors_;
75  mutable raw_regions ancestors_as_regions_;
76 #endif
77 };
78 
79 
80 }
81 
82 
83 #endif
Definition: event_collector.hpp:25
Definition: state.hpp:33
Definition: state_machine_element.hpp:26
std::vector< composite_state *> raw_composite_states
Definition: composite_state_fwd.hpp:27
virtual void set_parent_region(region *const _parent_region) SX_OVERRIDE
Definition: state_impl.cpp:62
virtual raw_regions get_ancestors_as_regions() const SX_OVERRIDE
Definition: state_impl.cpp:148
virtual region * get_region(const std::string &_region_name) const SX_OVERRIDE
Definition: state_impl.cpp:88
Definition: composite_state.hpp:28
virtual ~state_impl() SX_NOEXCEPT SX_OVERRIDE
Definition: state_impl.cpp:50
virtual bool is_complete() const SX_OVERRIDE
Definition: state_impl.cpp:238
Definition: region.hpp:42
Interface of an event. An event has an ID, a name and a priority (for processing by the async state m...
Definition: event.hpp:28
virtual void enter_state(const event &_event, event_collector &_event_collector) SX_OVERRIDE
Definition: state_impl.cpp:275
virtual void execute_enter_behavior(const event &_event, event_collector &_event_collector) const SX_OVERRIDE
Definition: state_impl.cpp:253
virtual void execute_exit_behavior(const event &_event, event_collector &_event_collector) const SX_OVERRIDE
Definition: state_impl.cpp:264
virtual void execute_do_behavior(const event &_event, async_event_handler *const _async_event_handler, event_collector &_event_collector) const SX_OVERRIDE
Definition: state_impl.cpp:244
Definition: async_event_handler.hpp:22
Definition: adapter_cpp11.hpp:21
virtual vertex * get_pseudostate(const std::string &_name_of_pseudostate) const SX_OVERRIDE
Definition: state_impl.cpp:95
virtual region * get_parent_region() const SX_OVERRIDE
Definition: state_impl.cpp:68
virtual bool has_error_event() const SX_OVERRIDE
Definition: state_impl.cpp:290
virtual bool is_active() const SX_OVERRIDE
Definition: state_impl.cpp:221
std::vector< region *> raw_regions
Definition: region_fwd.hpp:29
virtual raw_composite_states get_ancestors(composite_state *const _final_ancestor, bool _include_final_ancestor=true) const SX_OVERRIDE
Definition: state_impl.cpp:103
Definition: vertex.hpp:36
virtual event_sptr get_error_event() const SX_OVERRIDE
Definition: state_impl.hpp:57
virtual bool was_active() const SX_OVERRIDE
Definition: state_impl.cpp:179
virtual void set_inactive() SX_OVERRIDE
Definition: state_impl.cpp:208
sxe::shared_ptr< event > event_sptr
Definition: event_fwd.hpp:25
virtual void set_was_active() SX_OVERRIDE
Definition: state_impl.cpp:173
virtual void set_active() SX_OVERRIDE
Definition: state_impl.cpp:185
Definition: vertex_impl.hpp:26
Definition: state_impl.hpp:27
virtual std::size_t get_nesting_level() const SX_OVERRIDE
Definition: state_impl.cpp:164
state_impl(const std::string &_name)
Definition: state_impl.cpp:33
virtual const state_machine_element * get_parent() const SX_OVERRIDE
Definition: state_impl.cpp:56
virtual void exit_state(const event &_event, event_collector &_event_collector) SX_OVERRIDE
Definition: state_impl.cpp:283
virtual size_t get_parent_region_index() const SX_OVERRIDE
Definition: state_impl.cpp:74