18 #include "ClassInfo.h"
31 #include "Constants.h"
35 vector<string> objectT;
36 vector<void*> objects;
42 template <
class T> T invokeMethod(
void* instance,
Method method,vals values)
45 string libName = Constants::INTER_LIB_FILE;
46 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
49 cerr << dlerror() << endl;
52 string methodname =
"invokeReflectionCIMethodFor"+method.getMethodName();
53 void *mkr = dlsym(dlib, methodname.c_str());
54 typedef void* (*RfPtr) (
void*,vals);
58 if(method.getReturnType()!=
"void")
59 obj = (T*)f(instance,values);
65 void destroy(
void* instance,
string classn)
67 string libName = Constants::INTER_LIB_FILE;
68 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
71 cerr << dlerror() << endl;
74 string methodname =
"invokeReflectionCIDtorFor"+classn;
75 void *mkr = dlsym(dlib, methodname.c_str());
76 typedef void (*RfPtr) (
void*);
83 void* invokeMethodGVP(
void* instance,
Method method,vals values)
86 string libName = Constants::INTER_LIB_FILE;
87 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
90 cerr << dlerror() << endl;
93 string methodname =
"invokeReflectionCIMethodFor"+method.getMethodName();
94 void *mkr = dlsym(dlib, methodname.c_str());
95 typedef void* (*RfPtr) (
void*,vals);
99 if(method.getReturnType()!=
"void")
100 obj = f(instance,values);
107 template <
class T> T newInstance(
Constructor ctor,vals values)
110 string libName = Constants::INTER_LIB_FILE;
111 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
114 cerr << dlerror() << endl;
117 string methodname =
"invokeReflectionCICtorFor"+ctor.getName();
118 void *mkr = dlsym(dlib, methodname.c_str());
119 typedef void* (*RfPtr) (vals);
120 RfPtr f = (RfPtr)mkr;
125 objectT.push_back(ctor.getName());
126 objects.push_back(obj);
132 return newInstance<T>(ctor,values);
138 string libName = Constants::INTER_LIB_FILE;
139 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
142 cerr << dlerror() << endl;
145 string methodname =
"invokeReflectionCICtorFor"+ctor.getName();
146 void *mkr = dlsym(dlib, methodname.c_str());
147 typedef void* (*RfPtr) (vals);
148 RfPtr f = (RfPtr)mkr;
153 objectT.push_back(ctor.getName());
154 objects.push_back(obj);
160 return newInstanceGVP(ctor,values);
163 void* invokeMethodUnknownReturn(
void* instance,
Method method,vals values)
166 string libName = Constants::INTER_LIB_FILE;
167 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
170 cerr << dlerror() << endl;
173 string methodname =
"invokeReflectionCIMethodFor"+method.getMethodName();
174 void *mkr = dlsym(dlib, methodname.c_str());
175 typedef void* (*RfPtr) (
void*,vals);
176 RfPtr f = (RfPtr)mkr;
179 if(method.getReturnType()!=
"void")
180 obj = f(instance,values);
187 template <
class T> T getField(
void* instance,
Field field)
190 string libName = Constants::INTER_LIB_FILE;
191 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
194 cerr << dlerror() << endl;
197 string fldname =
"invokeReflectionCIFieldFor"+field.getFieldName();
198 void *mkr = dlsym(dlib, fldname.c_str());
199 typedef T (*RfPtr) (
void*);
200 RfPtr f = (RfPtr)mkr;
207 void* execOperator(
void* instance,
string operato,vals values,
string classn)
212 string libName = Constants::INTER_LIB_FILE;
213 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
216 cerr << dlerror() << endl;
219 string opname =
"operator"+classn+
"LT";
220 void *mkr = dlsym(dlib, opname.c_str());
221 typedef void* (*RfPtr) (
void*,vals);
222 RfPtr f = (RfPtr)mkr;
225 resul = f(instance,values);
228 else if(operato==
">")
230 string libName = Constants::INTER_LIB_FILE;
231 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
234 cerr << dlerror() << endl;
237 string opname =
"operator"+classn+
"GT";
238 void *mkr = dlsym(dlib, opname.c_str());
239 typedef void* (*RfPtr) (
void*,vals);
240 RfPtr f = (RfPtr)mkr;
243 resul = f(instance,values);
246 else if(operato==
"==")
248 string libName = Constants::INTER_LIB_FILE;
249 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
252 cerr << dlerror() << endl;
255 string opname =
"operator"+classn+
"EQ";
256 void *mkr = dlsym(dlib, opname.c_str());
257 typedef void* (*RfPtr) (
void*,vals);
258 RfPtr f = (RfPtr)mkr;
261 resul = f(instance,values);
264 else if(operato==
"!=")
266 string libName = Constants::INTER_LIB_FILE;
267 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
270 cerr << dlerror() << endl;
273 string opname =
"operator"+classn+
"NE";
274 void *mkr = dlsym(dlib, opname.c_str());
275 typedef void* (*RfPtr) (
void*,vals);
276 RfPtr f = (RfPtr)mkr;
279 resul = f(instance,values);
282 else if(operato==
"<=")
284 string libName = Constants::INTER_LIB_FILE;
285 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
288 cerr << dlerror() << endl;
291 string opname =
"operator"+classn+
"LE";
292 void *mkr = dlsym(dlib, opname.c_str());
293 typedef void* (*RfPtr) (
void*,vals);
294 RfPtr f = (RfPtr)mkr;
297 resul = f(instance,values);
300 else if(operato==
">=")
302 string libName = Constants::INTER_LIB_FILE;
303 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
306 cerr << dlerror() << endl;
309 string opname =
"operator"+classn+
"GE";
310 void *mkr = dlsym(dlib, opname.c_str());
311 typedef void* (*RfPtr) (
void*,vals);
312 RfPtr f = (RfPtr)mkr;
315 resul = f(instance,values);
318 else if(operato==
"!")
320 string libName = Constants::INTER_LIB_FILE;
321 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
324 cerr << dlerror() << endl;
327 string opname =
"operator"+classn+
"NT";
328 void *mkr = dlsym(dlib, opname.c_str());
329 typedef void* (*RfPtr) (
void*,vals);
330 RfPtr f = (RfPtr)mkr;
333 resul = f(instance,values);
336 else if(operato==
"<<")
340 else if(operato==
">>")
344 else if(operato==
"+")
346 string libName = Constants::INTER_LIB_FILE;
347 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
350 cerr << dlerror() << endl;
353 string opname =
"operator"+classn+
"AD";
354 void *mkr = dlsym(dlib, opname.c_str());
355 typedef void* (*RfPtr) (
void*,vals);
356 RfPtr f = (RfPtr)mkr;
359 resul = f(instance,values);
362 else if(operato==
"-")
364 string libName = Constants::INTER_LIB_FILE;
365 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
368 cerr << dlerror() << endl;
371 string opname =
"operator"+classn+
"SU";
372 void *mkr = dlsym(dlib, opname.c_str());
373 typedef void* (*RfPtr) (
void*,vals);
374 RfPtr f = (RfPtr)mkr;
377 resul = f(instance,values);
380 else if(operato==
"/")
382 string libName = Constants::INTER_LIB_FILE;
383 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
386 cerr << dlerror() << endl;
389 string opname =
"operator"+classn+
"DI";
390 void *mkr = dlsym(dlib, opname.c_str());
391 typedef void* (*RfPtr) (
void*,vals);
392 RfPtr f = (RfPtr)mkr;
395 resul = f(instance,values);
398 else if(operato==
"*")
400 string libName = Constants::INTER_LIB_FILE;
401 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
404 cerr << dlerror() << endl;
407 string opname =
"operator"+classn+
"MU";
408 void *mkr = dlsym(dlib, opname.c_str());
409 typedef void* (*RfPtr) (
void*,vals);
410 RfPtr f = (RfPtr)mkr;
413 resul = f(instance,values);
416 else if(operato==
"&&")
420 else if(operato==
"&")
424 else if(operato==
"||")
428 else if(operato==
"|")
432 else if(operato==
"[]")
436 else if(operato==
"()")
443 void vectorPushBack(
void* vec,
void* instance,
string classN)
445 string libName = Constants::INTER_LIB_FILE;
446 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
449 cerr << dlerror() << endl;
452 string methodname =
"invokeAdToVecFor"+classN;
453 void *mkr = dlsym(dlib, methodname.c_str());
454 typedef void* (*RfPtr) (
void*,
void*);
455 RfPtr f = (RfPtr)mkr;
461 void* getNewVector(
string classN)
464 string libName = Constants::INTER_LIB_FILE;
465 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
468 cerr << dlerror() << endl;
471 string methodname =
"invokeGetNewVecFor"+classN;
472 void *mkr = dlsym(dlib, methodname.c_str());
473 typedef void* (*RfPtr) ();
474 RfPtr f = (RfPtr)mkr;
481 int getVectorSize(
void* vec,
string classN)
484 string libName = Constants::INTER_LIB_FILE;
485 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
488 cerr << dlerror() << endl;
491 string methodname =
"invokeGetVecSizeFor"+classN;
492 void *mkr = dlsym(dlib, methodname.c_str());
493 typedef int (*RfPtr) (
void*);
494 RfPtr f = (RfPtr)mkr;
501 void* getVectorElement(
void* vec,
int pos,
string classN)
504 string libName = Constants::INTER_LIB_FILE;
505 void *dlib = dlopen(libName.c_str(), RTLD_NOW);
508 cerr << dlerror() << endl;
511 string methodname =
"invokeGetVecElementFor"+classN;
512 void *mkr = dlsym(dlib, methodname.c_str());
513 typedef void* (*RfPtr) (
void*,int);
514 RfPtr f = (RfPtr)mkr;