bbtypeinfo.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #ifndef BB_TYPEINFO_H
  2. #define BB_TYPEINFO_H
  3. #include "bbassert.h"
  4. #include "bbobject.h"
  5. #include "bbarray.h"
  6. #include "bbfunction.h"
  7. //struct bbClassTypeInfo;
  8. struct bbTypeInfo{
  9. bbString name;
  10. bbString kind;
  11. bbString getName(){
  12. return name;
  13. }
  14. bbString getKind(){
  15. return kind;
  16. }
  17. virtual bbString toString();
  18. virtual bbTypeInfo *pointeeType();
  19. virtual bbTypeInfo *elementType();
  20. virtual int arrayRank();
  21. virtual bbTypeInfo *returnType();
  22. virtual bbArray<bbTypeInfo*> paramTypes();
  23. virtual bbTypeInfo *superType();
  24. virtual bbArray<bbTypeInfo*> interfaceTypes();
  25. virtual bbBool extendsType( bbTypeInfo *type );
  26. virtual bbArray<bbDeclInfo*> getDecls();
  27. virtual bbVariant makeEnum( int value );
  28. virtual int getEnum( bbVariant );
  29. virtual bbVariant nullValue();
  30. virtual bbVariant newArray( int length );
  31. bbDeclInfo *getDecl( bbString name );
  32. bbDeclInfo *getDecl( bbString name,bbTypeInfo *type );
  33. bbArray<bbDeclInfo*> getDecls( bbString name );
  34. static bbTypeInfo *getType( bbString cname );
  35. static bbArray<bbTypeInfo*> getTypes();
  36. };
  37. #define BB_GETTYPE_DECL( TYPE ) bbTypeInfo *bbGetType( TYPE const& );
  38. BB_GETTYPE_DECL( bbBool )
  39. BB_GETTYPE_DECL( bbByte )
  40. BB_GETTYPE_DECL( bbUByte )
  41. BB_GETTYPE_DECL( bbShort )
  42. BB_GETTYPE_DECL( bbUShort )
  43. BB_GETTYPE_DECL( bbInt )
  44. BB_GETTYPE_DECL( bbUInt )
  45. BB_GETTYPE_DECL( bbLong )
  46. BB_GETTYPE_DECL( bbULong )
  47. BB_GETTYPE_DECL( bbFloat )
  48. BB_GETTYPE_DECL( bbDouble )
  49. BB_GETTYPE_DECL( bbString )
  50. BB_GETTYPE_DECL( bbCString )
  51. BB_GETTYPE_DECL( bbVariant )
  52. template<class T> bbTypeInfo *bbGetType( T* const& );
  53. template<class T> bbTypeInfo *bbGetType(){
  54. return bbGetType( *(T*)0 );
  55. }
  56. struct bbUnknownTypeInfo : public bbTypeInfo{
  57. bbUnknownTypeInfo( const char *name );
  58. };
  59. struct bbVoidTypeInfo : public bbTypeInfo{
  60. static bbVoidTypeInfo instance;
  61. bbVoidTypeInfo();
  62. };
  63. struct bbObjectTypeInfo : public bbTypeInfo{
  64. static bbObjectTypeInfo instance;
  65. bbObjectTypeInfo();
  66. bbTypeInfo *superType();
  67. bbBool extendsType( bbTypeInfo *type );
  68. bbArray<bbDeclInfo*> getDecls();
  69. };
  70. #endif