GemaLuaCoreLib
The GeMA Lua Core library
Loading...
Searching...
No Matches
gmLuaValueAccessor.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2014 by Carlos Augusto Teixera Mendes
4** All rights reserved.
5**
6** This file is part of the "GeMA" software. It's use should respect
7** the terms in the license agreement that can be found together
8** with this source code.
9** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11** A PARTICULAR PURPOSE.
12**
13************************************************************************/
14
25#ifndef _GEMALUA_VALUE_ACCESSOR_H_
26#define _GEMALUA_VALUE_ACCESSOR_H_
27
28#include "gmLuaObject.h"
29#include <gmVector.h>
30
31#include <gmElementMesh.h>
32
33class GmValueAccessor;
34class GmCellAccessor;
35class GmGaussAccessor;
41class GmCell;
42class GmDiscontinuity;
43
51template <class T>
52class GML_API_EXPORT GmLuaAccessorBase : public GmLuaObject
53{
54public:
55 virtual ~GmLuaAccessorBase();
56
57 virtual QString toString() const;
58
59 virtual void fillMetatable(lua_State* L, int index);
60
62 T* accessor() const { return _ac; }
63
64protected:
65 GmLuaAccessorBase(T* ac, const GmLogCategory& logger, bool ownership);
66
68 struct Options {
69 bool evalFunctions, defAsNil;
70 int width, prec;
71 char format;
72
73 Options(GmValueInfo* info);
74 };
75
76 void parseCoord (lua_State* L, int stackPos, QString fname, GmVector& coord);
77 void parseOptions(lua_State* L, int stackPos, Options& opt);
78 void pushResult (lua_State* L, const double* val);
79
80 T* _ac;
81 bool _owner;
82
83private:
84 int size (lua_State* L);
85 int info (lua_State* L);
86 int isScalar (lua_State* L);
87 int unit (lua_State* L);
88 int valueSize(lua_State* L);
89 int defValue (lua_State* L);
90};
91
101template <class T, class I>
102class GML_API_EXPORT GmLuaAccessorIndex: public GmLuaAccessorBase<T>
103{
104public:
105 virtual void fillMetatable(lua_State* L, int index);
106
107protected:
108 GmLuaAccessorIndex(T* ac, const GmLogCategory& logger, bool ownership);
109
115 virtual I parseIndex(lua_State* L, int stackPos, QString fname) const = 0;
116
117private:
118 int isDefValue (lua_State* L);
119 int isFunction (lua_State* L);
120 int setValue (lua_State* L);
121 int setValueAsDef(lua_State* L);
122 int functionId (lua_State* L);
123};
124
125
127class GML_API_EXPORT GmLuaValueAccessor: public GmLuaAccessorIndex<GmValueAccessor, int>
128{
129public:
130 GmLuaValueAccessor(GmValueAccessor* ac, const GmLogCategory& logger, bool ownership = true);
131
132 // See comments on the base class
133 virtual const char* typeName() const { return "valueAccessor"; }
134
136 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
137
138 virtual void fillMetatable(lua_State* L, int index);
139
140private:
141 int value (lua_State* L);
142 int valueStr(lua_State* L);
143
144protected:
145 virtual int parseIndex(lua_State* L, int stackPos, QString fname) const;
146};
147
149class GML_API_EXPORT GmLuaNodeValueAccessor : public GmLuaValueAccessor
150{
151public:
152 GmLuaNodeValueAccessor(GmValueAccessor* ac, const GmMesh* mesh, const GmLogCategory& logger, bool ownership = true);
153
154 // See comments on the base class
155 virtual const char* typeName() const { return "nodeValueAccessor"; }
156
158 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
159
160 virtual void fillMetatable(lua_State* L, int index);
161
162private:
163 int adjustLinearIndex(lua_State* L);
164
165protected:
166 virtual int parseIndex(lua_State* L, int stackPos, QString fname) const;
167
168 const GmMesh* _mesh;
170};
171
173class GML_API_EXPORT GmLuaCellAccessor: public GmLuaAccessorIndex<GmCellAccessor, const GmCell*>
174{
175public:
176 GmLuaCellAccessor(GmCellAccessor* ac, const GmLogCategory& logger, bool ownership = true);
177
178 // See comments on the base class
179 virtual const char* typeName() const { return "cellAccessor"; }
180
182 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
183
184 virtual void fillMetatable(lua_State* L, int index);
185
186private:
187 int value (lua_State* L);
188 int valueStr(lua_State* L);
189
190protected:
191 virtual const GmCell* parseIndex(lua_State* L, int stackPos, QString fname) const;
192};
193
195class GML_API_EXPORT GmLuaGaussAccessor: public GmLuaAccessorBase<GmGaussAccessor>
196{
197public:
198 GmLuaGaussAccessor(GmGaussAccessor* ac, GmElementMesh* mesh, const GmLogCategory& logger, bool ownership = true);
199
200 // See comments on the base class
201 virtual const char* typeName() const { return "gaussAccessor"; }
202
204 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
205
206 virtual void fillMetatable(lua_State* L, int index);
207
208private:
211
212 I parseIndex(lua_State* L, int stackPos, QString fname) const;
213
214 int numPoints (lua_State* L);
215 int isDefValue (lua_State* L);
216 int isFunction (lua_State* L);
217 int value (lua_State* L);
218 int setValue (lua_State* L);
219 int setValueAsDef(lua_State* L);
220 int valueStr (lua_State* L);
221 int functionId (lua_State* L);
222
224};
225
232template <class T, class B>
233class GML_API_EXPORT GmLuaBCAccessor : public GmLuaAccessorBase<T>
234{
235public:
236 virtual void fillMetatable(lua_State* L, int index);
237
238private:
239 int isDefValue (lua_State* L);
240 int isFunction (lua_State* L);
241 int setValue (lua_State* L);
242 int setValueAsDef(lua_State* L);
243 int functionId (lua_State* L);
244
245protected:
246 GmLuaBCAccessor(T* ac, const B* bc, const GmLogCategory& logger, bool ownership);
247
248 int parseIndex1(lua_State* L, int stackPos, QString fname) const;
249
250 const B* _bc;
251};
252
253
255class GML_API_EXPORT GmLuaBoundaryConditionAccessor : public GmLuaBCAccessor<GmBoundaryConditionAccessor, GmBoundaryCondition>
256{
257public:
261
262 // See comments on the base class
263 virtual const char* typeName() const { return "bcAccessor"; }
264
266 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
267
268 virtual void fillMetatable(lua_State* L, int index);
269
270private:
273
274 I parseIndex2(lua_State* L, int stackPos, QString fname) const;
275
276 int value (lua_State* L);
277 int valueStr(lua_State* L);
278};
279
281class GML_API_EXPORT GmLuaContactBoundaryConditionAccessor : public GmLuaBCAccessor<GmContactBoundaryConditionAccessor, GmContactBoundaryCondition>
282{
283public:
287
288 // See comments on the base class
289 virtual const char* typeName() const { return "contactBcAccessor"; }
290
292 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
293
294 virtual void fillMetatable(lua_State* L, int index);
295
296private:
298 typedef struct { int ci; int bci; int li; } I;
299
300 I parseIndex3(lua_State* L, int stackPos, QString fname) const;
301
302 int value (lua_State* L);
303 int valueStr(lua_State* L);
304};
305
307class GML_API_EXPORT GmLuaDiscontinuityAccessor : public GmLuaAccessorIndex<GmDiscontinuityAccessor, const GmDiscontinuity*>
308{
309public:
310 GmLuaDiscontinuityAccessor(GmDiscontinuityAccessor* ac, const GmLogCategory& logger, bool ownership = true);
311
312 // See comments on the base class
313 virtual const char* typeName() const { return "discontinuityAccessor"; }
314
316 virtual void* getClassMetatableID() { static int classID = 0; return &classID; }
317
318 virtual void fillMetatable(lua_State* L, int index);
319
320private:
321 int value(lua_State* L);
322 int valueStr(lua_State* L);
323
324protected:
325 virtual const GmDiscontinuity* parseIndex(lua_State* L, int stackPos, QString fname) const;
326};
327
328
329#endif
A helper class for implementing the common behaviour between GmLuaValueAccessor, GmLuaCellAccessor,...
Definition gmLuaValueAccessor.h:53
bool _owner
Do we own the accessor?
Definition gmLuaValueAccessor.h:81
T * accessor() const
Returns the wrapped accessor.
Definition gmLuaValueAccessor.h:62
T * _ac
The wrapped value accessor object.
Definition gmLuaValueAccessor.h:80
A helper class for implementing the common behaviour between GmLuaValueAccessor, GmLuaCellAccessor an...
Definition gmLuaValueAccessor.h:103
virtual I parseIndex(lua_State *L, int stackPos, QString fname) const =0
Returns the value used as index in accessor calls (either an int, a CmCell* or a GmDiscontinuity*)
A proxy class to export to the Lua environment the common methods between a GmBoundaryConditionAccess...
Definition gmLuaValueAccessor.h:234
const B * _bc
The boundary conditions object used to validate indices in parseIndexX()
Definition gmLuaValueAccessor.h:250
A proxy class to export GmBoundaryConditionAccessor methods to the Lua environment.
Definition gmLuaValueAccessor.h:256
QPair< int, int > I
Type for an object index. Makes the implementation follow closer the one in GmLuaAccessorIndex.
Definition gmLuaValueAccessor.h:272
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:263
GmLuaBoundaryConditionAccessor(GmBoundaryConditionAccessor *ac, const GmBoundaryCondition *bc, const GmLogCategory &logger, bool ownership=true)
Constructor. See comments on the base class.
Definition gmLuaValueAccessor.h:259
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmGaussAccessor object.
Definition gmLuaValueAccessor.h:266
A proxy class to export GmCellAccessor methods to the Lua environment.
Definition gmLuaValueAccessor.h:174
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:179
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmValueAccessor object.
Definition gmLuaValueAccessor.h:182
A proxy class to export GmContactBoundaryConditionAccessor methods to the Lua environment.
Definition gmLuaValueAccessor.h:282
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmGaussAccessor object.
Definition gmLuaValueAccessor.h:292
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:289
GmLuaContactBoundaryConditionAccessor(GmContactBoundaryConditionAccessor *ac, const GmContactBoundaryCondition *bc, const GmLogCategory &logger, bool ownership=true)
Constructor. See comments on the base class.
Definition gmLuaValueAccessor.h:285
A proxy class to export GmDiscontinuityAccessor methods to the Lua environment.
Definition gmLuaValueAccessor.h:308
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:313
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmValueAccessor object.
Definition gmLuaValueAccessor.h:316
A proxy class to export GmGaussAccessor methods to the Lua environment.
Definition gmLuaValueAccessor.h:196
GmElementMesh * _mesh
The associated mesh. Used by parseIndex to validate integration points.
Definition gmLuaValueAccessor.h:223
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:201
QPair< const GmCell *, int > I
Type for an object index. Makes the implementation follow closer the one in GmLuaAccessorIndex.
Definition gmLuaValueAccessor.h:210
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmGaussAccessor object.
Definition gmLuaValueAccessor.h:204
A proxy class to export GmValueAccessor methods to the Lua environment with added support for ghost n...
Definition gmLuaValueAccessor.h:150
bool _isGhostAc
Flags stating if the current accessor accepts ghost indices or not.
Definition gmLuaValueAccessor.h:169
const GmMesh * _mesh
Mesh used to convert node idx.
Definition gmLuaValueAccessor.h:168
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:155
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmNodeValueAccessor object.
Definition gmLuaValueAccessor.h:158
A proxy class to export object methods to the Lua environment.
Definition gmLuaObject.h:36
virtual QString toString() const
Default method used by the __tostring metamethod to capture the result of tostring() over an object.
Definition gmLuaObject.h:55
virtual void fillMetatable(lua_State *L, int index)=0
Function called by populateMetatable() to fill the metatable with exported methods by derived classes...
A proxy class to export GmValueAccessor methods to the Lua environment. Use by property sets only.
Definition gmLuaValueAccessor.h:128
virtual void * getClassMetatableID()
Returns an unique identifier to identify an user object as a GmValueAccessor object.
Definition gmLuaValueAccessor.h:136
virtual const char * typeName() const
Returns the object type as will be stored in the object metatable.
Definition gmLuaValueAccessor.h:133
Declaration of the GmLuaObject class.
arma::vec GmVector
Options for valueStr()
Definition gmLuaValueAccessor.h:68
Type for an object index. Makes the implementation follow closer the one in GmLuaAccessorIndex.
Definition gmLuaValueAccessor.h:298