Cafu Engine
VarVisitorsLua.hpp
1 /*
2 Cafu Engine, http://www.cafu.de/
3 Copyright (c) Carsten Fuchs and other contributors.
4 This project is licensed under the terms of the MIT license.
5 */
6 
7 #ifndef CAFU_TYPESYS_VAR_VISITORS_LUA_HPP_INCLUDED
8 #define CAFU_TYPESYS_VAR_VISITORS_LUA_HPP_INCLUDED
9 
10 #include "Variables.hpp"
11 
12 
13 struct lua_State;
14 
15 
16 namespace cf
17 {
18  namespace TypeSys
19  {
20  /// This visitor is used to implement a "get()" function in Lua:
21  /// It pushes the value(s) of the visited variable onto the Lua stack.
23  {
24  public:
25 
26  VarVisitorGetToLuaT(lua_State* LuaState);
27 
28  unsigned int GetNumResults() const { return m_NumResults; }
29 
30  void visit(const cf::TypeSys::VarT<float>& Var);
31  void visit(const cf::TypeSys::VarT<double>& Var);
32  void visit(const cf::TypeSys::VarT<int>& Var);
33  void visit(const cf::TypeSys::VarT<unsigned int>& Var);
34  void visit(const cf::TypeSys::VarT<uint16_t>& Var);
35  void visit(const cf::TypeSys::VarT<uint8_t>& Var);
36  void visit(const cf::TypeSys::VarT<bool>& Var);
37  void visit(const cf::TypeSys::VarT<std::string>& Var);
38  void visit(const cf::TypeSys::VarT<Vector2fT>& Var);
39  void visit(const cf::TypeSys::VarT<Vector3fT>& Var);
40  void visit(const cf::TypeSys::VarT<Vector3dT>& Var);
41  void visit(const cf::TypeSys::VarT<BoundingBox3dT>& Var);
42  void visit(const cf::TypeSys::VarArrayT<uint32_t>& Var);
43  void visit(const cf::TypeSys::VarArrayT<uint16_t>& Var);
44  void visit(const cf::TypeSys::VarArrayT<uint8_t>& Var);
45  void visit(const cf::TypeSys::VarArrayT<std::string>& Var);
46 
47 
48  private:
49 
50  lua_State* m_LuaState;
51  unsigned int m_NumResults;
52  };
53 
54 
55  /// This visitor is used to implement a "set()" function in Lua:
56  /// It sets the value of the visited variable to the value(s) taken from the Lua stack.
58  {
59  public:
60 
61  VarVisitorSetFromLuaT(lua_State* LuaState);
62 
63  void visit(cf::TypeSys::VarT<float>& Var);
64  void visit(cf::TypeSys::VarT<double>& Var);
65  void visit(cf::TypeSys::VarT<int>& Var);
66  void visit(cf::TypeSys::VarT<unsigned int>& Var);
67  void visit(cf::TypeSys::VarT<uint16_t>& Var);
68  void visit(cf::TypeSys::VarT<uint8_t>& Var);
69  void visit(cf::TypeSys::VarT<bool>& Var);
70  void visit(cf::TypeSys::VarT<std::string>& Var);
71  void visit(cf::TypeSys::VarT<Vector2fT>& Var);
72  void visit(cf::TypeSys::VarT<Vector3fT>& Var);
73  void visit(cf::TypeSys::VarT<Vector3dT>& Var);
74  void visit(cf::TypeSys::VarT<BoundingBox3dT>& Var);
75  void visit(cf::TypeSys::VarArrayT<uint32_t>& Var);
76  void visit(cf::TypeSys::VarArrayT<uint16_t>& Var);
77  void visit(cf::TypeSys::VarArrayT<uint8_t>& Var);
78  void visit(cf::TypeSys::VarArrayT<std::string>& Var);
79 
80 
81  private:
82 
83  lua_State* m_LuaState;
84  };
85 
86 
87  /// This visitor is used to set `float` values in variables that are of type `float`, or composed of `float`.
89  {
90  public:
91 
92  VarVisitorSetFloatT(unsigned int Suffix, float Value);
93 
94  void visit(cf::TypeSys::VarT<float>& Var);
95  void visit(cf::TypeSys::VarT<double>& Var);
96  void visit(cf::TypeSys::VarT<int>& Var);
97  void visit(cf::TypeSys::VarT<unsigned int>& Var);
98  void visit(cf::TypeSys::VarT<uint16_t>& Var);
99  void visit(cf::TypeSys::VarT<uint8_t>& Var);
100  void visit(cf::TypeSys::VarT<bool>& Var);
101  void visit(cf::TypeSys::VarT<std::string>& Var);
102  void visit(cf::TypeSys::VarT<Vector2fT>& Var);
103  void visit(cf::TypeSys::VarT<Vector3fT>& Var);
104  void visit(cf::TypeSys::VarT<Vector3dT>& Var);
105  void visit(cf::TypeSys::VarT<BoundingBox3dT>& Var);
106  void visit(cf::TypeSys::VarArrayT<uint32_t>& Var);
107  void visit(cf::TypeSys::VarArrayT<uint16_t>& Var);
108  void visit(cf::TypeSys::VarArrayT<uint8_t>& Var);
109  void visit(cf::TypeSys::VarArrayT<std::string>& Var);
110 
111 
112  private:
113 
114  unsigned int m_Suffix;
115  float m_Value;
116  };
117 
118 
119  /// This visitor writes the value of the visited variable into the given std::ostream,
120  /// formatted as Lua code.
122  {
123  public:
124 
125  VarVisitorToLuaCodeT(std::ostream& Out);
126 
127  void visit(const cf::TypeSys::VarT<float>& Var);
128  void visit(const cf::TypeSys::VarT<double>& Var);
129  void visit(const cf::TypeSys::VarT<int>& Var);
130  void visit(const cf::TypeSys::VarT<unsigned int>& Var);
131  void visit(const cf::TypeSys::VarT<uint16_t>& Var);
132  void visit(const cf::TypeSys::VarT<uint8_t>& Var);
133  void visit(const cf::TypeSys::VarT<bool>& Var);
134  void visit(const cf::TypeSys::VarT<std::string>& Var);
135  void visit(const cf::TypeSys::VarT<Vector2fT>& Var);
136  void visit(const cf::TypeSys::VarT<Vector3fT>& Var);
137  void visit(const cf::TypeSys::VarT<Vector3dT>& Var);
138  void visit(const cf::TypeSys::VarT<BoundingBox3dT>& Var);
139  void visit(const cf::TypeSys::VarArrayT<uint32_t>& Var);
140  void visit(const cf::TypeSys::VarArrayT<uint16_t>& Var);
141  void visit(const cf::TypeSys::VarArrayT<uint8_t>& Var);
142  void visit(const cf::TypeSys::VarArrayT<std::string>& Var);
143 
144 
145  private:
146 
147  void WriteString(const std::string& s) const;
148 
149  std::ostream& m_Out;
150  };
151  }
152 }
153 
154 #endif
This is the base class for the visitors of VarTs.
Definition: Variables.hpp:266
Like VisitorT, but for const VarTs.
Definition: Variables.hpp:294
This visitor is used to implement a "get()" function in Lua: It pushes the value(s) of the visited va...
Definition: VarVisitorsLua.hpp:22
This is a "wrapper" around a normal C++ variable specifically of type ArrayT<T>.
Definition: SetCompVar.hpp:16
This visitor is used to set float values in variables that are of type float, or composed of float...
Definition: VarVisitorsLua.hpp:88
This visitor writes the value of the visited variable into the given std::ostream, formatted as Lua code.
Definition: VarVisitorsLua.hpp:121
This visitor is used to implement a "set()" function in Lua: It sets the value of the visited variabl...
Definition: VarVisitorsLua.hpp:57