defined a macro for lua_pcall
[lqt.git] / common / lqt_common.hpp
blob4dca8132d7caa48814b1aff4e1a2797dc55f266d
1 /*
2 * Copyright (c) 2007-2008 Mauro Iazzi
3 *
4 * Permission is hereby granted, free of charge, to any person
5 * obtaining a copy of this software and associated documentation
6 * files (the "Software"), to deal in the Software without
7 * restriction, including without limitation the rights to use,
8 * copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following
11 * conditions:
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
27 #ifndef __LQT_COMMON_HPP
28 #define __LQT_COMMON_HPP
30 #ifdef _WIN32
31 #define LQT_EXPORT __declspec(dllexport)
32 #else
33 #define LQT_EXPORT
34 #endif
36 extern "C" {
37 #include <lua.h>
38 #include <lualib.h>
39 #include <lauxlib.h>
42 //#include <iostream>
44 //#define lqtL_register(L, p, n) ( (void)L, (void)p, (void)n )
45 //#define lqtL_unregister(L, p) ( (void)L, (void)p )
47 #define LQT_POINTERS "Registry Pointers"
48 #define LQT_REFS "Registry References"
49 #define LQT_ENUMS "Registry Enumerations"
51 // Qt-specific fields
52 #define LQT_METACALLER "Registry MetaCaller"
53 #define LQT_OBJMETASTRING "Lqt MetaStringData"
54 #define LQT_OBJMETADATA "Lqt MetaData"
55 #define LQT_OBJSLOTS "Lqt Slots"
56 #define LQT_OBJSIGS "Lqt Signatures"
58 // macro to ge positive indexes
59 #define LQT_TOPOSITIVE(L, i) (((i)<0)?(lua_gettop(L)+1+(i)):(i))
61 // use standard pcall by default
62 #define lqtL_pcall(L, n, r, e) lua_pcall(L, n, r, e)
64 typedef int (*lqt_PCallPtr) (lua_State *L, int nargs, int nresults, int errfunc);
66 void lqtL_register(lua_State *, const void *);
67 void lqtL_unregister(lua_State *, const void *);
69 //int& lqtL_tointref (lua_State *, int);
71 //void lqtL_pusharguments (lua_State *, char**);
72 //char** lqtL_toarguments (lua_State *, int);
73 //bool lqtL_testarguments (lua_State *, int);
75 //void lqtL_manageudata (lua_State *, int);
76 //void lqtL_unmanageudata (lua_State *, int);
77 void lqtL_pushudata (lua_State *, const void *, const char *);
78 void lqtL_passudata (lua_State *, const void *, const char *);
79 void lqtL_copyudata (lua_State *, const void *, const char *);
80 void * lqtL_toudata (lua_State *, int, const char *);
81 bool lqtL_testudata (lua_State *, int, const char *);
82 //#define lqtL_checkudata(a...) luaL_checkudata(a)
83 void * lqtL_checkudata (lua_State *, int, const char *);
84 void lqtL_eraseudata (lua_State *, int, const char *);
85 #define lqtL_isudata lqtL_testudata
87 void lqtL_pushenum (lua_State *, int, const char *);
88 bool lqtL_isenum (lua_State *, int, const char *);
89 int lqtL_toenum (lua_State *, int, const char *);
91 bool lqtL_isinteger (lua_State *, int);
92 bool lqtL_isnumber (lua_State *, int);
93 bool lqtL_isstring (lua_State *, int);
94 bool lqtL_isboolean (lua_State *, int);
96 bool lqtL_missarg (lua_State *, int, int);
97 //int lqtL_baseindex (lua_State *, int, int);
99 //int lqtL_gc (lua_State *);
100 //int lqtL_index (lua_State *);
101 //int lqtL_newindex (lua_State *);
103 typedef struct {
104 const char *name;
105 int value;
106 } lqt_Enum;
108 typedef struct {
109 lqt_Enum *enums;
110 const char *name;
111 } lqt_Enumlist;
113 int lqtL_createenumlist (lua_State *, lqt_Enumlist[]);
115 typedef struct {
116 const char *basename;
117 ptrdiff_t offset;
118 } lqt_Base;
120 typedef struct {
121 luaL_Reg *mt;
122 lqt_Base *bases;
123 const char * name;
124 } lqt_Class;
126 int lqtL_createclasses (lua_State *, lqt_Class *);
127 int lqtL_createclass (lua_State *, const char *, luaL_Reg *, lqt_Base *);
129 /* functions to get/push special types */
131 bool * lqtL_toboolref (lua_State *, int);
132 void * lqtL_getref (lua_State *, size_t, bool);
133 int * lqtL_tointref (lua_State *, int);
134 char ** lqtL_toarguments (lua_State *, int);
135 void lqtL_pusharguments (lua_State *, char **);
137 int lqtL_getflags (lua_State *, int, const char *);
138 void lqtL_pushflags (lua_State *, int, const char *);
139 #define lqtL_isflags(L, i) (lua_istable((L), (i)) || lqtL_isinteger((L), (i)))
141 int lqtL_touintarray (lua_State *);
144 #endif // __LQT_COMMON_HPP