You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2296 lines
93KB

  1. /// ----
  2. /// ---- file : yac_host.cpp
  3. /// ----
  4. /// ---- author : (c) 2003 - 2018 by bsp
  5. /// ----
  6. /// ---- date : 21-Nov-2003 / 27-Jun-2003 / 13-Feb-2004 / 17-Feb-2004 / 19-Feb-2004 / 26-Mar-2004
  7. /// ---- 19-Feb-2005 / 24-Feb-2005 / 12-Mar-2005 / 19-Mar-2005 / 07-May-2005 / 28-Aug-2005
  8. /// ---- 05-Sep-2005 / 28-Nov-2005 / 03-Feb-2006 / 05-Feb-2006 / 07-Feb-2006 / 24-Apr-2006
  9. /// ---- 13-May-2006 / 01-Feb-2008 / 18-Feb-2008 / 24-Feb-2008 / 22-Mar-2008 / 14-Sep-2008
  10. /// ---- 08-Jan-2009 / 05-Mar-2009 / 01-Apr-2009 / 04-Apr-2009 / 18-Apr-2009 / 04-May-2009
  11. /// ---- 01-Jun-2009 / 11-Jul-2010 / 21-Apr-2011 / 21-Dec-2012 / 13-Aug-2013 / 05-Feb-2014
  12. /// ---- 26-Jun-2018
  13. /// ----
  14. /// ---- info : YAC - Yet Another Component object model. originally for the "tks" project
  15. /// ----
  16. /// ---- license: MIT. See LICENSE.txt.
  17. /// ----
  18. /// ----
  19. #ifndef __YAC_HOST_CPP__
  20. #define __YAC_HOST_CPP__
  21. //
  22. // Define Dyac_object_counter_inc/dec macros before including this file to override
  23. // the default implementation
  24. //
  25. #ifndef Dyac_object_counter_inc
  26. #ifdef YAC_OBJECT_COUNTER
  27. #define Dyac_object_counter_inc YAC_Object::object_counter++
  28. #define Dyac_object_counter_dec YAC_Object::object_counter--
  29. #else
  30. #define Dyac_object_counter_inc (void)0
  31. #define Dyac_object_counter_dec (void)0
  32. #endif // YAC_OBJECT_COUNTER
  33. #endif // Dyac_object_counter_inc
  34. #ifdef YAC_TRACK_CHARALLOC
  35. sSI yac_string_total_char_size = 0;
  36. sSI yac_string_peak_char_size = 0;
  37. sU8 *yac_string_alloc_chars(size_t _n) {
  38. yac_string_total_char_size += _n;
  39. if(yac_string_total_char_size > yac_string_peak_char_size)
  40. {
  41. yac_string_peak_char_size = yac_string_total_char_size;
  42. }
  43. sSI *adr = (sSI*)::malloc(_n + sizeof(sSI));
  44. *adr = _n;
  45. return (sU8*) (adr + 1);
  46. }
  47. void yac_string_free_chars(sU8 *_chars) {
  48. sSI *adr = ((sSI*)_chars) - 1;
  49. yac_string_total_char_size -= *adr;
  50. ::free(adr);
  51. }
  52. #endif // YAC_TRACK_CHARALLOC
  53. #ifndef YAC_CUST_VALUE
  54. YAC_Value::YAC_Value (void) {type=0;}
  55. YAC_Value::~YAC_Value () { }
  56. void YAC_Value::initVoid (void) {deleteme=0;type=0;value.any=0;}
  57. void YAC_Value::initInt (sSI _i) {deleteme=0;type=1;value.int_val=_i;}
  58. void YAC_Value::initFloat (sF32 _f) {deleteme=0;type=2;value.float_val=_f;}
  59. void YAC_Value::initString (YAC_String *_s, sBool _del) {deleteme=_del;type=4;value.string_val=_s;}
  60. void YAC_Value::initNewString (YAC_String *s) {unsetFast(); type=4; deleteme=1; value.string_val=YAC_New_String(); value.string_val->yacCopy(s); }
  61. void YAC_Value::initObject (YAC_Object *_o, sBool _del) {deleteme=_del;type=3;value.object_val=_o;}
  62. void YAC_Value::initNull (void) {unsetFast(); type=YAC_TYPE_OBJECT; value.any = 0; deleteme = 0; }
  63. void YAC_Value::safeInitInt (sSI _i) {unsetFast(); initInt(_i); }
  64. void YAC_Value::safeInitFloat (sF32 _f) {unsetFast(); initFloat(_f); }
  65. void YAC_Value::safeInitString (YAC_String *_s, sBool _del) {unsetFast(); initString(_s, _del); }
  66. void YAC_Value::safeInitObject (YAC_Object *_o, sBool _new) {unsetFast(); initObject(_o, _new); }
  67. void YAC_Value::initEmptyString (void) {deleteme=1; type=YAC_TYPE_STRING; value.string_val=(YAC_String*)YAC_NEW_CORE_POOLED(YAC_CLID_STRING);}
  68. void YAC_Value::typecast (sUI _type) {
  69. sSI i_t;
  70. sF32 f_t;
  71. switch(_type)
  72. {
  73. default:
  74. unset();
  75. break;
  76. case 1:
  77. switch(type)
  78. {
  79. default:
  80. case 0:
  81. initInt(0);
  82. break;
  83. case 1:
  84. break;
  85. case 2:
  86. initInt((sSI)value.float_val);
  87. break;
  88. case 3:
  89. //i_t=(value.object_val!=0);
  90. //safeInitInt(i_t);
  91. if(value.object_val)
  92. {
  93. value.object_val->yacScanI(&i_t);
  94. safeInitInt(i_t);
  95. }
  96. else
  97. initInt(0);
  98. break;
  99. case 4:
  100. if(value.string_val)
  101. {
  102. ////if(value.string_val->checkFloatConversion())
  103. {
  104. value.string_val->yacScanF32(&f_t);
  105. safeInitInt((sSI)f_t);
  106. }
  107. ////else
  108. //// {
  109. //// value.string_val->yacScanI(&i_t);
  110. //// safeInitInt(i_t);
  111. ///}
  112. }
  113. else
  114. {
  115. safeInitInt(0);
  116. }
  117. break;
  118. }
  119. break;
  120. case 2:
  121. switch(type)
  122. {
  123. default:
  124. case 0:
  125. initFloat(0.0f);
  126. break;
  127. case 1:
  128. initFloat((sF32)value.int_val);
  129. break;
  130. case 2:
  131. break;
  132. case 3:
  133. case 4:
  134. // ---- convert object to float value
  135. if(value.object_val)
  136. value.object_val->yacScanF32(&f_t);
  137. else
  138. f_t=0.0f;
  139. safeInitFloat(f_t);
  140. break;
  141. }
  142. break;
  143. case 3:
  144. switch(type)
  145. {
  146. default:
  147. case YAC_TYPE_VOID:
  148. // ---- typecast void to "null" Object
  149. initObject(NULL, 0);
  150. break;
  151. case YAC_TYPE_INT:
  152. // ---- typecast int to Integer Object
  153. {
  154. YAC_Integer *io = (YAC_Integer*) YAC_NEW_CORE_POOLED(YAC_CLID_INTEGER);
  155. io->value=value.int_val;
  156. initObject(io, 1);
  157. }
  158. break;
  159. case YAC_TYPE_FLOAT:
  160. // ---- typecast float to Float Object
  161. {
  162. YAC_Float *fo = (YAC_Float*) YAC_NEW_CORE_POOLED(YAC_CLID_FLOAT);
  163. fo->value=value.float_val;
  164. initObject(fo, 1);
  165. }
  166. break;
  167. case YAC_TYPE_OBJECT:
  168. case YAC_TYPE_STRING:
  169. break;
  170. }
  171. break;
  172. case 4:
  173. {
  174. //YAC_String *s;
  175. switch(type)
  176. {
  177. default:
  178. case YAC_TYPE_VOID:
  179. initEmptyString();
  180. break;
  181. case YAC_TYPE_INT:
  182. i_t = value.int_val;
  183. value.string_val = (YAC_String*) YAC_NEW_CORE_POOLED(YAC_CLID_STRING16);
  184. value.string_val->printf("%i", i_t);
  185. deleteme=1;
  186. type=YAC_TYPE_STRING;
  187. break;
  188. case YAC_TYPE_FLOAT:
  189. f_t = value.float_val;
  190. value.string_val = (YAC_String*) YAC_NEW_CORE_POOLED(YAC_CLID_STRING32);
  191. value.string_val->printf("%g", f_t);
  192. deleteme=1;
  193. type=YAC_TYPE_STRING;
  194. break;
  195. case YAC_TYPE_OBJECT:
  196. if(YAC_VALID(value.object_val))
  197. {
  198. if(value.object_val->class_ID!=YAC_CLID_STRING) // string fix?
  199. {
  200. YAC_String *s = (YAC_String*) YAC_NEW_CORE_POOLED(YAC_CLID_STRING);
  201. value.object_val->yacToString(s); // convert Object to String
  202. safeInitString(s, 1);
  203. }
  204. }
  205. else
  206. {
  207. // ---- convert null object to empty String ""
  208. initString((YAC_String*) YAC_NEW_CORE_POOLED(YAC_CLID_STRING), 1);
  209. }
  210. break;
  211. case YAC_TYPE_STRING:
  212. break;
  213. }
  214. }
  215. break;
  216. }
  217. }
  218. void YAC_Value::unsetFast (void) {if(type>=YAC_TYPE_OBJECT&&deleteme&&value.any)yac_host->yacDelete(value.object_val);}
  219. void YAC_Value::unset (void) {if(type>=YAC_TYPE_OBJECT&&deleteme&&value.any)yac_host->yacDelete(value.object_val);value.object_val=0;type=0;deleteme=0;}
  220. void YAC_Value::operator = (YAC_Value *_v) {deleteme=_v->deleteme;_v->deleteme=0;type=_v->type;value=_v->value;};
  221. void YAC_Value::copyRef (const YAC_Value *_o) {type=_o->type;class_type=_o->class_type;value.any=_o->value.any;deleteme=0;}
  222. #endif
  223. #ifndef YAC_CUST_EVENT
  224. YAC_Event::YAC_Event (void) {class_ID=YAC_CLID_EVENT;}
  225. YAC_Event::~YAC_Event () { }
  226. #endif // YAC_CUST_EVENT
  227. #ifndef YAC_CUST_LISTNODE
  228. YAC_ListNode::YAC_ListNode (void) {class_ID=YAC_CLID_LISTNODE;prev=next=0;}
  229. YAC_ListNode::~YAC_ListNode () {if(next){yac_host->yacDelete(next);next=0;}unset();}
  230. #endif
  231. #ifndef YAC_CUST_TREENODE
  232. YAC_TreeNode::YAC_TreeNode (void) {class_ID=YAC_CLID_TREENODE;left=0;right=0;deleteme=0;value.int_val=0;}
  233. YAC_TreeNode::~YAC_TreeNode () {if(left){yac_host->yacDelete(left);left=0;}if(right){yac_host->yacDelete(right); right=0;}unset();}
  234. #endif
  235. // ----
  236. // ----
  237. // ---- LEVEL (1<<0) interface
  238. // ---- ( C++ reflectance support )
  239. // ----
  240. // ----
  241. #ifdef YAC_OBJECT_COUNTER
  242. sUI YAC_Object::object_counter =0;
  243. #endif //YAC_OBJECT_COUNTER
  244. YAC_Object::YAC_Object (void) {
  245. Dyac_object_counter_inc;
  246. #ifdef YAC_OBJECT_TAGS
  247. validation_tag = YAC_VALID_TAG;
  248. #endif
  249. #ifdef YAC_OBJECT_POOL
  250. pool_handle.pool_id = 0;
  251. #endif // YAC_OBJECT_POOL
  252. // Note: pool_handle initialization is left out by intention! (it has already been set *before* this constructor is called!)
  253. }
  254. YAC_Object::~YAC_Object () {
  255. Dyac_object_counter_dec;
  256. #ifdef YAC_OBJECT_TAGS
  257. validation_tag = YAC_INVALID_TAG;
  258. #endif
  259. #ifdef YAC_OBJECT_POOL
  260. pool_handle.pool_id = 0;
  261. #endif // YAC_OBJECT_POOL
  262. }
  263. sUI YAC_VCALL YAC_Object::yacQueryInterfaces (void) {return YAC_INTERFACE_ALL;}
  264. #ifndef YAC_CUST_OBJECT
  265. const sChar* YAC_VCALL YAC_Object::yacClassName (void) {return "null";}
  266. YAC_Object* YAC_VCALL YAC_Object::yacNewObject (void) {return 0;}
  267. sUI YAC_VCALL YAC_Object::yacMemberGetNum (void) {return 0;}
  268. const char **YAC_VCALL YAC_Object::yacMemberGetNames (void) {return 0;}
  269. const sUI *YAC_VCALL YAC_Object::yacMemberGetTypes (void) {return 0;}
  270. const char **YAC_VCALL YAC_Object::yacMemberGetObjectTypes (void) {return 0;}
  271. const sU8 **YAC_VCALL YAC_Object::yacMemberGetOffsets (void) {return (const sU8**)0;}
  272. sUI YAC_VCALL YAC_Object::yacMethodGetNum (void) {return 0;}
  273. const char **YAC_VCALL YAC_Object::yacMethodGetNames (void) {return 0;}
  274. const sUI *YAC_VCALL YAC_Object::yacMethodGetNumParameters (void) {return 0;}
  275. const sUI **YAC_VCALL YAC_Object::yacMethodGetParameterTypes (void) {return 0;}
  276. const char ***YAC_VCALL YAC_Object::yacMethodGetParameterObjectTypes(void) {return 0;}
  277. const sUI *YAC_VCALL YAC_Object::yacMethodGetReturnTypes (void) {return 0;}
  278. const char **YAC_VCALL YAC_Object::yacMethodGetReturnObjectTypes (void) {return 0;}
  279. const void **YAC_VCALL YAC_Object::yacMethodGetAdr (void) {return 0;}
  280. sUI YAC_VCALL YAC_Object::yacConstantGetNum (void) {return 0;}
  281. const char **YAC_VCALL YAC_Object::yacConstantGetNames (void) {return 0;}
  282. const sUI *YAC_VCALL YAC_Object::yacConstantGetTypes (void) {return 0;}
  283. yacmemptr YAC_VCALL YAC_Object::yacConstantGetValues (void) {yacmemptr r; r.any=0; return r;}
  284. #endif // YAC_CUST_OBJECT
  285. void YAC_VCALL YAC_Object::yacFinalizeObject (YAC_ContextHandle) { }
  286. void YAC_VCALL YAC_Object::yacGetConstantStringList (YAC_String *) { }
  287. sBool YAC_VCALL YAC_Object::yacIsComposite (void) {return 0;}
  288. sUI YAC_VCALL YAC_Object::yacPoolGetSize (void) {return 0;}
  289. void YAC_VCALL YAC_Object::yacPoolInit (YAC_Object *) { }
  290. sUI YAC_VCALL YAC_Object::yacPoolGetPriority (void) {return 0;}
  291. void YAC_VCALL YAC_Object::vtable_entry_0_25_reserved (void) { }
  292. void YAC_VCALL YAC_Object::vtable_entry_0_26_reserved (void) { }
  293. void YAC_VCALL YAC_Object::vtable_entry_0_27_reserved (void) { }
  294. void YAC_VCALL YAC_Object::vtable_entry_0_28_reserved (void) { }
  295. void YAC_VCALL YAC_Object::vtable_entry_0_29_reserved (void) { }
  296. void YAC_VCALL YAC_Object::vtable_entry_0_30_reserved (void) { }
  297. void YAC_VCALL YAC_Object::vtable_entry_0_31_reserved (void) { }
  298. // ----
  299. // ----
  300. // ---- LEVEL (1<<1) interface
  301. // ---- ( operator support )
  302. // ---- - also see YAC_OP_xxx constants
  303. // ----
  304. // ----
  305. void YAC_VCALL Object__operator (void *_o, yacmemptr _args,YAC_Value*_v){((YAC_Object*)_o)->yacOperator(_args.si[0], _args.io[1], _v);}
  306. sBool YAC_VCALL YAC_Object::yacCopy (YAC_Object *) {return 0;}
  307. sBool YAC_VCALL YAC_Object::yacEquals (YAC_Object *_o) {return ((void*)this)==((void*)_o);}
  308. void YAC_VCALL YAC_Object::yacOperator (sSI _i, YAC_Object *_o, YAC_Value *_r) {
  309. switch(_i) {
  310. case YAC_OP_SHL: if(YAC_IS_STREAM(_o)){yacDeserialize(_o,1/**include type information**/);} break;
  311. case YAC_OP_CLT: _r->initInt(0); break;
  312. case YAC_OP_CLE: _r->initInt(0); break;
  313. case YAC_OP_CEQ:
  314. if(_o)
  315. if(class_ID==YAC_CLID_OBJECT/*null*/)
  316. _r->initInt(_o->class_ID==YAC_CLID_OBJECT);
  317. else
  318. _r->initInt(((void*)this)==((void*)_o));
  319. else
  320. _r->initInt(class_ID==YAC_CLID_OBJECT/*null*/);
  321. break;
  322. case YAC_OP_CNE:
  323. //_r->initInt(((sUI)this)!=((sUI)_o)); break;
  324. if(_o)
  325. if(class_ID==YAC_CLID_OBJECT/*null*/)
  326. _r->initInt(_o->class_ID!=YAC_CLID_OBJECT);
  327. else
  328. _r->initInt(((void*)this)!=((void*)_o));
  329. else
  330. _r->initInt(class_ID!=YAC_CLID_OBJECT/*null*/);
  331. break;
  332. case YAC_OP_CGE: _r->initInt(0); break;
  333. case YAC_OP_CGT: _r->initInt(0); break;
  334. }
  335. }
  336. void YAC_VCALL YAC_Object::yacOperatorInit (void *_context, YAC_Object *_robj) {YAC_Value r;yacOperator(YAC_OP_INIT,_robj,&r);r.unsetFast();}
  337. void YAC_VCALL YAC_Object::yacOperatorAssign (YAC_Object *_robj) {YAC_Value r;yacOperator(YAC_OP_ASSIGN,_robj,&r);r.unsetFast();}
  338. void YAC_VCALL YAC_Object::yacOperatorAdd (YAC_Object *_robj) {YAC_Value ret;yacOperator(YAC_OP_ADD,_robj,&ret);ret.unsetFast();}
  339. void YAC_VCALL YAC_Object::yacOperatorSub (YAC_Object *_robj) {YAC_Value ret;yacOperator(YAC_OP_SUB,_robj,&ret);ret.unsetFast();}
  340. void YAC_VCALL YAC_Object::yacOperatorMul (YAC_Object *_robj) {YAC_Value ret;yacOperator(YAC_OP_MUL,_robj,&ret);ret.unsetFast();}
  341. void YAC_VCALL YAC_Object::yacOperatorDiv (YAC_Object *_robj) {YAC_Value ret;yacOperator(YAC_OP_DIV,_robj,&ret);ret.unsetFast();}
  342. void YAC_VCALL YAC_Object::yacOperatorClamp (YAC_Object *, YAC_Object *) { }
  343. void YAC_VCALL YAC_Object::yacOperatorWrap (YAC_Object *, YAC_Object *) { }
  344. sBool YAC_VCALL YAC_Object::yacScanI (sSI *_ip) {*_ip=0; return 0;}
  345. sBool YAC_VCALL YAC_Object::yacScanF32 (sF32 *_fp) {*_fp=0.0f;return 0;}
  346. sBool YAC_VCALL YAC_Object::yacScanF64 (sF64 *_dp) {*_dp=0.0; return 0;}
  347. sBool YAC_VCALL YAC_Object::yacToString (YAC_String *) const {return 0;}
  348. sBool YAC_VCALL YAC_Object::yacScanI64 (sS64 *) {return 0;}
  349. void YAC_VCALL YAC_Object::yacOperatorI (sSI _cmd,sSI _val,YAC_Value *) {if(_cmd==YAC_OP_ASSIGN)yacValueOfI(_val);}
  350. void YAC_VCALL YAC_Object::yacOperatorF32 (sSI _cmd,sF32 _val,YAC_Value *_r) {if(_cmd==YAC_OP_ASSIGN)yacValueOfF32(_val);else yacOperatorI(_cmd, (sSI)_val, _r);}
  351. void YAC_VCALL YAC_Object::yacOperatorF64 (sSI _cmd,sF64 _val,YAC_Value *_r) {if(_cmd==YAC_OP_ASSIGN)yacValueOfF64(_val);else yacOperatorF32(_cmd, (sF32)_val, _r);}
  352. void YAC_VCALL YAC_Object::yacValueOfI (sSI) {}
  353. void YAC_VCALL YAC_Object::yacValueOfF32 (sF32 _val) {yacValueOfI((sSI)_val);}
  354. void YAC_VCALL YAC_Object::yacValueOfF64 (sF64 _val) {yacValueOfF32((sF32)_val);}
  355. sUI YAC_VCALL YAC_Object::yacOperatorPriority (void) {return 0;}
  356. void YAC_VCALL YAC_Object::yacValueOfI64 (sS64 _val) {yacValueOfI((sSI)_val);}
  357. sSI YAC_VCALL YAC_Object::yacTensorRank (void) {return YAC_TENSOR_RANK_NONE;}
  358. sBool YAC_VCALL YAC_Object::yacToParsableString (YAC_String *s) const {return yacToString(s);}
  359. void YAC_VCALL YAC_Object::yacOperatorI64 (sSI _cmd,sS64 _val,YAC_Value *_r) {if(_cmd==YAC_OP_ASSIGN)yacValueOfI64(_val);else yacOperatorI(_cmd, (sSI)_val, _r);}
  360. void YAC_VCALL YAC_Object::vtable_entry_1_28_reserved (void) { }
  361. void YAC_VCALL YAC_Object::vtable_entry_1_29_reserved (void) { }
  362. void YAC_VCALL YAC_Object::vtable_entry_1_30_reserved (void) { }
  363. void YAC_VCALL YAC_Object::vtable_entry_1_31_reserved (void) { }
  364. // ----
  365. // ----
  366. // ---- LEVEL (1<<2) interface
  367. // ---- ( stream support )
  368. // ----
  369. // ----
  370. // ----
  371. sBool YAC_VCALL YAC_Object::yacIsStream (void) {return 0;}
  372. void YAC_VCALL YAC_Object::yacStreamClose (void) { }
  373. sBool YAC_VCALL YAC_Object::yacStreamOpenLocal (sChar *, sSI) {return 0;}
  374. sBool YAC_VCALL YAC_Object::yacStreamOpenLogic (sChar *) {return 0;}
  375. sUI YAC_VCALL YAC_Object::yacStreamGetByteOrder (void) {return 0;}
  376. void YAC_VCALL YAC_Object::yacStreamSetByteOrder (sUI) { }
  377. sBool YAC_VCALL YAC_Object::yacStreamEOF (void) {return 1;}
  378. void YAC_VCALL YAC_Object::yacStreamSeek (sSI, sUI) { }
  379. sUI YAC_VCALL YAC_Object::yacStreamGetOffset (void) {return 0;}
  380. void YAC_VCALL YAC_Object::yacStreamSetOffset (sUI) { }
  381. sUI YAC_VCALL YAC_Object::yacStreamGetSize (void) {return 0;}
  382. sSI YAC_VCALL YAC_Object::yacStreamRead (sU8 *, sUI) {return 0;}
  383. sU8 YAC_VCALL YAC_Object::yacStreamReadI8 (void) {return 0;}
  384. sU16 YAC_VCALL YAC_Object::yacStreamReadI16 (void) {return 0;}
  385. sU32 YAC_VCALL YAC_Object::yacStreamReadI32 (void) {return 0;}
  386. sF32 YAC_VCALL YAC_Object::yacStreamReadF32 (void) {return 0;}
  387. void YAC_VCALL YAC_Object::yacStreamReadObject (YAC_Object *) { }
  388. sSI YAC_VCALL YAC_Object::yacStreamReadString (YAC_String *, sUI) {return 0;}
  389. sSI YAC_VCALL YAC_Object::yacStreamReadBuffer (YAC_Buffer *, sUI, sUI, sBool) {return 0;}
  390. sSI YAC_VCALL YAC_Object::yacStreamReadLine (YAC_String *, sUI) {return 0;}
  391. sSI YAC_VCALL YAC_Object::yacStreamWrite (sU8 *, sUI) {return 0;}
  392. void YAC_VCALL YAC_Object::yacStreamWriteI8 (sU8) { }
  393. void YAC_VCALL YAC_Object::yacStreamWriteI16 (sU16) { }
  394. void YAC_VCALL YAC_Object::yacStreamWriteI32 (sS32) { }
  395. void YAC_VCALL YAC_Object::yacStreamWriteF32 (sF32) { }
  396. void YAC_VCALL YAC_Object::yacStreamWriteObject (YAC_Object*) { }
  397. sSI YAC_VCALL YAC_Object::yacStreamWriteString (YAC_String *, sUI, sUI) {return 0;}
  398. sSI YAC_VCALL YAC_Object::yacStreamWriteBuffer (YAC_Buffer *, sUI, sUI) {return 0;}
  399. sSI YAC_VCALL YAC_Object::yacStreamGetErrorCode (void) {return 0xCCCCCCCC;}
  400. void YAC_VCALL YAC_Object::yacStreamGetErrorStringByCode (sSI, YAC_Value *) { }
  401. sF64 YAC_VCALL YAC_Object::yacStreamReadF64 (void) {return 0;}
  402. void YAC_VCALL YAC_Object::yacStreamWriteF64 (sF64) { }
  403. sU64 YAC_VCALL YAC_Object::yacStreamReadI64 (void) {return 0;}
  404. void YAC_VCALL YAC_Object::yacStreamWriteI64 (sS64) { }
  405. void YAC_VCALL YAC_Object::vtable_entry_2_35_reserved (void) { }
  406. void YAC_VCALL YAC_Object::vtable_entry_2_36_reserved (void) { }
  407. void YAC_VCALL YAC_Object::vtable_entry_2_37_reserved (void) { }
  408. void YAC_VCALL YAC_Object::vtable_entry_2_38_reserved (void) { }
  409. void YAC_VCALL YAC_Object::vtable_entry_2_39_reserved (void) { }
  410. void YAC_VCALL YAC_Object::vtable_entry_2_40_reserved (void) { }
  411. void YAC_VCALL YAC_Object::vtable_entry_2_41_reserved (void) { }
  412. void YAC_VCALL YAC_Object::vtable_entry_2_42_reserved (void) { }
  413. void YAC_VCALL YAC_Object::vtable_entry_2_43_reserved (void) { }
  414. void YAC_VCALL YAC_Object::vtable_entry_2_44_reserved (void) { }
  415. void YAC_VCALL YAC_Object::vtable_entry_2_45_reserved (void) { }
  416. void YAC_VCALL YAC_Object::vtable_entry_2_46_reserved (void) { }
  417. void YAC_VCALL YAC_Object::vtable_entry_2_47_reserved (void) { }
  418. // ----
  419. // ----
  420. // ---- LEVEL (1<<3) interface
  421. // ---- ( serialization support )
  422. // ----
  423. // ----
  424. // ----
  425. void YAC_VCALL YAC_Object::yacSerializeClassName (YAC_Object *_ofs) {YAC_String cln;cln.visit((sChar*)yacClassName());cln.yacSerialize(_ofs, 0);}
  426. void YAC_VCALL YAC_Object::yacSerialize (YAC_Object *, sUI) { }
  427. sUI YAC_VCALL YAC_Object::yacDeserialize (YAC_Object *, sUI) {return 0;}
  428. void YAC_VCALL YAC_Object::vtable_entry_3_3_reserved (void) { }
  429. void YAC_VCALL YAC_Object::vtable_entry_3_4_reserved (void) { }
  430. void YAC_VCALL YAC_Object::vtable_entry_3_5_reserved (void) { }
  431. void YAC_VCALL YAC_Object::vtable_entry_3_6_reserved (void) { }
  432. void YAC_VCALL YAC_Object::vtable_entry_3_7_reserved (void) { }
  433. void YAC_VCALL YAC_Object::vtable_entry_3_8_reserved (void) { }
  434. void YAC_VCALL YAC_Object::vtable_entry_3_9_reserved (void) { }
  435. void YAC_VCALL YAC_Object::vtable_entry_3_10_reserved (void) { }
  436. void YAC_VCALL YAC_Object::vtable_entry_3_11_reserved (void) { }
  437. void YAC_VCALL YAC_Object::vtable_entry_3_12_reserved (void) { }
  438. void YAC_VCALL YAC_Object::vtable_entry_3_13_reserved (void) { }
  439. void YAC_VCALL YAC_Object::vtable_entry_3_14_reserved (void) { }
  440. void YAC_VCALL YAC_Object::vtable_entry_3_15_reserved (void) { }
  441. // ----
  442. // ----
  443. // ---- LEVEL (1<<4) interface
  444. // ---- ( iterator support )
  445. // ----
  446. // ----
  447. // ----
  448. sBool YAC_VCALL YAC_Object::yacIteratorInit (YAC_Iterator *) const {return 0;}
  449. void YAC_VCALL YAC_Object::vtable_entry_4_1_reserved (void) { }
  450. void YAC_VCALL YAC_Object::vtable_entry_4_2_reserved (void) { }
  451. void YAC_VCALL YAC_Object::vtable_entry_4_3_reserved (void) { }
  452. void YAC_VCALL YAC_Object::vtable_entry_4_4_reserved (void) { }
  453. void YAC_VCALL YAC_Object::vtable_entry_4_5_reserved (void) { }
  454. void YAC_VCALL YAC_Object::vtable_entry_4_6_reserved (void) { }
  455. void YAC_VCALL YAC_Object::vtable_entry_4_7_reserved (void) { }
  456. void YAC_VCALL YAC_Object::vtable_entry_4_8_reserved (void) { }
  457. void YAC_VCALL YAC_Object::vtable_entry_4_9_reserved (void) { }
  458. void YAC_VCALL YAC_Object::vtable_entry_4_10_reserved (void) { }
  459. void YAC_VCALL YAC_Object::vtable_entry_4_11_reserved (void) { }
  460. void YAC_VCALL YAC_Object::vtable_entry_4_12_reserved (void) { }
  461. void YAC_VCALL YAC_Object::vtable_entry_4_13_reserved (void) { }
  462. void YAC_VCALL YAC_Object::vtable_entry_4_14_reserved (void) { }
  463. void YAC_VCALL YAC_Object::vtable_entry_4_15_reserved (void) { }
  464. // ----
  465. // ----
  466. // ---- LEVEL (1<<5) interface
  467. // ---- ( array and hashtable support )
  468. // ----
  469. // ----
  470. // ----
  471. YAC_Object* YAC_VCALL YAC_Object::yacArrayNew (void) {return 0;}
  472. sUI YAC_VCALL YAC_Object::yacArrayAlloc (sUI, sUI, sUI, sUI) {return 0;}
  473. sBool YAC_VCALL YAC_Object::yacArrayRealloc (sUI,sUI,sUI,sUI) {return 0;}
  474. sUI YAC_VCALL YAC_Object::yacArrayGetNumElements (void) {return 0;}
  475. sUI YAC_VCALL YAC_Object::yacArrayGetMaxElements (void) {return 0;}
  476. void YAC_VCALL YAC_Object::yacArrayCopySize (YAC_Object *) { }
  477. void YAC_VCALL YAC_Object::yacArraySet (void *_context, sUI, YAC_Value *) { }
  478. void YAC_VCALL YAC_Object::yacArrayGet (void *_context, sUI, YAC_Value *) { }
  479. sUI YAC_VCALL YAC_Object::yacArrayGetWidth (void) {return 0;}
  480. sUI YAC_VCALL YAC_Object::yacArrayGetHeight (void) {return 0;}
  481. sUI YAC_VCALL YAC_Object::yacArrayGetElementType (void) {return 0;}
  482. sUI YAC_VCALL YAC_Object::yacArrayGetElementByteSize (void) {return 0;}
  483. sUI YAC_VCALL YAC_Object::yacArrayGetStride (void) {return 0;}
  484. void * YAC_VCALL YAC_Object::yacArrayGetPointer (void) {return 0;}
  485. void YAC_VCALL YAC_Object::yacArraySetWidth (sUI) { }
  486. void YAC_VCALL YAC_Object::yacArraySetTemplate (YAC_Object *) { }
  487. void YAC_VCALL YAC_Object::yacArrayGetDeref (void *_context, sUI _i, YAC_Value *_r) {yacArrayGet(_context, _i, _r);}
  488. void YAC_VCALL YAC_Object::vtable_entry_5_17_reserved (void) { }
  489. void YAC_VCALL YAC_Object::vtable_entry_5_18_reserved (void) { }
  490. void YAC_VCALL YAC_Object::vtable_entry_5_19_reserved (void) { }
  491. void YAC_VCALL YAC_Object::vtable_entry_5_20_reserved (void) { }
  492. void YAC_VCALL YAC_Object::vtable_entry_5_21_reserved (void) { }
  493. void YAC_VCALL YAC_Object::vtable_entry_5_22_reserved (void) { }
  494. void YAC_VCALL YAC_Object::vtable_entry_5_23_reserved (void) { }
  495. void YAC_VCALL YAC_Object::vtable_entry_5_24_reserved (void) { }
  496. void YAC_VCALL YAC_Object::vtable_entry_5_25_reserved (void) { }
  497. void YAC_VCALL YAC_Object::vtable_entry_5_26_reserved (void) { }
  498. void YAC_VCALL YAC_Object::vtable_entry_5_27_reserved (void) { }
  499. void YAC_VCALL YAC_Object::vtable_entry_5_28_reserved (void) { }
  500. void YAC_VCALL YAC_Object::vtable_entry_5_29_reserved (void) { }
  501. void YAC_VCALL YAC_Object::vtable_entry_5_30_reserved (void) { }
  502. void YAC_VCALL YAC_Object::vtable_entry_5_31_reserved (void) { }
  503. void YAC_VCALL YAC_Object::yacHashSet (void *_context, YAC_String *_s, YAC_Value *_v) {
  504. sSI i=0;
  505. if(YAC_Is_String(_s))
  506. {
  507. YAC_String *s=(YAC_String*)_s;
  508. s->yacScanI(&i);
  509. }
  510. yacArraySet(_context, (sUI)i, _v);
  511. }
  512. void YAC_VCALL YAC_Object::yacHashGet (void *_context, YAC_String*_s, YAC_Value *_v) {
  513. sSI i=0;
  514. if(YAC_Is_String(_s))
  515. {
  516. YAC_String *s=(YAC_String*)_s;
  517. s->yacScanI(&i);
  518. }
  519. yacArrayGet(_context, (sUI)i, _v);
  520. }
  521. void YAC_VCALL YAC_Object::yacHashGetDeref (void *_context, YAC_String*_s, YAC_Value *_v) {yacHashGet(NULL, _s, _v);} // xxx TKS_MT: should use *real* thread context (exceptions!)
  522. void YAC_VCALL YAC_Object::vtable_entry_5_35_reserved (void) { }
  523. void YAC_VCALL YAC_Object::vtable_entry_5_36_reserved (void) { }
  524. void YAC_VCALL YAC_Object::vtable_entry_5_37_reserved (void) { }
  525. void YAC_VCALL YAC_Object::vtable_entry_5_38_reserved (void) { }
  526. void YAC_VCALL YAC_Object::vtable_entry_5_39_reserved (void) { }
  527. // ----
  528. // ----
  529. // ---- LEVEL (1<<6) interface
  530. // ---- ( metaclass support )
  531. // ----
  532. // ----
  533. // ----
  534. sChar * YAC_VCALL YAC_Object::yacMetaClassName (void) {return 0;}
  535. sUI YAC_VCALL YAC_Object::yacMetaClassMemberGetNum (void) {return 0;}
  536. sUI YAC_VCALL YAC_Object::yacMetaClassMemberGetAccessKeyByIndex(sUI) {return 0;}
  537. sUI YAC_VCALL YAC_Object::yacMetaClassMemberGetAccessKeyByName (const sChar *) {return 0;}
  538. sUI YAC_VCALL YAC_Object::yacMetaClassMemberGetType (sUI) {return 0;}
  539. sChar * YAC_VCALL YAC_Object::yacMetaClassMemberGetName (sUI) {return 0;}
  540. void YAC_VCALL YAC_Object::yacMetaClassMemberSet (sUI, YAC_Value *) { }
  541. void YAC_VCALL YAC_Object::yacMetaClassMemberGet (sUI, YAC_Value *) { }
  542. sSI YAC_VCALL YAC_Object::yacMetaClassInstanceOf (YAC_Object *) {return 0;}
  543. void YAC_VCALL YAC_Object::vtable_entry_6_10_reserved (void) { }
  544. void YAC_VCALL YAC_Object::vtable_entry_6_11_reserved (void) { }
  545. void YAC_VCALL YAC_Object::vtable_entry_6_12_reserved (void) { }
  546. void YAC_VCALL YAC_Object::vtable_entry_6_13_reserved (void) { }
  547. void YAC_VCALL YAC_Object::vtable_entry_6_14_reserved (void) { }
  548. void YAC_VCALL YAC_Object::vtable_entry_6_15_reserved (void) { }
  549. // ----
  550. // ----
  551. // ---- LEVEL (1<<7) interface
  552. // ---- ( signal/callback support )
  553. // ----
  554. void YAC_VCALL YAC_Object::yacRegisterSignal (sUI, YAC_FunctionHandle) { }
  555. void YAC_VCALL YAC_Object::yacGetSignalStringList (YAC_String *) { }
  556. // ----
  557. // ----
  558. // ---- non-virtual helper methods
  559. // ----
  560. // ----
  561. // ----
  562. #ifdef YAC_OBJECT_POOL
  563. YAC_Object * YAC_Object::yacNew (YAC_ContextHandle _context) {YAC_Object*t=yacNewObject();if(t){t->pool_handle.pool_id = 0; t->yacOperatorInit(_context, this);} return t;}
  564. #else
  565. YAC_Object * YAC_Object::yacNew (YAC_ContextHandle _context) {YAC_Object*t=yacNewObject();if(t){t->yacOperatorInit(_context, this);} return t;}
  566. #endif // YAC_OBJECT_POOL
  567. #ifdef YAC_OBJECT_POOL
  568. YAC_Object * YAC_Object::yacNewPooled (YAC_ContextHandle _context, sUI _poolHint) {YAC_Object*t=yac_host->yacNewPooledByID(class_ID, _poolHint); if(t) { t->yacOperatorInit(_context, this); return t; } else { return yacNew(_context); } }
  569. #else
  570. YAC_Object * YAC_Object::yacNewPooled (YAC_ContextHandle _context, sUI) { return yacNew(_context); }
  571. #endif // YAC_OBJECT_POOL
  572. // sBool YAC_Object::yacCanDeserializeClass (YAC_Object *_s) {YAC_String s;_s->yacStreamReadString(&s, 64);if( (yacClassName()&&s.compare((sChar*)yacClassName())) || (yacMetaClassName()&&s.compare((sChar*)yacMetaClassName())) ) {return 1;}else{_s->yacStreamSeek(-((sSI)s.length), YAC_CUR);/*expect ASCIIZ*/return 0;}}
  573. sBool YAC_Object::yacCanDeserializeClass (YAC_Object *_s) {
  574. YAC_String *s = (YAC_String*) YAC_NEW_CORE_POOLED(YAC_CLID_STRING);
  575. _s->yacStreamReadString(s, 64);// calls host-specific string methods so we need a "real" String object !
  576. if( (yacClassName()&&s->compare((sChar*)yacClassName())) || (yacMetaClassName()&&s->compare((sChar*)yacMetaClassName())) )
  577. {
  578. YAC_DELETE(s);
  579. return 1;
  580. }
  581. else
  582. {
  583. _s->yacStreamSeek(-((sSI)s->length), YAC_CUR);/*expect ASCIIZ*/
  584. YAC_DELETE(s);
  585. return 0;
  586. }
  587. }
  588. sBool YAC_Object::yacInstanceOf (YAC_Object *_o) {if(_o)return(yac_host->cpp_typecast_map[class_ID][_o->class_ID]);else return 0;}
  589. #ifdef YAC_OBJECT_YAC
  590. // ---- auto-generated by gen_yac_object_c_calls.tks (Fri, 21/Dec/2012 23:12:48)
  591. void YAC_Object::_yacClassName(YAC_Value *_r) {
  592. yac_object_yacClassName(this, _r);
  593. }
  594. void YAC_Object::_yacNewObject(YAC_Value *_r) {
  595. yac_object_yacNewObject(this, _r);
  596. }
  597. sSI YAC_Object::_yacMemberGetNum(void) {
  598. return yac_object_yacMemberGetNum(this);
  599. }
  600. void YAC_Object::_yacMemberGetNames(YAC_Value *_r) {
  601. yac_object_yacMemberGetNames(this, _r);
  602. }
  603. void YAC_Object::_yacMemberGetTypes(YAC_Value *_r) {
  604. yac_object_yacMemberGetTypes(this, _r);
  605. }
  606. void YAC_Object::_yacMemberGetObjectTypes(YAC_Value *_r) {
  607. yac_object_yacMemberGetObjectTypes(this, _r);
  608. }
  609. void YAC_Object::_yacMemberGetOffsets(YAC_Value *_r) {
  610. yac_object_yacMemberGetOffsets(this, _r);
  611. }
  612. sSI YAC_Object::_yacMethodGetNum(void) {
  613. return yac_object_yacMethodGetNum(this);
  614. }
  615. void YAC_Object::_yacMethodGetNames(YAC_Value *_r) {
  616. yac_object_yacMethodGetNames(this, _r);
  617. }
  618. void YAC_Object::_yacMethodGetNumParameters(YAC_Value *_r) {
  619. yac_object_yacMethodGetNumParameters(this, _r);
  620. }
  621. void YAC_Object::_yacMethodGetParameterTypes(YAC_Value *_r) {
  622. yac_object_yacMethodGetParameterTypes(this, _r);
  623. }
  624. void YAC_Object::_yacMethodGetParameterObjectTypes(YAC_Value *_r) {
  625. yac_object_yacMethodGetParameterObjectTypes(this, _r);
  626. }
  627. void YAC_Object::_yacMethodGetReturnTypes(YAC_Value *_r) {
  628. yac_object_yacMethodGetReturnTypes(this, _r);
  629. }
  630. void YAC_Object::_yacMethodGetReturnObjectTypes(YAC_Value *_r) {
  631. yac_object_yacMethodGetReturnObjectTypes(this, _r);
  632. }
  633. void YAC_Object::_yacMethodGetAdr(YAC_Value *_r) {
  634. yac_object_yacMethodGetAdr(this, _r);
  635. }
  636. sSI YAC_Object::_yacConstantGetNum(void) {
  637. return yac_object_yacConstantGetNum(this);
  638. }
  639. void YAC_Object::_yacConstantGetNames(YAC_Value *_r) {
  640. yac_object_yacConstantGetNames(this, _r);
  641. }
  642. void YAC_Object::_yacConstantGetTypes(YAC_Value *_r) {
  643. yac_object_yacConstantGetTypes(this, _r);
  644. }
  645. void YAC_Object::_yacConstantGetValues(YAC_Value *_r) {
  646. yac_object_yacConstantGetValues(this, _r);
  647. }
  648. sSI YAC_Object::_yacCopy(YAC_Object *_os) {
  649. return yac_object_yacCopy(this, _os);
  650. }
  651. sSI YAC_Object::_yacEquals(YAC_Object *_ro) {
  652. return yac_object_yacEquals(this, _ro);
  653. }
  654. void YAC_Object::_yacOperator(sSI _cmd, YAC_Object *_ro, YAC_Value *_r) {
  655. yac_object_yacOperator(this, _cmd, _ro, _r);
  656. }
  657. void YAC_Object::_yacOperatorInit(YAC_Object *_ro) {
  658. yac_object_yacOperatorInit(this, _ro);
  659. }
  660. void YAC_Object::_yacOperatorAssign(YAC_Object *_ro) {
  661. yac_object_yacOperatorAssign(this, _ro);
  662. }
  663. void YAC_Object::_yacOperatorAdd(YAC_Object *_ro) {
  664. yac_object_yacOperatorAdd(this, _ro);
  665. }
  666. void YAC_Object::_yacOperatorSub(YAC_Object *_ro) {
  667. yac_object_yacOperatorSub(this, _ro);
  668. }
  669. void YAC_Object::_yacOperatorMul(YAC_Object *_ro) {
  670. yac_object_yacOperatorMul(this, _ro);
  671. }
  672. void YAC_Object::_yacOperatorDiv(YAC_Object *_ro) {
  673. yac_object_yacOperatorDiv(this, _ro);
  674. }
  675. void YAC_Object::_yacOperatorClamp(YAC_Object *_min, YAC_Object *_max) {
  676. yac_object_yacOperatorClamp(this, _min, _max);
  677. }
  678. void YAC_Object::_yacOperatorWrap(YAC_Object *_min, YAC_Object *_max) {
  679. yac_object_yacOperatorWrap(this, _min, _max);
  680. }
  681. sSI YAC_Object::_yacScanI32(YAC_Object *_vo) {
  682. return yac_object_yacScanI32(this, _vo);
  683. }
  684. sSI YAC_Object::_yacScanI64(YAC_Object *_vo) {
  685. return yac_object_yacScanI64(this, _vo);
  686. }
  687. sSI YAC_Object::_yacScanF32(YAC_Object *_vo) {
  688. return yac_object_yacScanF32(this, _vo);
  689. }
  690. sSI YAC_Object::_yacScanF64(YAC_Object *_vo) {
  691. return yac_object_yacScanF64(this, _vo);
  692. }
  693. sSI YAC_Object::_yacToString(YAC_Object *_s) const {
  694. return yac_object_yacToString(this, _s);
  695. }
  696. void YAC_Object::_yacOperatorI(sSI _cmd, sSI _i, YAC_Value *_r) {
  697. yac_object_yacOperatorI(this, _cmd, _i, _r);
  698. }
  699. void YAC_Object::_yacOperatorI64(sSI _cmd, YAC_Object *_no, YAC_Value *_r) {
  700. yac_object_yacOperatorI64(this, _cmd, _no, _r);
  701. }
  702. void YAC_Object::_yacOperatorF32(sSI _cmd, sF32 _f32, YAC_Value *_r) {
  703. yac_object_yacOperatorF32(this, _cmd, _f32, _r);
  704. }
  705. void YAC_Object::_yacOperatorF64(sSI _cmd, YAC_Object *_no, YAC_Value *_r) {
  706. yac_object_yacOperatorF64(this, _cmd, _no, _r);
  707. }
  708. void YAC_Object::_yacValueOfI(sSI _i) {
  709. yac_object_yacValueOfI(this, _i);
  710. }
  711. void YAC_Object::_yacValueOfF32(sF32 _f32) {
  712. yac_object_yacValueOfF32(this, _f32);
  713. }
  714. void YAC_Object::_yacValueOfF64(YAC_Object *_no) {
  715. yac_object_yacValueOfF64(this, _no);
  716. }
  717. void YAC_Object::_yacValueOfI64(YAC_Object *_no) {
  718. yac_object_yacValueOfI64(this, _no);
  719. }
  720. sSI YAC_Object::_yacToParsableString(YAC_Object *_s) const {
  721. return yac_object_yacToParsableString(this, _s);
  722. }
  723. sSI YAC_Object::_yacIsStream(void) {
  724. return yac_object_yacIsStream(this);
  725. }
  726. void YAC_Object::_yacStreamClose(void) {
  727. yac_object_yacStreamClose(this);
  728. }
  729. sSI YAC_Object::_yacStreamOpenLocal(YAC_Object *_name, sSI _access) {
  730. return yac_object_yacStreamOpenLocal(this, _name, _access);
  731. }
  732. sSI YAC_Object::_yacStreamOpenLogic(YAC_Object *_name) {
  733. return yac_object_yacStreamOpenLogic(this, _name);
  734. }
  735. sSI YAC_Object::_yacStreamGetByteOrder(void) {
  736. return yac_object_yacStreamGetByteOrder(this);
  737. }
  738. void YAC_Object::_yacStreamSetByteOrder(sSI _order) {
  739. yac_object_yacStreamSetByteOrder(this, _order);
  740. }
  741. sSI YAC_Object::_yacStreamEOF(void) {
  742. return yac_object_yacStreamEOF(this);
  743. }
  744. void YAC_Object::_yacStreamSeek(sSI _off, sSI _mode) {
  745. yac_object_yacStreamSeek(this, _off, _mode);
  746. }
  747. sSI YAC_Object::_yacStreamGetOffset(void) {
  748. return yac_object_yacStreamGetOffset(this);
  749. }
  750. void YAC_Object::_yacStreamSetOffset(sSI _off) {
  751. yac_object_yacStreamSetOffset(this, _off);
  752. }
  753. sSI YAC_Object::_yacStreamGetSize(void) {
  754. return yac_object_yacStreamGetSize(this);
  755. }
  756. sSI YAC_Object::_yacStreamRead(YAC_Object *_ret, sSI _num) {
  757. return yac_object_yacStreamRead(this, _ret, _num);
  758. }
  759. sSI YAC_Object::_yacStreamReadI8(void) {
  760. return yac_object_yacStreamReadI8(this);
  761. }
  762. sSI YAC_Object::_yacStreamReadI16(void) {
  763. return yac_object_yacStreamReadI16(this);
  764. }
  765. sSI YAC_Object::_yacStreamReadI32(void) {
  766. return yac_object_yacStreamReadI32(this);
  767. }
  768. void YAC_Object::_yacStreamReadI64(YAC_Value *_r) {
  769. yac_object_yacStreamReadI64(this, _r);
  770. }
  771. sF32 YAC_Object::_yacStreamReadF32(void) {
  772. return yac_object_yacStreamReadF32(this);
  773. }
  774. void YAC_Object::_yacStreamReadF64(YAC_Value *_r) {
  775. yac_object_yacStreamReadF64(this, _r);
  776. }
  777. void YAC_Object::_yacStreamReadObject(YAC_Object *_p) {
  778. yac_object_yacStreamReadObject(this, _p);
  779. }
  780. sSI YAC_Object::_yacStreamReadString(YAC_Object *_s, sSI _maxlen) {
  781. return yac_object_yacStreamReadString(this, _s, _maxlen);
  782. }
  783. sSI YAC_Object::_yacStreamReadBuffer(YAC_Object *_buffer, sSI _off, sSI _num, sSI _resize) {
  784. return yac_object_yacStreamReadBuffer(this, _buffer, _off, _num, _resize);
  785. }
  786. sSI YAC_Object::_yacStreamReadLine(YAC_Object *_s, sSI _maxlen) {
  787. return yac_object_yacStreamReadLine(this, _s, _maxlen);
  788. }
  789. sSI YAC_Object::_yacStreamWrite(YAC_Object *_in, sSI _num) {
  790. return yac_object_yacStreamWrite(this, _in, _num);
  791. }
  792. void YAC_Object::_yacStreamWriteI8(sSI _i) {
  793. yac_object_yacStreamWriteI8(this, _i);
  794. }
  795. void YAC_Object::_yacStreamWriteI16(sSI _i) {
  796. yac_object_yacStreamWriteI16(this, _i);
  797. }
  798. void YAC_Object::_yacStreamWriteI32(sSI _i) {
  799. yac_object_yacStreamWriteI32(this, _i);
  800. }
  801. void YAC_Object::_yacStreamWriteI64(YAC_Object *_no) {
  802. yac_object_yacStreamWriteI64(this, _no);
  803. }
  804. void YAC_Object::_yacStreamWriteF32(sF32 _f) {
  805. yac_object_yacStreamWriteF32(this, _f);
  806. }
  807. void YAC_Object::_yacStreamWriteF64(YAC_Object *_no) {
  808. yac_object_yacStreamWriteF64(this, _no);
  809. }
  810. void YAC_Object::_yacStreamWriteObject(YAC_Object *_p) {
  811. yac_object_yacStreamWriteObject(this, _p);
  812. }
  813. sSI YAC_Object::_yacStreamWriteString(YAC_Object *_s, sSI _off, sSI _num) {
  814. return yac_object_yacStreamWriteString(this, _s, _off, _num);
  815. }
  816. sSI YAC_Object::_yacStreamWriteBuffer(YAC_Object *_b, sSI _off, sSI _num) {
  817. return yac_object_yacStreamWriteBuffer(this, _b, _off, _num);
  818. }
  819. sSI YAC_Object::_yacStreamGetErrorCode(void) {
  820. return yac_object_yacStreamGetErrorCode(this);
  821. }
  822. void YAC_Object::_yacStreamGetErrorStringByCode(sSI _code, YAC_Value *_r) {
  823. yac_object_yacStreamGetErrorStringByCode(this, _code, _r);
  824. }
  825. void YAC_Object::_yacSerializeClassName(YAC_Object *_ofs) {
  826. yac_object_yacSerializeClassName(this, _ofs);
  827. }
  828. void YAC_Object::_yacSerialize(YAC_Object *_ofs, sSI _usetypeinfo) {
  829. yac_object_yacSerialize(this, _ofs, _usetypeinfo);
  830. }
  831. sSI YAC_Object::_yacDeserialize(YAC_Object *_ifs, sSI _usetypeinfo) {
  832. return yac_object_yacDeserialize(this, _ifs, _usetypeinfo);
  833. }
  834. void YAC_Object::_yacArrayNew(YAC_Value *_r) {
  835. yac_object_yacArrayNew(this, _r);
  836. }
  837. sSI YAC_Object::_yacArrayAlloc(sSI _sx, sSI _sy, sSI _type, sSI _ebytesize) {
  838. return yac_object_yacArrayAlloc(this, _sx, _sy, _type, _ebytesize);
  839. }
  840. sSI YAC_Object::_yacArrayRealloc(sSI _sx, sSI _sy, sSI _type, sSI _ebytesize) {
  841. return yac_object_yacArrayRealloc(this, _sx, _sy, _type, _ebytesize);
  842. }
  843. sSI YAC_Object::_yacArrayGetNumElements(void) {
  844. return yac_object_yacArrayGetNumElements(this);
  845. }
  846. sSI YAC_Object::_yacArrayGetMaxElements(void) {
  847. return yac_object_yacArrayGetMaxElements(this);
  848. }
  849. void YAC_Object::_yacArrayCopySize(YAC_Object *_p) {
  850. yac_object_yacArrayCopySize(this, _p);
  851. }
  852. void YAC_Object::_yacArraySet(sSI _index, YAC_Object *_value) {
  853. yac_object_yacArraySet(this, _index, _value);
  854. }
  855. void YAC_Object::_yacArrayGet(sSI _index, YAC_Value *_r) {
  856. yac_object_yacArrayGet(this, _index, _r);
  857. }
  858. sSI YAC_Object::_yacArrayGetWidth(void) {
  859. return yac_object_yacArrayGetWidth(this);
  860. }
  861. sSI YAC_Object::_yacArrayGetHeight(void) {
  862. return yac_object_yacArrayGetHeight(this);
  863. }
  864. sSI YAC_Object::_yacArrayGetElementType(void) {
  865. return yac_object_yacArrayGetElementType(this);
  866. }
  867. sSI YAC_Object::_yacArrayGetElementByteSize(void) {
  868. return yac_object_yacArrayGetElementByteSize(this);
  869. }
  870. sSI YAC_Object::_yacArrayGetStride(void) {
  871. return yac_object_yacArrayGetStride(this);
  872. }
  873. sSI YAC_Object::_yacArrayGetPointer(void) {
  874. return yac_object_yacArrayGetPointer(this);
  875. }
  876. void YAC_Object::_yacArraySetWidth(sSI _width) {
  877. yac_object_yacArraySetWidth(this, _width);
  878. }
  879. void YAC_Object::_yacArraySetTemplate(YAC_Object *_template) {
  880. yac_object_yacArraySetTemplate(this, _template);
  881. }
  882. void YAC_Object::_yacArrayGetDeref(sSI _index, YAC_Value *_r) {
  883. yac_object_yacArrayGetDeref(this, _index, _r);
  884. }
  885. void YAC_Object::_yacHashSet(YAC_Object *_key, YAC_Object *_value) {
  886. yac_object_yacHashSet(this, _key, _value);
  887. }
  888. void YAC_Object::_yacHashGet(YAC_Object *_key, YAC_Value *_r) {
  889. yac_object_yacHashGet(this, _key, _r);
  890. }
  891. void YAC_Object::_yacHashGetDeref(YAC_Object *_key, YAC_Value *_r) {
  892. yac_object_yacHashGetDeref(this, _key, _r);
  893. }
  894. void YAC_Object::_yacGetSignalStringList(YAC_Object *_s) {
  895. yac_object_yacGetSignalStringList(this, _s);
  896. }
  897. void YAC_Object::_yacMetaClassName(YAC_Value *_r) {
  898. yac_object_yacMetaClassName(this, _r);
  899. }
  900. sSI YAC_Object::_yacMetaClassMemberGetNum(void) {
  901. return yac_object_yacMetaClassMemberGetNum(this);
  902. }
  903. sSI YAC_Object::_yacMetaClassMemberGetAccessKeyByIndex(sSI _index) {
  904. return yac_object_yacMetaClassMemberGetAccessKeyByIndex(this, _index);
  905. }
  906. sSI YAC_Object::_yacMetaClassMemberGetAccessKeyByName(YAC_Object *_s) {
  907. return yac_object_yacMetaClassMemberGetAccessKeyByName(this, _s);
  908. }
  909. sSI YAC_Object::_yacMetaClassMemberGetType(sSI _ak) {
  910. return yac_object_yacMetaClassMemberGetType(this, _ak);
  911. }
  912. void YAC_Object::_yacMetaClassMemberGetName(sSI _ak, YAC_Value *_r) {
  913. yac_object_yacMetaClassMemberGetName(this, _ak, _r);
  914. }
  915. void YAC_Object::_yacMetaClassMemberSet(sSI _ak, YAC_Object *_value) {
  916. yac_object_yacMetaClassMemberSet(this, _ak, _value);
  917. }
  918. void YAC_Object::_yacMetaClassMemberGet(sSI _ak, YAC_Value *_r) {
  919. yac_object_yacMetaClassMemberGet(this, _ak, _r);
  920. }
  921. sSI YAC_Object::_yacMetaClassInstanceOf(YAC_Object *_o) {
  922. return yac_object_yacMetaClassInstanceOf(this, _o);
  923. }
  924. void YAC_Object::_yacNew(YAC_Value *_r) {
  925. yac_object_yacNew(this, _r);
  926. }
  927. sSI YAC_Object::_yacCanDeserializeClass(YAC_Object *_ifs) {
  928. return yac_object_yacCanDeserializeClass(this, _ifs);
  929. }
  930. sSI YAC_Object::_yacInstanceOf(YAC_Object *_o) {
  931. return yac_object_yacInstanceOf(this, _o);
  932. }
  933. #endif
  934. #ifdef YAC_OBJECT_YAC
  935. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  936. //~ ~
  937. //~ YAC "C" interface for YAC_Object baseclass ~
  938. //~ ~
  939. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  940. void YAC_CALL yac_object_yacClassName(YAC_Object *_o, YAC_Value *_r) {
  941. YAC_String *s=(YAC_String*)yac_host->yacNewByID(YAC_CLID_STRING);
  942. s->visit((sChar*)_o->yacClassName());
  943. YAC_RETS(s, 1);
  944. }
  945. void YAC_CALL yac_object_yacNewObject(YAC_Object *_o, YAC_Value *_r) {
  946. YAC_Object *o=_o->yacNewObject();
  947. YAC_RETO(o, (o!=0));
  948. }
  949. // ---- m e m b e r s
  950. sSI YAC_CALL yac_object_yacMemberGetNum(YAC_Object *_o) {
  951. return (sSI)_o->yacMemberGetNum();
  952. }
  953. void YAC_CALL yac_object_yacMemberGetNames(YAC_Object *_o, YAC_Value *_r) {
  954. YAC_StringArray *a=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  955. if(a)
  956. {
  957. sSI num=(sSI)_o->yacMemberGetNum();
  958. if(num&&a->yacArrayAlloc(num, 0,0,0))
  959. {
  960. a->num_elements=a->max_elements;
  961. const char **memberNames=_o->yacMemberGetNames();
  962. for(sSI i=0; i<num; i++)
  963. {
  964. a->elements[i].visit((sChar*)memberNames[i]);
  965. }
  966. }
  967. }
  968. YAC_RETO(a, (a!=0));
  969. }
  970. void YAC_CALL yac_object_yacMemberGetTypes(YAC_Object *_o, YAC_Value *_r) {
  971. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  972. if(a)
  973. {
  974. sSI num=(int)_o->yacMemberGetNum();
  975. if(num&&a->yacArrayAlloc(num, 0,0,0))
  976. {
  977. a->num_elements=a->max_elements;
  978. const sUI *memberTypes=_o->yacMemberGetTypes();
  979. for(sSI i=0; i<num; i++)
  980. {
  981. a->elements[i]=(sSI)memberTypes[i];
  982. }
  983. }
  984. }
  985. YAC_RETO(a, (a!=0));
  986. }
  987. void YAC_CALL yac_object_yacMemberGetObjectTypes(YAC_Object *_o, YAC_Value *_r) {
  988. YAC_StringArray *a=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  989. if(a)
  990. {
  991. sSI num=(int)_o->yacMemberGetNum();
  992. if(num&&a->yacArrayAlloc(num, 0,0,0))
  993. {
  994. a->num_elements=a->max_elements;
  995. const char **objectTypes=_o->yacMemberGetObjectTypes();
  996. for(sSI i=0; i<num; i++)
  997. {
  998. a->elements[i].visit((sChar*)objectTypes[i]);
  999. }
  1000. }
  1001. }
  1002. YAC_RETO(a, (a!=0));
  1003. }
  1004. void YAC_CALL yac_object_yacMemberGetOffsets(YAC_Object *_o, YAC_Value *_r) {
  1005. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1006. if(a)
  1007. {
  1008. sSI num=(int)_o->yacMemberGetNum();
  1009. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1010. {
  1011. a->num_elements=a->max_elements;
  1012. const sU8**memberOffsets = _o->yacMemberGetOffsets();
  1013. for(sSI i=0; i<num; i++)
  1014. {
  1015. #ifdef YAC_64
  1016. a->elements[i]=(sSI) ( (*(sU64*)&memberOffsets[i]) & 0xFFFFFFF );
  1017. #else
  1018. a->elements[i]=(sSI) ( (*(sU32*)&memberOffsets[i]) & 0xFFFFFFF );
  1019. #endif // YAC_64
  1020. }
  1021. }
  1022. }
  1023. YAC_RETO(a, (a!=0));
  1024. }
  1025. // ---- m e t h o d s
  1026. sSI YAC_CALL yac_object_yacMethodGetNum(YAC_Object *_o) {
  1027. return (sSI)_o->yacMethodGetNum();
  1028. }
  1029. void YAC_CALL yac_object_yacMethodGetNames(YAC_Object *_o, YAC_Value *_r) {
  1030. YAC_StringArray *a=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  1031. if(a)
  1032. {
  1033. sSI num=(int)_o->yacMethodGetNum();
  1034. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1035. {
  1036. a->num_elements=a->max_elements;
  1037. const char **methodNames=_o->yacMethodGetNames();
  1038. for(sSI i=0; i<num; i++)
  1039. {
  1040. a->elements[i].visit((sChar*)methodNames[i]);
  1041. }
  1042. }
  1043. }
  1044. YAC_RETO(a, (a!=0));
  1045. }
  1046. void YAC_CALL yac_object_yacMethodGetNumParameters(YAC_Object *_o, YAC_Value *_r) {
  1047. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1048. if(a)
  1049. {
  1050. sSI num=(int)_o->yacMethodGetNum();
  1051. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1052. {
  1053. a->num_elements=a->max_elements;
  1054. const sUI *numParameters=_o->yacMethodGetNumParameters();
  1055. for(sSI i=0; i<num; i++)
  1056. {
  1057. a->elements[i]=(sSI)numParameters[i];
  1058. }
  1059. }
  1060. }
  1061. YAC_RETO(a, (a!=0));
  1062. }
  1063. void YAC_CALL yac_object_yacMethodGetParameterTypes(YAC_Object *_o, YAC_Value *_r) {
  1064. YAC_ValueArray *a=(YAC_ValueArray*)yac_host->yacNewByID(YAC_CLID_VALUEARRAY);
  1065. if(a)
  1066. {
  1067. sSI num=(int)_o->yacMethodGetNum();
  1068. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1069. {
  1070. a->num_elements=a->max_elements;
  1071. const sUI *numParameters =_o->yacMethodGetNumParameters();
  1072. const sUI **allParameterTypes=_o->yacMethodGetParameterTypes();
  1073. for(sSI i=0; i<num; i++)
  1074. {
  1075. YAC_IntArray *ia=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1076. if(ia)
  1077. {
  1078. a->elements[i].initObject(ia, 1);
  1079. sSI inum=(sSI)numParameters[i];
  1080. if(inum&&ia->yacArrayAlloc(inum, 0,0,0))
  1081. {
  1082. ia->num_elements=ia->max_elements;
  1083. const sUI *parameterTypes=allParameterTypes[i];
  1084. for(sSI j=0; j<inum; j++)
  1085. {
  1086. ia->elements[j] =(sSI)parameterTypes[j];
  1087. }
  1088. }
  1089. }
  1090. else
  1091. {
  1092. yac_host->printf("[---] yac_object_yacMethodGetParameterTypes: cannot allocate inner array %i/%i.\n", i, num);
  1093. yac_host->yacDelete(a);
  1094. YAC_RETO(0, 0);
  1095. return;
  1096. }
  1097. }
  1098. }
  1099. }
  1100. YAC_RETO(a, (a!=0));
  1101. }
  1102. void YAC_CALL yac_object_yacMethodGetParameterObjectTypes(YAC_Object *_o, YAC_Value *_r) {
  1103. YAC_ValueArray *a=(YAC_ValueArray*)yac_host->yacNewByID(YAC_CLID_VALUEARRAY);
  1104. if(a)
  1105. {
  1106. sSI num=(int)_o->yacMethodGetNum();
  1107. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1108. {
  1109. a->num_elements=a->max_elements;
  1110. const sUI *numParameters =_o->yacMethodGetNumParameters();
  1111. const char ***allParameterObjectTypes=_o->yacMethodGetParameterObjectTypes();
  1112. for(sSI i=0; i<num; i++)
  1113. {
  1114. YAC_StringArray *ia=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  1115. if(ia)
  1116. {
  1117. a->elements[i].initObject(ia, 1);
  1118. sSI inum=(sSI)numParameters[i];
  1119. if(inum&&ia->yacArrayAlloc(inum, 0,0,0))
  1120. {
  1121. ia->num_elements=ia->max_elements;
  1122. const char **parameterObjectTypes=allParameterObjectTypes[i];
  1123. for(sSI j=0; j<inum; j++)
  1124. {
  1125. // yac_host->printf("ia->elements[%i]=%p (%s) *s=%c\n", j, parameterObjectTypes[j],
  1126. // (char *)parameterObjectTypes[j],
  1127. // parameterObjectTypes[j]?parameterObjectTypes[j][0]:'?');
  1128. ia->elements[j].visit((sChar*)parameterObjectTypes[j]);
  1129. }
  1130. }
  1131. }
  1132. else
  1133. {
  1134. yac_host->printf("[---] yac_object_yacMethodGetParameterObjectTypes: cannot allocate inner array %i/%i.\n", i, num);
  1135. yac_host->yacDelete(a);
  1136. YAC_RETO(0, 0);
  1137. return;
  1138. }
  1139. }
  1140. }
  1141. }
  1142. YAC_RETO(a, (a!=0));
  1143. }
  1144. void YAC_CALL yac_object_yacMethodGetReturnTypes(YAC_Object *_o, YAC_Value *_r) {
  1145. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1146. if(a)
  1147. {
  1148. sSI num=(int)_o->yacMethodGetNum();
  1149. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1150. {
  1151. a->num_elements=a->max_elements;
  1152. const sUI *returnTypes=_o->yacMethodGetReturnTypes();
  1153. for(sSI i=0; i<num; i++)
  1154. a->elements[i]=(sSI)returnTypes[i];
  1155. }
  1156. }
  1157. YAC_RETO(a, (a!=0));
  1158. }
  1159. void YAC_CALL yac_object_yacMethodGetReturnObjectTypes(YAC_Object *_o, YAC_Value *_r) {
  1160. YAC_StringArray *a=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  1161. if(a)
  1162. {
  1163. sSI num=(int)_o->yacMethodGetNum();
  1164. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1165. {
  1166. a->num_elements=a->max_elements;
  1167. const char **returnObjectTypes=_o->yacMethodGetReturnObjectTypes();
  1168. for(sSI i=0; i<num; i++)
  1169. a->elements[i].visit((sChar*)returnObjectTypes[i]);
  1170. }
  1171. }
  1172. YAC_RETO(a, (a!=0));
  1173. }
  1174. void YAC_CALL yac_object_yacMethodGetAdr(YAC_Object *_o, YAC_Value *_r) {
  1175. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1176. if(a)
  1177. {
  1178. sSI num=(int)_o->yacMethodGetNum();
  1179. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1180. {
  1181. a->num_elements=a->max_elements;
  1182. const void **methodAdr=_o->yacMethodGetAdr();
  1183. for(sSI i=0; i<num; i++)
  1184. a->elements[i]=*(sSI*)&methodAdr[i];
  1185. }
  1186. }
  1187. YAC_RETO(a, (a!=0));
  1188. }
  1189. // ---- c o n s t a n t s
  1190. sSI YAC_CALL yac_object_yacConstantGetNum(YAC_Object *_o) {
  1191. return (sSI)_o->yacConstantGetNum();
  1192. }
  1193. void YAC_CALL yac_object_yacConstantGetNames(YAC_Object *_o, YAC_Value *_r) {
  1194. YAC_StringArray *a=(YAC_StringArray*)yac_host->yacNewByID(YAC_CLID_STRINGARRAY);
  1195. if(a)
  1196. {
  1197. sSI num=(sSI)_o->yacConstantGetNum();
  1198. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1199. {
  1200. a->num_elements=a->max_elements;
  1201. const char **constantNames=_o->yacConstantGetNames();
  1202. for(sSI i=0; i<num; i++)
  1203. a->elements[i].visit((sChar*)constantNames[i]);
  1204. }
  1205. }
  1206. YAC_RETO(a, (a!=0));
  1207. }
  1208. void YAC_CALL yac_object_yacConstantGetTypes(YAC_Object *_o, YAC_Value *_r) {
  1209. YAC_IntArray *a=(YAC_IntArray*)yac_host->yacNewByID(YAC_CLID_INTARRAY);
  1210. if(a)
  1211. {
  1212. sSI num=(int)_o->yacConstantGetNum();
  1213. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1214. {
  1215. a->num_elements=a->max_elements;
  1216. const sUI *constantTypes=_o->yacConstantGetTypes();
  1217. for(sSI i=0; i<num; i++)
  1218. a->elements[i]=(sSI)constantTypes[i];
  1219. }
  1220. }
  1221. YAC_RETO(a, (a!=0));
  1222. }
  1223. void YAC_CALL yac_object_yacConstantGetValues(YAC_Object *_o, YAC_Value *_r) {
  1224. YAC_ValueArray *a=(YAC_ValueArray*)yac_host->yacNewByID(YAC_CLID_VALUEARRAY);
  1225. if(a)
  1226. {
  1227. sSI num=(int)_o->yacConstantGetNum();
  1228. if(num&&a->yacArrayAlloc(num, 0,0,0))
  1229. {
  1230. a->num_elements=a->max_elements;
  1231. const sUI *constantTypes=_o->yacConstantGetTypes();
  1232. yacmemptr constantValues=_o->yacConstantGetValues();
  1233. for(sSI i=0; i<num; i++)
  1234. {
  1235. switch(constantTypes[i])
  1236. {
  1237. case YAC_TYPE_INT:
  1238. a->elements[i].initInt(constantValues.si[i]);
  1239. break;
  1240. case YAC_TYPE_FLOAT:
  1241. a->elements[i].initFloat(constantValues.f4[i]); // xxx 32bit float assumed
  1242. break;
  1243. case YAC_TYPE_OBJECT:
  1244. default:
  1245. a->elements[i].initObject(0, 0);
  1246. yac_host->printf("[---] yac_object_yacConstantGetValues(): constant %i has YAC_TYPE_OBJECT(%i) (not supported).\n", i, constantTypes[i]);
  1247. break;
  1248. }
  1249. }
  1250. }
  1251. }
  1252. YAC_RETO(a, (a!=0));
  1253. }
  1254. // ---- o p e r a t o r s
  1255. sSI YAC_CALL yac_object_yacCopy(YAC_Object *_o, YAC_Object *_os) {
  1256. return _o->yacCopy(_os);
  1257. }
  1258. sSI YAC_CALL yac_object_yacEquals(YAC_Object *_o, YAC_Object *_ro) {
  1259. return _o->yacEquals(_ro);
  1260. }
  1261. void YAC_CALL yac_object_yacOperator(YAC_Object *_o, sSI _cmd, YAC_Object *_ro, YAC_Value *_r) {
  1262. _o->yacOperator(_cmd, _ro, _r);
  1263. }
  1264. void YAC_CALL yac_object_yacOperatorInit(YAC_Object *_o, YAC_Object *_ro) {
  1265. _o->yacOperatorInit(NULL/*_context*/, _ro);
  1266. }
  1267. void YAC_CALL yac_object_yacOperatorAssign(YAC_Object *_o, YAC_Object *_ro) {
  1268. _o->yacOperatorAssign(_ro);
  1269. }
  1270. void YAC_CALL yac_object_yacOperatorAdd(YAC_Object *_o, YAC_Object *_ro) {
  1271. _o->yacOperatorAdd(_ro);
  1272. }
  1273. void YAC_CALL yac_object_yacOperatorSub(YAC_Object *_o, YAC_Object *_ro) {
  1274. _o->yacOperatorSub(_ro);
  1275. }
  1276. void YAC_CALL yac_object_yacOperatorMul(YAC_Object *_o, YAC_Object *_ro) {
  1277. _o->yacOperatorMul(_ro);
  1278. }
  1279. void YAC_CALL yac_object_yacOperatorDiv(YAC_Object *_o, YAC_Object *_ro) {
  1280. _o->yacOperatorDiv(_ro);
  1281. }
  1282. void YAC_CALL yac_object_yacOperatorClamp(YAC_Object *_o, YAC_Object *_min, YAC_Object *_max) {
  1283. _o->yacOperatorClamp(_min, _max);
  1284. }
  1285. void YAC_CALL yac_object_yacOperatorWrap(YAC_Object *_o, YAC_Object *_min, YAC_Object *_max) {
  1286. _o->yacOperatorWrap(_min, _max);
  1287. }
  1288. sSI YAC_CALL yac_object_yacScanI32(YAC_Object *_o, YAC_Object *_vo) {
  1289. if(YAC_BCHK(_vo, YAC_CLID_INTEGER)) // xxx should be YAC_CLID_LONG
  1290. {
  1291. YAC_Integer *vo=(YAC_Integer*)_vo;
  1292. return _o->yacScanI(&vo->value);
  1293. }
  1294. return 0;
  1295. }
  1296. sSI YAC_CALL yac_object_yacScanI64(YAC_Object *_o, YAC_Object *_vo) {
  1297. if(YAC_VALID(_vo))
  1298. {
  1299. sS64 i64;
  1300. if(_o->yacScanI64(&i64))
  1301. {
  1302. _vo->yacValueOfI64(i64);
  1303. }
  1304. }
  1305. return 0;
  1306. }
  1307. sSI YAC_CALL yac_object_yacScanF32(YAC_Object *_o, YAC_Object *_vo) {
  1308. if(YAC_BCHK(_vo, YAC_CLID_FLOAT))
  1309. {
  1310. YAC_Float *vo=(YAC_Float*)_vo;
  1311. return _o->yacScanF32(&vo->value);
  1312. }
  1313. return 0;
  1314. }
  1315. sSI YAC_CALL yac_object_yacScanF64(YAC_Object *_o, YAC_Object *_vo) {
  1316. if(YAC_VALID(_vo))
  1317. {
  1318. sF64 f64;
  1319. if(_o->yacScanF64(&f64))
  1320. {
  1321. _vo->yacValueOfF64(f64);
  1322. }
  1323. }
  1324. return 0;
  1325. }
  1326. sSI YAC_CALL yac_object_yacToString(const YAC_Object *_o, YAC_Object *_s) {
  1327. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1328. {
  1329. YAC_String *s=(YAC_String*)_s;
  1330. return _o->yacToString(s);
  1331. }
  1332. return 0;
  1333. }
  1334. void YAC_CALL yac_object_yacOperatorI(YAC_Object *_o, sSI _cmd, sSI _i, YAC_Value *_r) {
  1335. _o->yacOperatorI(_cmd, _i, _r);
  1336. }
  1337. void YAC_CALL yac_object_yacOperatorI64(YAC_Object *_o, sSI _cmd, YAC_Object *_no, YAC_Value *_r) {
  1338. if(YAC_VALID(_no))
  1339. {
  1340. sS64 i64;
  1341. if(_no->yacScanI64(&i64))
  1342. {
  1343. _o->yacOperatorI64(_cmd, i64, _r);
  1344. }
  1345. }
  1346. }
  1347. void YAC_CALL yac_object_yacOperatorF32(YAC_Object *_o, sSI _cmd, sF32 _f32, YAC_Value *_r) {
  1348. _o->yacOperatorF32(_cmd, _f32, _r);
  1349. }
  1350. void YAC_CALL yac_object_yacOperatorF64(YAC_Object *_o, sSI _cmd, YAC_Object *_no, YAC_Value *_r) {
  1351. if(YAC_VALID(_no))
  1352. {
  1353. sF64 f64;
  1354. if(_no->yacScanF64(&f64))
  1355. {
  1356. _o->yacOperatorF64(_cmd, f64, _r);
  1357. }
  1358. }
  1359. }
  1360. void YAC_CALL yac_object_yacValueOfI(YAC_Object *_o, sSI _i) {
  1361. _o->yacValueOfI(_i);
  1362. }
  1363. void YAC_CALL yac_object_yacValueOfI64(YAC_Object *_o, YAC_Object *_no) {
  1364. if(YAC_VALID(_no))
  1365. {
  1366. sS64 i64;
  1367. if(_no->yacScanI64(&i64))
  1368. {
  1369. _o->yacValueOfI64(i64);
  1370. }
  1371. }
  1372. }
  1373. void YAC_CALL yac_object_yacValueOfF32(YAC_Object *_o, sF32 _f32) {
  1374. _o->yacValueOfF32(_f32);
  1375. }
  1376. void YAC_CALL yac_object_yacValueOfF64(YAC_Object *_o, YAC_Object *_no) {
  1377. if(YAC_VALID(_no))
  1378. {
  1379. sF64 f64;
  1380. if(_no->yacScanF64(&f64))
  1381. {
  1382. _o->yacValueOfF64(f64);
  1383. }
  1384. }
  1385. }
  1386. sSI YAC_CALL yac_object_yacToParsableString(const YAC_Object *_o, YAC_Object *_s) {
  1387. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1388. {
  1389. YAC_String *s=(YAC_String*)_s;
  1390. return _o->yacToParsableString(s);
  1391. }
  1392. return 0;
  1393. }
  1394. // ---- s t r e a m s
  1395. sSI YAC_CALL yac_object_yacIsStream(YAC_Object *_o) {
  1396. return _o->yacIsStream();
  1397. }
  1398. void YAC_CALL yac_object_yacStreamClose(YAC_Object *_o) {
  1399. _o->yacStreamClose();
  1400. }
  1401. sSI YAC_CALL yac_object_yacStreamOpenLocal(YAC_Object *_o, YAC_Object *_name, sSI _access) {
  1402. if(YAC_BCHK(_name, YAC_CLID_STRING))
  1403. {
  1404. return _o->yacStreamOpenLocal((sChar*)((YAC_String*)_name)->chars, _access);
  1405. }
  1406. return 0;
  1407. }
  1408. sSI YAC_CALL yac_object_yacStreamOpenLogic(YAC_Object *_o, YAC_Object *_name) {
  1409. if(YAC_BCHK(_name, YAC_CLID_STRING))
  1410. {
  1411. return _o->yacStreamOpenLogic((sChar*)((YAC_String*)_name)->chars);
  1412. }
  1413. return 0;
  1414. }
  1415. sSI YAC_CALL yac_object_yacStreamGetByteOrder(YAC_Object *_o) {
  1416. return _o->yacStreamGetByteOrder();
  1417. }
  1418. void YAC_CALL yac_object_yacStreamSetByteOrder(YAC_Object *_o, sSI _order) {
  1419. _o->yacStreamSetByteOrder((sUI)_order);
  1420. }
  1421. sSI YAC_CALL yac_object_yacStreamEOF(YAC_Object *_o) {
  1422. return _o->yacStreamEOF();
  1423. }
  1424. void YAC_CALL yac_object_yacStreamSeek(YAC_Object *_o, sSI _off, sSI _mode) {
  1425. _o->yacStreamSeek(_off, (sUI)_mode);
  1426. }
  1427. sSI YAC_CALL yac_object_yacStreamGetOffset(YAC_Object *_o) {
  1428. return _o->yacStreamGetOffset();
  1429. }
  1430. void YAC_CALL yac_object_yacStreamSetOffset(YAC_Object *_o, sSI _off) {
  1431. _o->yacStreamSetOffset((sUI)_off);
  1432. }
  1433. sSI YAC_CALL yac_object_yacStreamGetSize(YAC_Object *_o) {
  1434. return _o->yacStreamGetSize();
  1435. }
  1436. sSI YAC_CALL yac_object_yacStreamRead(YAC_Object *_o, YAC_Object *_ret, sSI _num) {
  1437. if(YAC_BCHK(_ret, YAC_CLID_BUFFER))
  1438. {
  1439. YAC_Buffer *ret=(YAC_Buffer*)_ret;
  1440. if(ret->yacArrayAlloc(_num, 0,0,0))
  1441. {
  1442. sUI num=(sUI)_num;
  1443. sUI i=0;
  1444. for(; (!_o->yacStreamEOF())&&(i<num); i++)
  1445. ret->yacStreamWriteI8(_o->yacStreamReadI8());
  1446. return i;
  1447. }
  1448. }
  1449. return 0;
  1450. }
  1451. sSI YAC_CALL yac_object_yacStreamReadI8(YAC_Object *_o) {
  1452. return (sSI)_o->yacStreamReadI8();
  1453. }
  1454. sSI YAC_CALL yac_object_yacStreamReadI16(YAC_Object *_o) {
  1455. return (sSI)_o->yacStreamReadI16();
  1456. }
  1457. sSI YAC_CALL yac_object_yacStreamReadI32(YAC_Object *_o) {
  1458. return (sSI)_o->yacStreamReadI32();
  1459. }
  1460. void YAC_CALL yac_object_yacStreamReadI64(YAC_Object *_o, YAC_Value *_r) {
  1461. YAC_Long *l = YAC_New_Long();
  1462. l->value = _o->yacStreamReadI64();
  1463. _r->initObject(l, 1);
  1464. }
  1465. sF32 YAC_CALL yac_object_yacStreamReadF32(YAC_Object *_o) {
  1466. return (sF32)_o->yacStreamReadF32();
  1467. }
  1468. void YAC_CALL yac_object_yacStreamReadF64(YAC_Object *_o, YAC_Value *_r) {
  1469. YAC_Double *d = YAC_New_Double();
  1470. d->value = _o->yacStreamReadF64();
  1471. _r->initObject(d, 1);
  1472. }
  1473. void YAC_CALL yac_object_yacStreamReadObject(YAC_Object *_o, YAC_Object *_p) {
  1474. _o->yacStreamReadObject(_p);
  1475. }
  1476. sSI YAC_CALL yac_object_yacStreamReadString(YAC_Object *_o, YAC_Object *_s, sSI _maxlen) {
  1477. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1478. {
  1479. return _o->yacStreamReadString((YAC_String*)_s, (sUI)_maxlen);
  1480. }
  1481. return 0;
  1482. }
  1483. sSI YAC_CALL yac_object_yacStreamReadBuffer(YAC_Object *_o, YAC_Object *_buffer, sSI _off, sSI _num, sSI _resize) {
  1484. if(YAC_BCHK(_buffer, YAC_CLID_BUFFER))
  1485. {
  1486. return _o->yacStreamReadBuffer((YAC_Buffer*)_buffer, (sUI)_off, (sUI)_num, _resize);
  1487. }
  1488. return 0;
  1489. }
  1490. sSI YAC_CALL yac_object_yacStreamReadLine(YAC_Object *_o, YAC_Object *_s, sSI _maxlen) {
  1491. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1492. {
  1493. return _o->yacStreamReadLine((YAC_String*)_s, (sUI)_maxlen);
  1494. }
  1495. return 0;
  1496. }
  1497. sSI YAC_CALL yac_object_yacStreamWrite(YAC_Object *_o, YAC_Object *_in, sSI _num) {
  1498. if(YAC_BCHK(_in, YAC_CLID_BUFFER))
  1499. {
  1500. YAC_Buffer *in=(YAC_Buffer*)_in;
  1501. sUI num=(sUI)_num;
  1502. if(in->yacStreamGetSize()<num)
  1503. num=in->yacStreamGetSize();
  1504. in->yacStreamSetOffset(0);
  1505. sUI i=0;
  1506. for(; (!_o->yacStreamGetErrorCode())&&(i<num); i++)
  1507. _o->yacStreamWriteI8( in->yacStreamReadI8() );
  1508. return i;
  1509. }
  1510. return 0;
  1511. }
  1512. void YAC_CALL yac_object_yacStreamWriteI8(YAC_Object *_o, sSI _i) {
  1513. _o->yacStreamWriteI8((sS8)_i);
  1514. }
  1515. void YAC_CALL yac_object_yacStreamWriteI16(YAC_Object *_o, sSI _i) {
  1516. _o->yacStreamWriteI16((sS16)_i);
  1517. }
  1518. void YAC_CALL yac_object_yacStreamWriteI32(YAC_Object *_o, sSI _i) {
  1519. _o->yacStreamWriteI32((sS32)_i);
  1520. }
  1521. void YAC_CALL yac_object_yacStreamWriteI64(YAC_Object *_o, YAC_Object *_no) {
  1522. if(YAC_VALID(_no))
  1523. {
  1524. sS64 i64;
  1525. if(_no->yacScanI64(&i64))
  1526. {
  1527. _o->yacStreamWriteI64(i64);
  1528. }
  1529. }
  1530. }
  1531. void YAC_CALL yac_object_yacStreamWriteF32(YAC_Object *_o, sF32 _f) {
  1532. _o->yacStreamWriteF32((sF32)_f);
  1533. }
  1534. void YAC_CALL yac_object_yacStreamWriteF64(YAC_Object *_o, YAC_Object *_no) {
  1535. if(YAC_VALID(_no))
  1536. {
  1537. sF64 f64;
  1538. if(_no->yacScanF64(&f64))
  1539. {
  1540. _o->yacStreamWriteF64(f64);
  1541. }
  1542. }
  1543. }
  1544. void YAC_CALL yac_object_yacStreamWriteObject(YAC_Object *_o, YAC_Object *_p) {
  1545. _o->yacStreamWriteObject(_p);
  1546. }
  1547. sSI YAC_CALL yac_object_yacStreamWriteString(YAC_Object *_o, YAC_Object *_s, sSI _off, sSI _num) {
  1548. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1549. {
  1550. return _o->yacStreamWriteString((YAC_String*)_s, (sUI)_off, (sUI)_num);
  1551. }
  1552. return 0;
  1553. }
  1554. sSI YAC_CALL yac_object_yacStreamWriteBuffer(YAC_Object *_o, YAC_Object *_b, sSI _off, sSI _num) {
  1555. if(YAC_BCHK(_b, YAC_CLID_BUFFER))
  1556. {
  1557. return _o->yacStreamWriteBuffer((YAC_Buffer *)_b, (sUI)_off, (sUI)_num);
  1558. }
  1559. return 0;
  1560. }
  1561. sSI YAC_CALL yac_object_yacStreamGetErrorCode(YAC_Object *_o) {
  1562. return _o->yacStreamGetErrorCode();
  1563. }
  1564. void YAC_CALL yac_object_yacStreamGetErrorStringByCode(YAC_Object *_o, sSI _code, YAC_Value *_r) {
  1565. _o->yacStreamGetErrorStringByCode(_code, _r);
  1566. }
  1567. // ---- s e r i a l i z a t i o n
  1568. void YAC_CALL yac_object_yacSerializeClassName(YAC_Object *_o, YAC_Object *_ofs) {
  1569. _o->yacSerializeClassName(_ofs);
  1570. }
  1571. void YAC_CALL yac_object_yacSerialize(YAC_Object *_o, YAC_Object *_ofs, sSI _usetypeinfo) {
  1572. _o->yacSerialize(_ofs, (sUI)_usetypeinfo);
  1573. }
  1574. sSI YAC_CALL yac_object_yacDeserialize(YAC_Object *_o, YAC_Object *_ifs, sSI _usetypeinfo) {
  1575. return _o->yacDeserialize(_ifs, (sUI)_usetypeinfo);
  1576. }
  1577. // ---- i t e r a t o r s
  1578. // (( skipped ))
  1579. // ---- a r r a y s / h a s h t a b l e s
  1580. void YAC_CALL yac_object_yacArrayNew(YAC_Object *_o, YAC_Value *_r) {
  1581. YAC_Object *n=_o->yacArrayNew();
  1582. _r->initObject(n, (n!=0));
  1583. }
  1584. sSI YAC_CALL yac_object_yacArrayAlloc(YAC_Object *_o, sSI _sx, sSI _sy, sSI _type, sSI _ebytesize) {
  1585. return (sSI)_o->yacArrayAlloc((sUI)_sx, (sUI)_sy, (sUI)_type, (sUI)_ebytesize);
  1586. }
  1587. sSI YAC_CALL yac_object_yacArrayRealloc(YAC_Object *_o, sSI _sx, sSI _sy, sSI _type, sSI _ebytesize) {
  1588. return (sSI)_o->yacArrayRealloc((sUI)_sx, (sUI)_sy, (sUI)_type, (sUI)_ebytesize);
  1589. }
  1590. sSI YAC_CALL yac_object_yacArrayGetNumElements(YAC_Object *_o) {
  1591. return (sSI)_o->yacArrayGetNumElements();
  1592. }
  1593. sSI YAC_CALL yac_object_yacArrayGetMaxElements(YAC_Object *_o) {
  1594. return (sSI)_o->yacArrayGetMaxElements();
  1595. }
  1596. void YAC_CALL yac_object_yacArrayCopySize(YAC_Object *_o, YAC_Object *_p) {
  1597. _o->yacArrayCopySize(_p);
  1598. }
  1599. void YAC_CALL yac_object_yacArraySet(YAC_Object *_o, sSI _index, YAC_Object *_value) {
  1600. if(YAC_BCHK(_value, YAC_CLID_VALUE))
  1601. {
  1602. _o->yacArraySet(NULL, (sUI)_index, (YAC_ValueObject*)_value); // xxx TKS_MT use real _context
  1603. }
  1604. }
  1605. void YAC_CALL yac_object_yacArrayGet(YAC_Object *_o, sSI _index, YAC_Value *_r) {
  1606. _o->yacArrayGet(NULL, (sUI)_index, _r); // xxx TKS_MT use real _context
  1607. }
  1608. void YAC_CALL yac_object_yacArrayGetDeref(YAC_Object *_o, sSI _index, YAC_Value *_r) {
  1609. _o->yacArrayGetDeref(NULL, (sUI)_index, _r); // xxx TKS_MT use real _context
  1610. }
  1611. sSI YAC_CALL yac_object_yacArrayGetWidth(YAC_Object *_o) {
  1612. return (sSI)_o->yacArrayGetWidth();
  1613. }
  1614. sSI YAC_CALL yac_object_yacArrayGetHeight(YAC_Object *_o) {
  1615. return (sSI)_o->yacArrayGetHeight();
  1616. }
  1617. sSI YAC_CALL yac_object_yacArrayGetElementType(YAC_Object *_o) {
  1618. return (sSI)_o->yacArrayGetElementType();
  1619. }
  1620. sSI YAC_CALL yac_object_yacArrayGetElementByteSize(YAC_Object *_o) {
  1621. return (sSI)_o->yacArrayGetElementByteSize();
  1622. }
  1623. sSI YAC_CALL yac_object_yacArrayGetStride(YAC_Object *_o) {
  1624. return (sSI)_o->yacArrayGetStride();
  1625. }
  1626. sSI YAC_CALL yac_object_yacArrayGetPointer(YAC_Object *_o) {
  1627. /// xxx return Long object on 64bit
  1628. //void *adr = _o->yacArrayGetPointer();
  1629. //return *(sSI*)&adr;
  1630. return 0; // !
  1631. }
  1632. void YAC_CALL yac_object_yacArraySetWidth(YAC_Object *_o, sSI _width) {
  1633. _o->yacArraySetWidth((sUI)_width);
  1634. }
  1635. void YAC_CALL yac_object_yacArraySetTemplate(YAC_Object *_o, YAC_Object *_template) {
  1636. _o->yacArraySetTemplate(_template);
  1637. }
  1638. void YAC_CALL yac_object_yacHashSet(YAC_Object *_o, YAC_Object *_key, YAC_Object *_value) {
  1639. if(YAC_BCHK(_key, YAC_CLID_STRING))
  1640. if(YAC_BCHK(_value, YAC_CLID_VALUE))
  1641. {
  1642. _o->yacHashSet(NULL, (YAC_String*)_key, (YAC_ValueObject*)_value); // xxx TKS_MT use real _context
  1643. }
  1644. }
  1645. void YAC_CALL yac_object_yacHashGet(YAC_Object *_o, YAC_Object *_key, YAC_Value *_r) {
  1646. if(YAC_BCHK(_key, YAC_CLID_STRING))
  1647. _o->yacHashGet(NULL, (YAC_String*)_key, _r); // xxx TKS_MT use real _context
  1648. }
  1649. void YAC_CALL yac_object_yacHashGetDeref(YAC_Object *_o, YAC_Object *_key, YAC_Value *_r) {
  1650. if(YAC_BCHK(_key, YAC_CLID_STRING))
  1651. _o->yacHashGetDeref(NULL, (YAC_String*)_key, _r); // xxx TKS_MT use real _context
  1652. }
  1653. // ---- s i g n a l s
  1654. void YAC_CALL yac_object_yacGetSignalStringList(YAC_Object *_o, YAC_Object *_s) {
  1655. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1656. _o->yacGetSignalStringList((YAC_String*)_s);
  1657. }
  1658. // ---- m e t a c l a s s e s
  1659. void YAC_CALL yac_object_yacMetaClassName(YAC_Object *_o, YAC_Value *_r) {
  1660. YAC_String *s=YAC_New_String();
  1661. if(s)
  1662. {
  1663. s->visit((char*)_o->yacMetaClassName());
  1664. }
  1665. YAC_RETS(s, (s!=0));
  1666. }
  1667. sSI YAC_CALL yac_object_yacMetaClassMemberGetNum(YAC_Object *_o) {
  1668. return (sSI)_o->yacMetaClassMemberGetNum();
  1669. }
  1670. sSI YAC_CALL yac_object_yacMetaClassMemberGetAccessKeyByIndex(YAC_Object *_o, sSI _index) {
  1671. return (sSI)_o->yacMetaClassMemberGetAccessKeyByIndex((sUI)_index);
  1672. }
  1673. sSI YAC_CALL yac_object_yacMetaClassMemberGetAccessKeyByName(YAC_Object *_o, YAC_Object *_s) {
  1674. if(YAC_BCHK(_s, YAC_CLID_STRING))
  1675. return (sSI)_o->yacMetaClassMemberGetAccessKeyByName((sChar*)((YAC_String*)_s)->chars);
  1676. return -1;
  1677. }
  1678. sSI YAC_CALL yac_object_yacMetaClassMemberGetType(YAC_Object *_o, sSI _ak) {
  1679. return (sSI)_o->yacMetaClassMemberGetType((sUI)_ak);
  1680. }
  1681. void YAC_CALL yac_object_yacMetaClassMemberGetName(YAC_Object *_o, sSI _ak, YAC_Value *_r) {
  1682. YAC_String *s=YAC_New_String();
  1683. if(s)
  1684. {
  1685. s->visit((char*)_o->yacMetaClassMemberGetName((sUI)_ak));
  1686. }
  1687. YAC_RETS(s, (s!=0));
  1688. }
  1689. void YAC_CALL yac_object_yacMetaClassMemberSet(YAC_Object *_o, sSI _ak, YAC_Object *_value) {
  1690. if(YAC_BCHK(_value, YAC_CLID_VALUE))
  1691. {
  1692. _o->yacMetaClassMemberSet((sUI)_ak, (YAC_ValueObject*)_value);
  1693. }
  1694. }
  1695. void YAC_CALL yac_object_yacMetaClassMemberGet(YAC_Object *_o, sSI _ak, YAC_Value *_r) {
  1696. _o->yacMetaClassMemberGet((sUI)_ak, _r);
  1697. }
  1698. sSI YAC_CALL yac_object_yacMetaClassInstanceOf(YAC_Object *_this, YAC_Object *_o) {
  1699. return _this->yacMetaClassInstanceOf(_o);
  1700. }
  1701. // ---- n o n - v i r t u a l
  1702. void YAC_CALL yac_object_yacNew(YAC_Object *_o, YAC_Value *_r) {
  1703. YAC_Object *o=_o->yacNew(NULL/*_context*/);
  1704. YAC_RETO(o, (o!=0));
  1705. }
  1706. sSI YAC_CALL yac_object_yacCanDeserializeClass(YAC_Object *_o, YAC_Object *_ifs) {
  1707. return _o->yacCanDeserializeClass(_ifs);
  1708. }
  1709. sSI YAC_CALL yac_object_yacInstanceOf(YAC_Object *_this, YAC_Object *_o) {
  1710. return _this->yacInstanceOf(_o);
  1711. }
  1712. #endif // YAC_OBJECT_YAC
  1713. #ifndef YAC_CUST_BUFFER
  1714. YAC_Buffer::YAC_Buffer (void) { }
  1715. YAC_Buffer::~YAC_Buffer () { } // never called, see host impl. instead
  1716. void YAC_Buffer::yacArraySet (void *_context, sUI, YAC_Value *) { }
  1717. void YAC_Buffer::yacArrayGet (void *_context, sUI, YAC_Value *_ret) {_ret->initVoid();}
  1718. sUI YAC_Buffer::yacArrayGetWidth (void) {return size;}
  1719. sUI YAC_Buffer::yacArrayGetHeight (void) {return 1;}
  1720. sUI YAC_Buffer::yacArrayGetElementType (void) {return 1;}
  1721. sUI YAC_Buffer::yacArrayGetElementByteSize (void) {return sizeof(sU8);}
  1722. sUI YAC_Buffer::yacArrayGetStride (void) {return 0;}
  1723. void * YAC_Buffer::yacArrayGetPointer (void) {return (void*)buffer;}
  1724. #endif
  1725. YAC_Iterator::YAC_Iterator (void) { }
  1726. YAC_Iterator::~YAC_Iterator () { }
  1727. void YAC_VCALL YAC_Iterator::getNext (YAC_Value*r) {r->initVoid();}
  1728. void YAC_VCALL YAC_Iterator::begin (void) { }
  1729. void YAC_VCALL YAC_Iterator::end (void) { }
  1730. // ----
  1731. // ----
  1732. // ----
  1733. // ---- LEVEL (1<<0) interface:
  1734. // ---- ( C/C++ reflection support )
  1735. // ----
  1736. // ----
  1737. YAC_Host::YAC_Host (void) { }
  1738. YAC_Host::~YAC_Host () { }
  1739. #ifndef YAC_CUST_STRING
  1740. sUI YAC_strlen (const char *_s) {if(_s){sUI r=0;while(*_s++)r++;return r;}else return 0;}
  1741. YAC_String::YAC_String () {class_ID=YAC_CLID_STRING;buflen=0;bflags=0;length=0;chars=0;key=YAC_LOSTKEY;}
  1742. YAC_String::~YAC_String () {free();}
  1743. void YAC_String::free (void) {if(chars){if(bflags&DEL){Dyacfreechars(chars);}chars=0;length=0;buflen=0;bflags=0;key=YAC_LOSTKEY;}}
  1744. void YAC_String::visit (const sChar*_cstring) {YAC_String::free();chars=(sU8*)_cstring;key=YAC_LOSTKEY;length=YAC_strlen(_cstring)+1;buflen=length;}
  1745. sBool YAC_String::compare (const sChar*e) {yacmemptr f;f.u1=(sU8*)e;sBool ret=f.any!=0;if(ret&&*f.u1&&length){sU32 _key=1;do{_key++;}while(*++f.u1);ret=_key==length;if(ret){yacmemptr t;t.u1=chars;f.u1=(sU8*)e;sU32 i=0;sU32 l=(length>>RINT_SIZE_SHIFT);for(;i<l&&(*t.ui==*f.ui);t.ui++,f.ui++,i+=SIZEOF_RINT);if(i==length)return!f.u1[-1];ret=*t.u1==*f.u1;if(ret){while(*t.u1==*f.u1)if(!(*t.u1++ && *f.u1++))break;ret=(t.u1-length==chars);}}}return ret;}
  1746. sS32 YAC_String::lastIndexOf (sChar _c, sUI _start) {sSI li=-1;if(chars){sUI i=_start;for(;i<length;i++){if(chars[i]==((sChar)_c)){li=i;}}}return li;}
  1747. sS32 YAC_String::indexOf (sChar _c, sUI _start) {if(chars){sUI i=_start;for(;i<length;i++){if(chars[i]==((sChar)_c))return i;}}return -1;}
  1748. #ifdef YAC_BIGSTRING
  1749. sUI YAC_String::sum (void) {sU32 ret=0;sU8*c=chars;int i=1;if(NULL != c){for(;*c;c++,i+=128){ret=53*ret+i* *c;}} return ret;} //sU32 i=0;sU32 ret=0;sU8 cc;sU8 lc=0;for(;i<length;i++){cc=chars[i];ret+=((sU32)cc^lc)+(i<<2);lc=cc;}return ret;}
  1750. void YAC_String::genKey (void) {key=sum();}
  1751. sUI YAC_String::getKey (void) {if(key==YAC_LOSTKEY)genKey();return key;}
  1752. sBool YAC_String::compare (YAC_String*s) {if(s){if(s->length==length&&s->getKey()==getKey()&&s->chars&&chars){sU32 i=0;for(;i<length&&(s->chars[i]==chars[i]); i++);return i==length;}}return 0;}
  1753. void YAC_String::fixLength (void) {if(chars&&buflen) { length=0; sChar *s=(sChar*)chars; while(length<buflen&&*s++) length++; length++; /**count EOF**/ } else length=0; key=YAC_LOSTKEY;}
  1754. sBool YAC_String::alloc (sU32 len) {if(length!=len){if(chars&&(bflags&DEL)){Dyacfreechars(chars);};buflen=len;length=len;if(len){chars=Dyacallocchars(length);if(chars){sU32 i;for(i=0; i<length; i++)chars[i]=0;}else{buflen=0;bflags=0;length=0;}}else chars=0;}key=YAC_LOSTKEY;return (chars!=0)?1:0;}
  1755. sBool YAC_String::copy (const sChar *e) {if(e){sUI j=(sUI)YAC_strlen(e);sBool ret=YAC_String::realloc(j+1);if(ret){sU32 i=0;for(; i<j; i++) *(sChar *)&chars[i]=e[i];chars[i]=0;}return ret;}else return createEmpty();}
  1756. sBool YAC_String::realloc (sU32 len) {if((!chars)||buflen<len){return YAC_String::alloc(len);}else{length=len;key=YAC_LOSTKEY;return length!=0;}}
  1757. sBool YAC_String::createEmpty (void) {sBool ret=YAC_String::alloc(1);if(ret)*chars=0;return ret;}
  1758. sBool YAC_String::copy (YAC_String *_s) {
  1759. sBool ret;
  1760. if( (ret=(_s!=0)) )
  1761. {
  1762. if(_s->length)
  1763. {
  1764. ret = YAC_String::realloc(_s->length);
  1765. if(ret)
  1766. {
  1767. sU32 i;
  1768. for(i=0; i<_s->length; i++)
  1769. {
  1770. chars[i]=_s->chars[i];
  1771. }
  1772. if(_s->bflags & YAC_String::QUOT)
  1773. {
  1774. bflags |= YAC_String::QUOT;
  1775. }
  1776. }
  1777. }
  1778. else
  1779. {
  1780. ret=createEmpty();
  1781. }
  1782. }
  1783. return ret;
  1784. }
  1785. sBool YAC_String::append (YAC_String *o) {if(o&&o->chars&&o->length){sUI k=o->length+length;if(buflen<k){sU8 *nc=Dyacallocchars(k);sBool ret=(nc!=0) ? 1 : 0;if(ret){sU32 i=0;if(chars){for(;i<length-1; i++)nc[i]=chars[i];if((bflags&DEL)){Dyacfreechars(chars);};length--;}for(k=0; i<(length/*-1*/+o->length); i++, k++)nc[i]=o->chars[k];chars=nc; length=length+o->length;key=YAC_LOSTKEY;}return ret;}else{sU8*d=chars+length-1;sU32 i=0;for(;i< o->length;i++)*d++=o->chars[i];length=k-1;if(length==(sU32)-1){length=length;}key=YAC_LOSTKEY;return 1;}}return 0;}
  1786. sBool YAC_String::append (const char *_s) {YAC_String s; s.visit(_s); return append(&s);}
  1787. sBool YAC_String::substring (YAC_String *s,sUI start, sUI len) {if(len){if(chars&&(start+len)<=length){sU8*a=chars+start;sU32 k=a[len-1]!=0?len+1:len;if(s->realloc(k)){sU32 i=0;for(;i<len;i++)s->chars[i]=*a++;if(k!=len)s->chars[i]=0;return 1;}}else{if(s){s->empty();}}}else{s->empty();}return 0;}
  1788. sBool YAC_String::empty (void) {sBool ret=YAC_String::realloc(1);if(ret)*chars=0;return ret;}
  1789. void YAC_String::printf (const char *_fmt, ...) {va_list va;va_start(va,_fmt);
  1790. #ifdef YAC_VC
  1791. _vsnprintf((char*)chars, buflen, _fmt, va);
  1792. #else
  1793. vsnprintf((char*)chars, buflen, _fmt, va);
  1794. #endif
  1795. va_end(va);fixLength();}
  1796. #endif // YAC_BIGSTRING
  1797. #endif // YAC_CUST_STRING
  1798. #ifndef YAC_CUST_STRING
  1799. #endif
  1800. #ifdef YAC_PRINTF
  1801. void YAC_Host::printf (const char *_fmt, ...) {
  1802. if(_fmt)
  1803. {
  1804. #ifdef YAC_FORCE_NO_PRINTF_TLS
  1805. static char buf[128*1024];
  1806. #else
  1807. static YAC_TLS char buf[128*1024]; // TLS increases tks.exe file size by 128*1024 bytes :(
  1808. #endif // YAC_FORCE_NO_PRINTF_TLS
  1809. va_list va;
  1810. va_start(va,_fmt);
  1811. ::vsprintf(buf,/*, sizeof(buf)/sizeof(char),*/_fmt,va);
  1812. va_end(va);
  1813. yacPrint(buf);
  1814. }
  1815. }
  1816. #endif // YAC_PRINTF
  1817. // ----
  1818. // ----
  1819. // ---- Float relative (exponential) epsilon comparison helpers
  1820. // ---- contributed by Carsten Busse <carsten.busse@googlemail.com>
  1821. // ----
  1822. // ----
  1823. #ifdef YAC_EPSILONCOMPARE_REL
  1824. sSI yac_epsilon_flt_units = 10;
  1825. sS64 yac_epsilon_dbl_units = 100;
  1826. sF32 yac_epsilon_flt = YAC_FLT_EPSILON;
  1827. sF64 yac_epsilon_dbl = YAC_DBL_EPSILON;
  1828. #ifdef YAC_GCC
  1829. #include <math.h>
  1830. #define Dfabs(x) fabs(x)
  1831. #define Dfabsf(x) fabsf(x)
  1832. #else
  1833. #define Dfabs(x) ( (x<0.0)?(-x):(x) )
  1834. #define Dfabsf(x) ( (x<0.0f)?(-x):(x) )
  1835. #endif // YAC_GCC
  1836. sSI YAC_CALL yac_fltcmp_rel_fast(sF32 a, sF32 b) {
  1837. yacmem _a, _b, _c;
  1838. _a.f4 = a;
  1839. _b.f4 = b;
  1840. if( (a == 0.0f) || (b == 0.0f) )
  1841. {
  1842. _c.f4 = yac_epsilon_flt;
  1843. }
  1844. else
  1845. {
  1846. _c.si = yac_epsilon_flt_units;
  1847. }
  1848. if(_a.si < 0)
  1849. {
  1850. _a.ui = 0x80000000 - _a.ui;
  1851. }
  1852. if(_b.si < 0)
  1853. {
  1854. _b.ui = 0x80000000 - _b.ui;
  1855. }
  1856. if(abs(_a.si - _b.si) <= _c.si)
  1857. {
  1858. return 0;
  1859. }
  1860. else if(a < b)
  1861. {
  1862. return -1;
  1863. }
  1864. else
  1865. {
  1866. return 1;
  1867. }
  1868. }
  1869. sSI YAC_CALL yac_dblcmp_rel_fast(sF64 a, sF64 b) {
  1870. yacmem64 _a, _b, _c;
  1871. sS64 res;
  1872. _a.f8 = a;
  1873. _b.f8 = b;
  1874. if( (a == 0.0) || (b == 0.0) )
  1875. {
  1876. _c.f8 = yac_epsilon_dbl;
  1877. }
  1878. else
  1879. {
  1880. _c.si8 = yac_epsilon_dbl_units;
  1881. }
  1882. if(_a.si8 < 0)
  1883. {
  1884. _a.ui8 = 0x8000000000000000ull - _a.ui8;
  1885. }
  1886. if(_b.si8 < 0)
  1887. {
  1888. _b.ui8 = 0x8000000000000000ull - _b.ui8;
  1889. }
  1890. res = _a.si8 - _b.si8;
  1891. if(res < 0)
  1892. {
  1893. res = -res;
  1894. }
  1895. if(res <= _c.si8)
  1896. {
  1897. return 0;
  1898. }
  1899. else if(a < b)
  1900. {
  1901. return -1;
  1902. }
  1903. else
  1904. {
  1905. return 1;
  1906. }
  1907. }
  1908. sSI YAC_CALL yac_fltcmp_rel(sF32 a, sF32 b, sF32 err) {
  1909. //both 0
  1910. if( (a == 0.0f) && (b == 0.0f))
  1911. {
  1912. return 0;
  1913. }
  1914. if(err <= 0.0f)
  1915. {
  1916. err = yac_epsilon_flt;
  1917. }
  1918. //special cases where one value is 0
  1919. if(a == 0.0f)
  1920. {
  1921. if(Dfabsf(b) <= err)
  1922. {
  1923. return 0;
  1924. }
  1925. else if(0.0f < b)
  1926. {
  1927. return -1;
  1928. }
  1929. else
  1930. {
  1931. return 1;
  1932. }
  1933. }
  1934. else if(b == 0.0f)
  1935. {
  1936. if(Dfabsf(a) <= err)
  1937. {
  1938. return 0;
  1939. }
  1940. else if(a < 0.0f)
  1941. {
  1942. return -1;
  1943. }
  1944. else
  1945. {
  1946. return 1;
  1947. }
  1948. }
  1949. //both values != 0
  1950. sF32 amb = a - b;
  1951. if(Dfabsf(amb) <= (Dfabsf(a)*err))
  1952. {
  1953. return 0;
  1954. }
  1955. else if(a < b)
  1956. {
  1957. return -1;
  1958. }
  1959. else
  1960. {
  1961. return 1;
  1962. }
  1963. }
  1964. sSI YAC_CALL yac_dblcmp_rel(sF64 a, sF64 b, sF64 err) {
  1965. //both 0
  1966. if( (a == 0.0) && (b == 0.0) )
  1967. {
  1968. return 0;
  1969. }
  1970. if(err <= 0.0)
  1971. {
  1972. err = yac_epsilon_dbl;
  1973. }
  1974. //special cases where one value is 0
  1975. if(a == 0.0)
  1976. {
  1977. if(Dfabs(b) <= err)
  1978. {
  1979. return 0;
  1980. }
  1981. else if(0.0 < b)
  1982. {
  1983. return -1;
  1984. }
  1985. else
  1986. {
  1987. return 1;
  1988. }
  1989. }
  1990. else if(b == 0.0)
  1991. {
  1992. if(Dfabs(a) <= err)
  1993. {
  1994. return 0;
  1995. }
  1996. else if(a < 0.0)
  1997. {
  1998. return -1;
  1999. }
  2000. else
  2001. {
  2002. return 1;
  2003. }
  2004. }
  2005. //both values != 0
  2006. sF64 amb = a - b;
  2007. if(Dfabs(amb) <= (Dfabs(a) * err))
  2008. {
  2009. return 0;
  2010. }
  2011. else if(a < b)
  2012. {
  2013. return -1;
  2014. }
  2015. else
  2016. {
  2017. return 1;
  2018. }
  2019. }
  2020. #undef Dfabs
  2021. #undef Dfabsf
  2022. #endif // YAC_EPSILONCOMPARE_REL
  2023. // ----
  2024. // ----
  2025. // ---- PointerArray tool methods
  2026. // ----
  2027. // ----
  2028. #ifndef YAC_CUST_VALUE
  2029. sBool YAC_PointerArray::realloc(sUI _maxElements) {
  2030. return (sBool) yacArrayRealloc(_maxElements, 0,0,0);
  2031. }
  2032. sBool YAC_PointerArray::add(YAC_Object *_o, sBool _bDelete) {
  2033. if(num_elements == max_elements)
  2034. {
  2035. if(!YAC_PointerArray::realloc( (num_elements+10)+((sUI)(num_elements / 3)) ))
  2036. {
  2037. return 0;
  2038. }
  2039. }
  2040. elements[num_elements++].initObject(_o, _bDelete);
  2041. return 1;
  2042. }
  2043. void YAC_PointerArray::removeIndex(sUI _index) {
  2044. if(_index < num_elements)
  2045. {
  2046. if(num_elements>1)
  2047. {
  2048. for(sUI i=((sUI)_index); i<(num_elements-1); i++)
  2049. {
  2050. elements[i].unsetFast();
  2051. elements[i] = &elements[i+1];
  2052. }
  2053. elements[num_elements-1].unset();
  2054. }
  2055. else
  2056. {
  2057. elements[0].unset();
  2058. }
  2059. num_elements--;
  2060. }
  2061. }
  2062. sSI YAC_PointerArray::indexOfPointer(YAC_Object *_o, sUI _off) {
  2063. sUI i = (sUI) _off;
  2064. for(; i<num_elements; i++)
  2065. {
  2066. if( ((void*)elements[i].value.object_val) == ((void*)_o) )
  2067. {
  2068. // Ok, found object address
  2069. return (sSI) i;
  2070. }
  2071. }
  2072. // Failed, address not found
  2073. return -1;
  2074. }
  2075. #endif // YAC_CUST_VALUE
  2076. #ifdef YAC_GLOBAL_NEWDELETE
  2077. #ifdef YAC_NO_EXPORTS
  2078. sSI yac_global_newdelete_counter = 0; // Only implemented on host side, plugins will call yacTrackNewDelete()
  2079. sSI yac_global_newdelete_numallocs = 0;
  2080. sSI yac_global_newdelete_numfrees = 0;
  2081. #endif // YAC_NO_EXPORTS
  2082. void* operator new(size_t size) {
  2083. #ifdef YAC_NO_EXPORTS
  2084. yac_global_newdelete_counter += size;
  2085. yac_global_newdelete_numallocs++;
  2086. #else
  2087. yac_host->yacNewDeleteModifyCounter(size);
  2088. #endif // YAC_NO_EXPORTS
  2089. sSI *p = (sSI*) malloc(size+sizeof(sSI));
  2090. p[0] = size;
  2091. return &p[1];
  2092. }
  2093. void operator delete(void *_p) {
  2094. sSI *p = &((sSI*) _p)[-1];
  2095. #ifdef YAC_NO_EXPORTS
  2096. yac_global_newdelete_counter -= *p;
  2097. yac_global_newdelete_numfrees++;
  2098. #else
  2099. yac_host->yacNewDeleteModifyCounter(-*p);
  2100. #endif // YAC_NO_EXPORTS
  2101. free(p);
  2102. }
  2103. #endif // YAC_GLOBAL_NEWDELETE
  2104. #endif // __YAC_HOST_CPP__