Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands3/src/libraries/core/LuaState.h @ 7188

Last change on this file since 7188 was 7188, checked in by landauf, 14 years ago

reduced amount of member variables in Functor by moving these rarely used properties into virtual functions (which also fixes a small bug, because only FunctorStatic provided all required information so far)

  • Property svn:eol-style set to native
File size: 5.1 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#ifndef _LuaState_H__
31#define _LuaState_H__
32
33#include "CorePrereqs.h"
34
35#include <map>
36#include <sstream>
37#include <string>
38#include <vector>
39#include <boost/shared_ptr.hpp>
40
41#include "util/ScopeGuard.h"
42#include "Functor.h"
43#include "ToluaInterface.h"
44
45namespace orxonox // tolua_export
46{ // tolua_export
47    class Functor; // tolua_export
48
49    //! Functor subclass that simply executes code with 0 arguments.
50    class _CoreExport LuaFunctor : public Functor
51    {
52        public:
53            LuaFunctor(const std::string& code, LuaState* luaState);
54            void operator()(const MultiType& param1 = MT_Type::Null, const MultiType& param2 = MT_Type::Null, const MultiType& param3 = MT_Type::Null, const MultiType& param4 = MT_Type::Null, const MultiType& param5 = MT_Type::Null);
55            void evaluateParam(unsigned int index, MultiType& param) const {}
56
57            Functor::Type::Enum getType() const { return Functor::Type::Lua; } \
58            unsigned int getParamCount() const { return 0; }
59            bool hasReturnvalue() const { return 0; }
60            std::string getTypenameParam(unsigned int param) const { return BLANKSTRING; }
61            std::string getTypenameReturnvalue() const { return BLANKSTRING; }
62
63            const std::type_info& getHeaderIdentifier() const { return typeid(this); }
64
65        private:
66            std::string code_;
67            LuaState*   lua_;
68    };
69
70
71    /**
72    @brief
73        Representation of an interface to lua
74    */
75    class _CoreExport LuaState // tolua_export
76    { // tolua_export
77    public:
78        LuaState();
79        ~LuaState();
80
81        bool doFile(const std::string& filename); // tolua_export
82        bool doString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
83
84        bool includeFile(const std::string& filename); // tolua_export
85        bool includeString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
86
87        void luaPrint(const std::string& str); // tolua_export
88        void luaLog(unsigned int level, const std::string& message); // tolua_export
89        bool fileExists(const std::string& filename); // tolua_export
90        std::string getSourceCode(const std::string& filename); // tolua_export
91
92        const std::stringstream& getOutput() const { return output_; }
93        void clearOutput() { output_.clear(); } // tolua_export
94
95        void setIncludeParser(std::string (*function)(const std::string&)) { includeParseFunction_ = function; }
96        lua_State* getInternalLuaState() { return luaState_; }
97
98        void setDefaultResourceInfo(const shared_ptr<ResourceInfo>& sourceFileInfo) { this->sourceFileInfo_ = sourceFileInfo; }
99        const shared_ptr<ResourceInfo>& getDefaultResourceInfo() { return this->sourceFileInfo_; }
100
101        Functor* createLuaFunctor(const std::string& code) { return new LuaFunctor(code, this); } // tolua_export
102        //! Tells about whether IOConsole was activated. The Lua debugger only works with a normal console.
103        bool usingIOConsole() const; // tolua_export
104
105        static bool addToluaInterface(int (*function)(lua_State*), const std::string& name);
106        static bool removeToluaInterface(const std::string& name);
107        static void openToluaInterfaces(lua_State* state);
108        static void closeToluaInterfaces(lua_State* state);
109
110        static const std::string ERROR_HANDLER_NAME;
111
112    private:
113        shared_ptr<ResourceInfo> getFileInfo(const std::string& filename);
114
115#if LUA_VERSION_NUM != 501
116        struct LoadS
117        {
118            const char* s;
119            size_t size;
120        };
121
122        static const char * lua_Chunkreader(lua_State *L, void *data, size_t *size);
123#endif
124
125        std::stringstream output_;
126        lua_State* luaState_;
127        bool bIsRunning_;
128        shared_ptr<ResourceInfo> sourceFileInfo_;
129        std::map<std::string, std::string> sourceCodeMap_;
130        std::string (*includeParseFunction_)(const std::string&);
131
132        typedef std::map<std::string, int (*)(lua_State *L)> ToluaInterfaceMap;
133        static ToluaInterfaceMap toluaInterfaces_s;
134        static std::vector<LuaState*> instances_s;
135    }; // tolua_export
136} // tolua_export
137
138#endif /* _LuaState_H__ */
Note: See TracBrowser for help on using the repository browser.