DataType.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "DataType.h"
  2. #define ARRAY_NAME 20
  3. #define ARRAY_FACTOR 10
  4. static char arrayName[ARRAY_NAME];
  5. static const char* dtGetBaseName(DataType dt) {
  6. switch(dt) {
  7. case DT_INT: return "int";
  8. case DT_FLOAT: return "float";
  9. case DT_BOOL: return "bool";
  10. default: return "";
  11. }
  12. }
  13. static const char* dtGetArrayName(DataType dt) {
  14. int dimension = dt % ARRAY_FACTOR;
  15. DataType real = (dt / ARRAY_FACTOR) - 1;
  16. const char* name = dtGetBaseName(real);
  17. if(name[0] == '\0' || dimension <= 0 || dimension > dtMaxDimensions()) {
  18. return "unknown";
  19. }
  20. int index = 0;
  21. while(index < (ARRAY_NAME - 1) && name[index] != '\0') {
  22. arrayName[index] = name[index];
  23. index++;
  24. }
  25. while(index < (ARRAY_NAME - 1) && dimension > 0) {
  26. arrayName[index] = '*';
  27. index++;
  28. dimension--;
  29. }
  30. arrayName[index] = '\0';
  31. return arrayName;
  32. }
  33. const char* dtGetName(DataType dt) {
  34. const char* name = dtGetBaseName(dt);
  35. if(name[0] == '\0') {
  36. return dtGetArrayName(dt);
  37. }
  38. return name;
  39. }
  40. int dtGetSize(DataType dt) {
  41. switch(dt) {
  42. case DT_INT: return sizeof(int);
  43. case DT_FLOAT: return sizeof(float);
  44. case DT_BOOL: return sizeof(bool);
  45. default: return sizeof(int);
  46. }
  47. }
  48. DataType dtArray(DataType dt, int dimensions) {
  49. return (dt + 1) * ARRAY_FACTOR + dimensions;
  50. }
  51. int dtMaxDimensions() {
  52. return ARRAY_FACTOR - 1;
  53. }
  54. bool dtIsArray(DataType dt) {
  55. return dt > ARRAY_FACTOR;
  56. }