Orxonox  0.0.5 Codename: Arcturus
LuaState.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Benjamin Knecht
24  * Reto Grieder
25  * Co-authors:
26  * ...
27  *
28  */
29 
40 #ifndef _LuaState_H__
41 #define _LuaState_H__
42 
43 #include "CorePrereqs.h"
44 
45 #include <map>
46 #include <sstream>
47 #include <string>
48 #include <vector>
49 #include <memory>
50 
51 #include "util/Output.h"
52 
53 namespace orxonox // tolua_export
54 { // tolua_export
55  class LuaFunctor; // tolua_export
56 
59  {
60  public:
61  LuaFunctor(const std::string& code, LuaState* luaState);
62  void operator()();
63 
64  private:
67  };
68 
69 
74  class _CoreExport LuaState // tolua_export
75  { // tolua_export
76  public:
77  LuaState();
78  ~LuaState();
79 
80  bool doFile(const std::string& filename); // tolua_export
81  bool doString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo = std::shared_ptr<ResourceInfo>());
82 
83  bool includeFile(const std::string& filename); // tolua_export
84  bool includeString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo = std::shared_ptr<ResourceInfo>());
85 
86  void luaPrint(const std::string& str); // tolua_export
87  void luaOutput(orxonox::level::OutputLevel level, const std::string& context, const std::string& message); // tolua_export
88  void luaOutput(orxonox::level::OutputLevel level, const std::string& message); // tolua_export
89  void luaOutput(const std::string& message); // tolua_export
90  bool fileExists(const std::string& filename); // tolua_export
91  std::string getSourceCode(const std::string& filename); // tolua_export
92 
93  const std::stringstream& getOutput() const { return output_; }
94  void clearOutput() { output_.clear(); } // tolua_export
95 
96  void setTraceMap(std::shared_ptr<std::vector<std::vector<std::pair<std::string, size_t>>>> map)
97  { map->emplace_back(); lineTrace_ = map; }
98 
99  void setIncludeParser(std::string (*function)(const std::string&)) { includeParseFunction_ = function; }
100  lua_State* getInternalLuaState() { return luaState_; }
101 
102  void setDefaultResourceInfo(const std::shared_ptr<ResourceInfo>& sourceFileInfo) { this->sourceFileInfo_ = sourceFileInfo; }
103  const std::shared_ptr<ResourceInfo>& getDefaultResourceInfo() { return this->sourceFileInfo_; }
104 
105  LuaFunctor* createLuaFunctor(const std::string& code) { return new LuaFunctor(code, this); } // tolua_export
107  bool usingIOConsole() const; // tolua_export
108 
109  static bool addToluaInterface(int (*function)(lua_State*), const std::string& name);
110  static bool removeToluaInterface(const std::string& name);
111  static void openToluaInterfaces(lua_State* state);
112  static void closeToluaInterfaces(lua_State* state);
113 
115 
116  private:
117  std::shared_ptr<ResourceInfo> getFileInfo(const std::string& filename);
118  std::shared_ptr<std::vector<std::vector<std::pair<std::string, size_t>>>> lineTrace_;
119 
120  std::stringstream output_;
121  lua_State* luaState_;
123  std::shared_ptr<ResourceInfo> sourceFileInfo_;
124  std::map<std::string, std::string> sourceCodeMap_;
125  std::string (*includeParseFunction_)(const std::string&);
126 
127  typedef std::map<std::string, int (*)(lua_State *L)> ToluaInterfaceMap;
128  static ToluaInterfaceMap& getToluaInterfaces();
129  static std::vector<LuaState*>& getInstances();
130  }; // tolua_export
131 
132 
135  {
136  public:
137  ToluaBindingsHelper(int (*function)(lua_State*), const std::string& libraryName)
138  : libraryName_(libraryName)
139  {
140  LuaState::addToluaInterface(function, libraryName_);
141  }
143  {
144  LuaState::removeToluaInterface(libraryName_);
145  }
146  private:
148  };
149 } // tolua_export
150 
151 #endif /* _LuaState_H__ */
const std::stringstream & getOutput() const
Definition: LuaState.h:93
Helper class that registers/unregisters tolua bindings.
Definition: LuaState.h:134
static const std::string ERROR_HANDLER_NAME
Definition: LuaState.h:114
ToluaBindingsHelper(int(*function)(lua_State *), const std::string &libraryName)
Definition: LuaState.h:137
void setIncludeParser(std::string(*function)(const std::string &))
Definition: LuaState.h:99
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
Representation of an interface to lua.
Definition: LuaState.h:74
Output level, used for messages directed to the user (e.g. "Press any key to continue") ...
Definition: OutputDefinitions.h:89
void setTraceMap(std::shared_ptr< std::vector< std::vector< std::pair< std::string, size_t >>>> map)
Definition: LuaState.h:96
std::stringstream output_
Definition: LuaState.h:120
OutputLevel
Output levels define type and importance of an output message.
Definition: OutputDefinitions.h:84
static bool removeToluaInterface(const std::string &name)
Definition: LuaState.cc:346
const std::shared_ptr< ResourceInfo > & getDefaultResourceInfo()
Definition: LuaState.h:103
~ToluaBindingsHelper()
Definition: LuaState.h:142
std::string code_
Definition: LuaState.h:65
bool bIsRunning_
Definition: LuaState.h:122
lua_State * getInternalLuaState()
Definition: LuaState.h:100
LuaFunctor * createLuaFunctor(const std::string &code)
Definition: LuaState.h:105
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
#define _CoreExport
Definition: CorePrereqs.h:61
void clearOutput()
Definition: LuaState.h:94
std::map< std::string, std::string > sourceCodeMap_
Definition: LuaState.h:124
callback class that executes lua code
Definition: LuaState.h:58
Defines the helper function orxout() and includes all necessary headers to use the output system...
static bool addToluaInterface(int(*function)(lua_State *), const std::string &name)
Definition: LuaState.cc:326
void setDefaultResourceInfo(const std::shared_ptr< ResourceInfo > &sourceFileInfo)
Definition: LuaState.h:102
std::string libraryName_
Definition: LuaState.h:147
std::shared_ptr< std::vector< std::vector< std::pair< std::string, size_t > > > > lineTrace_
Definition: LuaState.h:118
LuaState * lua_
Definition: LuaState.h:66
std::shared_ptr< ResourceInfo > sourceFileInfo_
Definition: LuaState.h:123
std::map< std::string, int(*)(lua_State *L)> ToluaInterfaceMap
Definition: LuaState.h:127
lua_State * luaState_
Definition: LuaState.h:121