Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/unity_build/src/libraries/core/LuaState.h @ 8740

Last change on this file since 8740 was 8688, checked in by rgrieder, 14 years ago

Removed the need to declare the tolua interface explicitly (DeclareToluaInterface).
This is now automatically done in the ToluaBindLibrary.cc files.
That also removes the need for tolua bind header files.

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
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
30/**
31    @defgroup Lua Lua
32    @ingroup Core
33*/
34
35/**
36    @file
37    @ingroup Lua
38*/
39
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 <boost/shared_ptr.hpp>
50
51namespace orxonox // tolua_export
52{ // tolua_export
53    class LuaFunctor; // tolua_export
54
55    //! callback class that executes lua code
56    class _CoreExport LuaFunctor
57    {
58        public:
59            LuaFunctor(const std::string& code, LuaState* luaState);
60            void operator()();
61
62        private:
63            std::string code_;
64            LuaState*   lua_;
65    };
66
67
68    /**
69    @brief
70        Representation of an interface to lua
71    */
72    class _CoreExport LuaState // tolua_export
73    { // tolua_export
74    public:
75        LuaState();
76        ~LuaState();
77
78        bool doFile(const std::string& filename); // tolua_export
79        bool doString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
80
81        bool includeFile(const std::string& filename); // tolua_export
82        bool includeString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
83
84        void luaPrint(const std::string& str); // tolua_export
85        void luaLog(unsigned int level, const std::string& message); // tolua_export
86        bool fileExists(const std::string& filename); // tolua_export
87        std::string getSourceCode(const std::string& filename); // tolua_export
88
89        const std::stringstream& getOutput() const { return output_; }
90        void clearOutput() { output_.clear(); } // tolua_export
91
92        void setIncludeParser(std::string (*function)(const std::string&)) { includeParseFunction_ = function; }
93        lua_State* getInternalLuaState() { return luaState_; }
94
95        void setDefaultResourceInfo(const shared_ptr<ResourceInfo>& sourceFileInfo) { this->sourceFileInfo_ = sourceFileInfo; }
96        const shared_ptr<ResourceInfo>& getDefaultResourceInfo() { return this->sourceFileInfo_; }
97
98        LuaFunctor* createLuaFunctor(const std::string& code) { return new LuaFunctor(code, this); } // tolua_export
99        //! Tells about whether IOConsole was activated. The Lua debugger only works with a normal console.
100        bool usingIOConsole() const; // tolua_export
101
102        static bool addToluaInterface(int (*function)(lua_State*), const std::string& name);
103        static bool removeToluaInterface(const std::string& name);
104        static void openToluaInterfaces(lua_State* state);
105        static void closeToluaInterfaces(lua_State* state);
106
107        static const std::string ERROR_HANDLER_NAME;
108
109    private:
110        shared_ptr<ResourceInfo> getFileInfo(const std::string& filename);
111
112        std::stringstream output_;
113        lua_State* luaState_;
114        bool bIsRunning_;
115        shared_ptr<ResourceInfo> sourceFileInfo_;
116        std::map<std::string, std::string> sourceCodeMap_;
117        std::string (*includeParseFunction_)(const std::string&);
118
119        typedef std::map<std::string, int (*)(lua_State *L)> ToluaInterfaceMap;
120        static ToluaInterfaceMap& getToluaInterfaces();
121        static std::vector<LuaState*>& getInstances();
122    }; // tolua_export
123
124
125    //! Helper class that registers/unregisters tolua bindings
126    class ToluaBindingsHelper
127    {
128    public:
129        ToluaBindingsHelper(int (*function)(lua_State*), const std::string& libraryName)
130            : libraryName_(libraryName)
131        {
132            LuaState::addToluaInterface(function, libraryName_);
133        }
134        ~ToluaBindingsHelper()
135        {
136            LuaState::removeToluaInterface(libraryName_);
137        }
138    private:
139        std::string libraryName_;
140    };
141} // tolua_export
142
143#endif /* _LuaState_H__ */
Note: See TracBrowser for help on using the repository browser.