Lua Utils
Biblioteca utilitária para facilitar a integração de Lua com C++
Loading...
Searching...
No Matches
luaTable.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2009 K2FS Sistemas e Projetos Ltd.
4** All rights reserved.
5**
6************************************************************************/
7
18#ifndef _LUATABLE_H_
19#define _LUATABLE_H_
20
21#include <QVariant>
22#include <qvector.h>
23
24#include "luaObjRef.h"
25
26class QStringList;
27
31class LUAUTILS_API_EXPORT LuaTable : public LuaObjRef
32{
33public:
34 LuaTable();
35 LuaTable(const LuaTable& other);
36 LuaTable(LuaEnv* lua, int index, bool ref = false);
37 LuaTable(LuaEnv* lua);
38 LuaTable(int n, LuaEnv* lua);
39 ~LuaTable();
40
41 QVariant getIndex(int index, LuaEnv::StackOption opt = LuaEnv::STACK_AUTO);
42 QVariant getField(const char* name, LuaEnv::StackOption opt = LuaEnv::STACK_AUTO);
43 void pushField(const char* name);
44
46 QVariant getField(QString name, LuaEnv::StackOption opt = LuaEnv::STACK_AUTO) { return getField(luaPrintable(name), opt); }
47
49 void pushField(QString name) { pushField(luaPrintable(name)); }
50
52 QVariant toVariant() const { QVariant v; v.setValue(*this); return v; }
53
54 QStringList toStringList();
55 QList<double> toDoubleList();
56 QVector<double> toDoubleVector();
57 QList<bool> toBoolList();
58 QVector<bool> toBoolVector();
59 QVariantList toVariantList();
60 void fromStringList (const QStringList& list);
61 void fromVariantList(const QVariantList& list);
62 void fromVariantMap (const QVariantMap& map, bool useIntegerKeys = false);
63
64 void setIndex(int index, const QVariant& val, bool raw = false);
65 void setField(const char* name, const QVariant& val, bool raw = false);
66 void setField(const QVariant& key, const QVariant& val, bool raw = false);
67
69 void setField(QString name, const QVariant& val, bool raw = false) { setField(luaPrintable(name), val, raw); }
70
71 bool callMethod(const char* name, int nresults, QString& err);
72 bool callMethod(const char* name, QVariant a1, int nresults, QString& err);
73 bool callMethod(const char* name, QVariant a1, QVariant a2, int nresults, QString& err);
74 bool callMethod(const char* name, QVariant a1, QVariant a2, QVariant a3, int nresults, QString& err);
75 bool callMethod(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, int nresults, QString& err);
76 bool callMethod(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, int nresults, QString& err);
77 bool callMethod(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, QVariant a6, int nresults, QString& err);
78 bool callMethod(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, QVariant a6, QVariant a7, int nresults, QString& err);
79
80 bool callFunction(const char* name, int nresults, QString& err);
81 bool callFunction(const char* name, QVariant a1, int nresults, QString& err);
82 bool callFunction(const char* name, QVariant a1, QVariant a2, int nresults, QString& err);
83 bool callFunction(const char* name, QVariant a1, QVariant a2, QVariant a3, int nresults, QString& err);
84 bool callFunction(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, int nresults, QString& err);
85 bool callFunction(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, int nresults, QString& err);
86 bool callFunction(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, QVariant a6, int nresults, QString& err);
87 bool callFunction(const char* name, QVariant a1, QVariant a2, QVariant a3, QVariant a4, QVariant a5, QVariant a6, QVariant a7, int nresults, QString& err);
88
89 int size();
90
91 template <class T> bool traverse(T& obj);
92
93 bool callMethodPrepare(const char* name, bool pushTable, QString& err);
94};
95
98
99
109template <class T> bool LuaTable::traverse(T& obj)
110{
111 lua_State* L = _lua->state();
112 int top1 = lua_gettop(L); Q_UNUSED(top1); // top1 is used for assert only
113 bool ret = true;
114
115 // Faz pos apontar para a tabela a ser consultada
116 int pos = objectPos();
117
118 lua_pushnil(L);
119 while(lua_next(L, pos) != 0)
120 {
121 // Chave está em -2 e valor em -1
124
125 int top2 = lua_gettop(L); Q_UNUSED(top2); // top2 is used for assert only
126 ret = obj(key, val);
127 assert(top2 == lua_gettop(L));
128 if(!ret)
129 {
130 lua_pop(L, 1);
131 break;
132 }
133 }
134
135 // Se estamos operando com uma ref., remove tabela colocada na pilha por objectPos()
136 if(_ref != LUA_NOREF)
137 lua_remove(L, pos);
138 assert(top1 == lua_gettop(L));
139 return ret;
140}
141
142
143#endif
144
Classe para interface com ambientes Lua.
Definition luaEnv.h:35
lua_State * state()
Retorna o estado Lua armazenado.
Definition luaEnv.h:93
QVariant toVariant(StackOption opt, int index=-1)
Retorna o valor contido no topo da pilha como um QVariant. Se index for diferente de -1,...
Definition luaEnv.cpp:517
StackOption
Opções de manipulação de pilha.
Definition luaEnv.h:40
@ STACK_AUTO
Valor será ou não removido da pilha dependendo de seu tipo.
Definition luaEnv.h:43
@ STACK_POP
Indica que o valor deve ser removido da pilha.
Definition luaEnv.h:41
@ STACK_NOPOP
Indica que o valor não deve ser removido da pilha.
Definition luaEnv.h:42
Classe para interface com ambientes Lua, modelando uma referência para um objeto.
Definition luaObjRef.h:28
int objectPos()
Se o objeto já está na pilha (_ref == LUA_NOREF), simplesmente retorna sua posição....
Definition luaObjRef.cpp:142
LuaEnv * _lua
Estado Lua que contém o objeto.
Definition luaObjRef.h:55
int _ref
Referencia para o objeto.
Definition luaObjRef.h:57
Classe para interface com ambientes Lua, modelando uma tabela.
Definition luaTable.h:32
bool traverse(T &obj)
Passa por todos os itens da tabela chamando obj(Qvariant key, QVariant val), onde key e val contém o ...
Definition luaTable.h:109
void pushField(QString name)
Método sobrecarregado recebendo um QString.
Definition luaTable.h:49
void setField(QString name, const QVariant &val, bool raw=false)
Método sobrecarregado recebendo um QString.
Definition luaTable.h:69
QVariant toVariant() const
Retorna um Qvariant.
Definition luaTable.h:52
QVariant getField(QString name, LuaEnv::StackOption opt=LuaEnv::STACK_AUTO)
Método sobrecarregado recebendo um QString.
Definition luaTable.h:46
Definicao da classe LuaObjRef.
Q_DECLARE_METATYPE(LuaTable)
Cadastra tipo para este poder ser utilizado em um QVariant.
void setValue(const T &value)