PTLib  Version 2.12.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lua.h
Go to the documentation of this file.
1 /*
2  * lua.h
3  *
4  * Interface library for Lua interpreter
5  *
6  * Portable Tools Library
7  *
8  * Copyright (C) 2010 by Post Increment
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Portable Tools Library.
21  *
22  * The Initial Developer of the Original Code is Post Increment
23  *
24  * Contributor(s): Craig Southeren
25  * Robert Jongbloed
26  *
27  * $Revision: 28224 $
28  * $Author: rjongbloed $
29  * $Date: 2012-08-21 18:09:25 +1000 (Tue, 21 Aug 2012) $
30  */
31 
32 #ifndef PTLIB_LUA_H
33 #define PTLIB_LUA_H
34 
35 #ifdef P_USE_PRAGMA
36 #pragma interface
37 #endif
38 
39 #include <ptlib.h>
40 #include <ptbuildopts.h>
41 
42 #if P_LUA
43 
44 #include <ptclib/script.h>
45 #include <ptclib/vartype.h>
46 
47 
48 struct lua_State;
49 
50 
52 
61 class PLua : public PScriptLanguage
62 {
64  public:
69  PLua();
70 
72  ~PLua();
74 
79  virtual bool LoadFile(
80  const PFilePath & filename
81  );
82 
85  virtual bool LoadText(
86  const PString & text
87  );
88 
95  virtual bool Run(
96  const char * script = NULL
97  );
98 
104  bool CreateTable(
105  const PString & name,
106  const PString & metatable = PString::Empty()
107  );
108 
114  bool DeleteTable(
115  const PString & name,
116  bool metaTable = false
117  );
118 
119 
125  virtual bool CreateComposite(
126  const PString & name
127  );
128 
132  virtual bool GetVar(
133  const PString & name,
134  PVarType & var
135  );
136 
140  virtual bool SetVar(
141  const PString & name,
142  const PVarType & var
143  );
144 
148  bool GetBoolean(
149  const PString & name
150  );
151 
155  bool SetBoolean(
156  const PString & name,
157  bool value
158  );
159 
163  int GetInteger(
164  const PString & name
165  );
166 
170  bool SetInteger(
171  const PString & name,
172  int value
173  );
174 
178  double GetNumber(
179  const PString & name
180  );
181 
185  bool SetNumber(
186  const PString & name,
187  double value
188  );
189 
193  PString GetString(
194  const PString & name
195  );
196 
200  bool SetString(
201  const PString & name,
202  const char * value
203  );
204 
210  virtual bool ReleaseVariable(
211  const PString & name
212  );
213 
240  bool Call(
241  const PString & name,
242  const char * sigString = NULL,
243  ...
244  );
245  bool Call(
246  const PString & name,
247  Signature & signature
248  );
249 
250 
251  #define PDECLARE_LuaFunctionNotifier(cls, fn) PDECLARE_NOTIFIER2(PLua, cls, fn, PScriptLanguage::Signature &)
252 
256  bool SetFunction(
257  const PString & name,
258  const FunctionNotifier & func
259  );
261 
262  protected:
265  virtual bool OnLuaError(int code, const PString & str = PString::Empty(), int pop = 0);
266 
267  bool ParseVariableName(const PString & name, PStringArray & vars);
268  bool InternalGetVariable(const PString & name);
269  bool InternalSetVariable(const PString & name);
270  static int InternalCallback(lua_State * state);
271  int InternalCallback();
272 
273  lua_State * m_lua;
274 };
275 
276 
277 #endif // P_LUA
278 
279 #endif // PTLIB_LUA_H
280