DataType.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef DATATYPE_H
  2. #define DATATYPE_H
  3. #include <stdbool.h>
  4. #define DT_INT 0
  5. #define DT_FLOAT 1
  6. #define DT_BOOL 2
  7. #define DT_VOID 3
  8. #define DT_STRUCT 4
  9. typedef struct {
  10. unsigned int type : 4;
  11. unsigned int pointers : 4;
  12. unsigned int structId : 24;
  13. } DataType;
  14. typedef struct {
  15. const char* name;
  16. DataType type;
  17. } StructVariable;
  18. typedef struct {
  19. const char* name;
  20. int id;
  21. int amount;
  22. StructVariable* vars;
  23. } Struct;
  24. typedef struct {
  25. int capacity;
  26. int entries;
  27. Struct* data;
  28. } Structs;
  29. typedef struct {
  30. int array;
  31. int offset;
  32. } Pointer;
  33. int dtGetSize(DataType dt, Structs* sts);
  34. DataType dtInt();
  35. DataType dtFloat();
  36. DataType dtBool();
  37. DataType dtVoid();
  38. DataType dtStruct(Struct* st);
  39. DataType dtReference(DataType dt);
  40. bool dtDereference(DataType* dt);
  41. Struct* dtGetStruct(Structs* sts, DataType dt);
  42. DataType dtToVariable(DataType dt);
  43. bool dtRemoveVariable(DataType* dt);
  44. bool dtCompare(DataType a, DataType b);
  45. bool dtIsInt(DataType dt);
  46. bool dtIsFloat(DataType dt);
  47. bool dtIsBool(DataType dt);
  48. bool dtIsVoid(DataType dt);
  49. bool dtIsPointer(DataType dt);
  50. bool dtIsVariable(DataType dt);
  51. const char* dtGetName(Structs* sts, DataType dt);
  52. void stAddVariable(Struct* st, const char* name, DataType type);
  53. void stsInit(Structs* sts);
  54. void stsDelete(Structs* sts);
  55. Struct* stsSearch(Structs* sts, const char* name);
  56. Struct* stsAdd(Structs* sts, const char* name);
  57. #endif