DataType.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef DATATYPE_H
  2. #define DATATYPE_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include <stdbool.h>
  7. #include "Types.h"
  8. #define VT_NOT_SET 0
  9. #define VT_INT 1
  10. #define VT_FLOAT 2
  11. #define VT_POINTER 3
  12. #define VT_ARRAY 4
  13. typedef struct {
  14. unsigned int type : 4;
  15. unsigned int offset : 28;
  16. union {
  17. int intValue;
  18. float floatValue;
  19. } data;
  20. } Value;
  21. #define DT_INT 0
  22. #define DT_FLOAT 1
  23. #define DT_VOID 2
  24. #define DT_STRUCT 3
  25. typedef struct {
  26. uint8 type : 7;
  27. uint8 pointer : 1;
  28. uint8 array;
  29. uint16 structId;
  30. } DataType;
  31. typedef struct {
  32. const char* name;
  33. DataType type;
  34. } StructVariable;
  35. typedef struct {
  36. const char* name;
  37. int id;
  38. int amount;
  39. StructVariable* vars;
  40. } Struct;
  41. typedef struct {
  42. int capacity;
  43. int entries;
  44. Struct* data;
  45. } Structs;
  46. int dtGetSize(DataType dt, const Structs* sts);
  47. DataType dtInt();
  48. DataType dtFloat();
  49. DataType dtVoid();
  50. DataType dtStruct(const Struct* st);
  51. DataType dtText();
  52. DataType dtToArray(DataType dt);
  53. DataType dtRemoveArray(DataType dt);
  54. Struct* dtGetStruct(const Structs* sts, DataType dt);
  55. DataType dtToPointer(DataType dt);
  56. bool dtRemovePointer(DataType* dt);
  57. bool dtCompare(DataType a, DataType b);
  58. bool dtIsInt(DataType dt);
  59. bool dtIsFloat(DataType dt);
  60. bool dtIsVoid(DataType dt);
  61. bool dtIsArray(DataType dt);
  62. const char* dtGetName(const Structs* sts, DataType dt);
  63. void stAddVariable(Struct* st, const char* name, DataType type);
  64. void stsInit(Structs* sts);
  65. void stsDelete(Structs* sts);
  66. Struct* stsSearch(Structs* sts, const char* name);
  67. Struct* stsAdd(Structs* sts, const char* name);
  68. void gstsInit();
  69. void gstsDelete();
  70. Structs* gstsGet();
  71. Struct* gstsAdd(const char* name);
  72. #ifdef __cplusplus
  73. }
  74. #endif
  75. #endif