8#ifndef GALAXY_STATE_STATEMACHINE_HPP_
9#define GALAXY_STATE_STATEMACHINE_HPP_
11#include <ankerl/unordered_dense.h>
13#include "galaxy/meta/Memory.hpp"
30 using Stack = meta::stack<State*, meta::vector<State*>>;
52 template<std::derived_from<State> Type,
typename... Args>
53 void add(
const std::string& key, Args&&... args);
60 void push(
const std::string& key);
81 ankerl::unordered_dense::map<std::string, std::unique_ptr<State>>
m_states;
84 template<std::derived_from<State> Type,
typename... Args>
87 m_states[key] = std::make_unique<Type>(std::forward<Args>(args)...);
void push(const std::string &key)
Push a new state onto the stack.
~StateMachine()
Destructor.
void pop()
Pop the topmost state off the top of the stack.
Stack m_stack
State stack.
void update()
Update topmost state.
meta::stack< State *, meta::vector< State * > > Stack
Ensure stack is using a vector over slower data structures.
StateMachine()
Constructor.
ankerl::unordered_dense::map< std::string, std::unique_ptr< State > > m_states
State cache.
void add(const std::string &key, Args &&... args)
Add a new state.