| 1510 | }; |
| 1511 | |
| 1512 | class Dispatch_State |
| 1513 | { |
| 1514 | public: |
| 1515 | explicit Dispatch_State(Dispatch_Engine &t_engine) |
| 1516 | : m_engine(t_engine), |
| 1517 | m_stack_holder(t_engine.get_stack_holder()), |
| 1518 | m_conversions(t_engine.conversions(), t_engine.conversions().conversion_saves()) |
| 1519 | { |
| 1520 | } |
| 1521 | |
| 1522 | Dispatch_Engine *operator->() const { |
| 1523 | return &m_engine.get(); |
| 1524 | } |
| 1525 | |
| 1526 | Dispatch_Engine &operator*() const { |
| 1527 | return m_engine.get(); |
| 1528 | } |
| 1529 | |
| 1530 | Stack_Holder &stack_holder() const { |
| 1531 | return m_stack_holder.get(); |
| 1532 | } |
| 1533 | |
| 1534 | const Type_Conversions_State &conversions() const { |
| 1535 | return m_conversions; |
| 1536 | } |
| 1537 | |
| 1538 | Type_Conversions::Conversion_Saves &conversion_saves() const { |
| 1539 | return m_conversions.saves(); |
| 1540 | } |
| 1541 | |
| 1542 | Boxed_Value &add_get_object(const std::string &t_name, Boxed_Value obj) const { |
| 1543 | return m_engine.get().add_get_object(t_name, std::move(obj), m_stack_holder.get()); |
| 1544 | } |
| 1545 | |
| 1546 | void add_object(const std::string &t_name, Boxed_Value obj) const { |
| 1547 | return m_engine.get().add_object(t_name, std::move(obj), m_stack_holder.get()); |
| 1548 | } |
| 1549 | |
| 1550 | Boxed_Value get_object(const std::string &t_name, std::atomic_uint_fast32_t &t_loc) const { |
| 1551 | return m_engine.get().get_object(t_name, t_loc, m_stack_holder.get()); |
| 1552 | } |
| 1553 | |
| 1554 | private: |
| 1555 | std::reference_wrapper<Dispatch_Engine> m_engine; |
| 1556 | std::reference_wrapper<Stack_Holder> m_stack_holder; |
| 1557 | Type_Conversions_State m_conversions; |
| 1558 | }; |
| 1559 | } |
| 1560 | } |
| 1561 | |