reflection.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <brl.mod/blitz.mod/blitz.h>
  2. #include <cstdarg>
  3. extern "C"{
  4. void *bbRefFieldPtr( BBObject *obj,int index ){
  5. return (char*)obj+index;
  6. }
  7. void *bbRefMethodPtr( BBObject *obj,int index ){
  8. return *( (void**) ((char*)obj->clas+index) );
  9. }
  10. void *bbRefArrayElementPtr( int sz,BBArray *array,int index ){
  11. return (char*)BBARRAYDATA( array,array->dims )+sz*index;
  12. }
  13. int bbRefArrayClass(){
  14. return (int)&bbArrayClass;
  15. }
  16. int bbRefStringClass(){
  17. return (int)&bbStringClass;
  18. }
  19. int bbRefObjectClass(){
  20. return (int)&bbObjectClass;
  21. }
  22. int bbRefArrayLength( BBArray *array, int dim ){
  23. return array->scales[((dim <= array->dims)? dim : 0)];
  24. }
  25. int bbRefArrayDimensions( BBArray *array ){
  26. return array->dims;
  27. }
  28. //Note: arrDims must be 1D int array...
  29. BBArray *bbRefArrayCreate( const char *type,BBArray *arrDims ){
  30. // assert( arrDims->dims==1 );
  31. // assert( arrDims->type[0]=='i' );
  32. int dims=arrDims->scales[0];
  33. int *lens=(int*)BBARRAYDATA( arrDims,1 );
  34. return bbArrayNewEx( type,dims,lens );
  35. }
  36. BBString *bbRefArrayTypeTag( BBArray *array ){
  37. return bbStringFromCString( array->type );
  38. }
  39. BBObject *bbRefGetObject( BBObject **p ){
  40. return *p;
  41. }
  42. void bbRefPushObject( BBObject **p,BBObject *t ){
  43. *p=t;
  44. }
  45. void bbRefInitObject( BBObject **p,BBObject *t ){
  46. BBRETAIN( t );
  47. *p=t;
  48. }
  49. void bbRefAssignObject( BBObject **p,BBObject *t ){
  50. BBRETAIN( t );
  51. BBRELEASE( *p );
  52. *p=t;
  53. }
  54. BBClass *bbRefGetObjectClass( BBObject *p ){
  55. return p->clas;
  56. }
  57. BBClass *bbRefGetSuperClass( BBClass *clas ){
  58. return clas->super;
  59. }
  60. }