Diag-Client-Lib
Public Member Functions | Private Member Functions | Private Attributes | List of all members
utility::state::StateContext< EnumState > Class Template Reference

#include <state.h>

Public Member Functions

 StateContext ()
 
 ~StateContext ()=default
 
void AddState (EnumState state, std::unique_ptr< State< EnumState >> state_ptr)
 
auto GetActiveState () noexcept -> State< EnumState > &
 
void TransitionTo (EnumState state)
 
auto GetContext () noexcept -> StateContext *
 

Private Member Functions

void Start ()
 
void Stop ()
 
void Update (EnumState state)
 

Private Attributes

std::mutex state_lock
 
State< EnumState > * current_state_
 
std::map< EnumState, std::unique_ptr< State< EnumState > > > state_map_
 

Detailed Description

template<typename EnumState>
class utility::state::StateContext< EnumState >

Definition at line 49 of file state.h.

Constructor & Destructor Documentation

◆ StateContext()

template<typename EnumState >
utility::state::StateContext< EnumState >::StateContext ( )
inline

Definition at line 52 of file state.h.

52 : current_state_{nullptr}, state_map_{} {}
std::map< EnumState, std::unique_ptr< State< EnumState > > > state_map_
Definition: state.h:109
State< EnumState > * current_state_
Definition: state.h:107

◆ ~StateContext()

template<typename EnumState >
utility::state::StateContext< EnumState >::~StateContext ( )
default

Member Function Documentation

◆ AddState()

template<typename EnumState >
void utility::state::StateContext< EnumState >::AddState ( EnumState  state,
std::unique_ptr< State< EnumState >>  state_ptr 
)
inline

◆ GetActiveState()

template<typename EnumState >
auto utility::state::StateContext< EnumState >::GetActiveState ( ) -> State<EnumState> &
inlinenoexcept

Definition at line 63 of file state.h.

63  {
64  std::lock_guard<std::mutex> const lck{state_lock};
65  return *current_state_;
66  }

References utility::state::StateContext< EnumState >::current_state_, and utility::state::StateContext< EnumState >::state_lock.

◆ GetContext()

template<typename EnumState >
auto utility::state::StateContext< EnumState >::GetContext ( ) -> StateContext *
inlinenoexcept

Definition at line 79 of file state.h.

79 { return this; }

◆ Start()

template<typename EnumState >
void utility::state::StateContext< EnumState >::Start ( )
inlineprivate

Definition at line 83 of file state.h.

83  {
84  if (this->current_state_ != nullptr) { this->current_state_->Start(); }
85  }

References utility::state::StateContext< EnumState >::current_state_.

Referenced by utility::state::StateContext< EnumState >::TransitionTo().

Here is the caller graph for this function:

◆ Stop()

template<typename EnumState >
void utility::state::StateContext< EnumState >::Stop ( )
inlineprivate

Definition at line 88 of file state.h.

88  {
89  if (this->current_state_ != nullptr) { this->current_state_->Stop(); }
90  }

References utility::state::StateContext< EnumState >::current_state_.

Referenced by utility::state::StateContext< EnumState >::TransitionTo().

Here is the caller graph for this function:

◆ TransitionTo()

template<typename EnumState >
void utility::state::StateContext< EnumState >::TransitionTo ( EnumState  state)
inline

◆ Update()

template<typename EnumState >
void utility::state::StateContext< EnumState >::Update ( EnumState  state)
inlineprivate

Definition at line 93 of file state.h.

93  {
94  std::lock_guard<std::mutex> const lck{state_lock};
95  auto it = state_map_.find(state);
96  if (it != state_map_.end()) {
97  this->current_state_ = it->second.get();
98  } else {
99  // failure condition
100  }
101  }

References utility::state::StateContext< EnumState >::current_state_, utility::state::StateContext< EnumState >::state_lock, and utility::state::StateContext< EnumState >::state_map_.

Referenced by utility::state::StateContext< EnumState >::TransitionTo().

Here is the caller graph for this function:

Member Data Documentation

◆ current_state_

template<typename EnumState >
State<EnumState>* utility::state::StateContext< EnumState >::current_state_
private

◆ state_lock

template<typename EnumState >
std::mutex utility::state::StateContext< EnumState >::state_lock
private

◆ state_map_

template<typename EnumState >
std::map<EnumState, std::unique_ptr<State<EnumState> > > utility::state::StateContext< EnumState >::state_map_
private

The documentation for this class was generated from the following file: