A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SRF.h 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #pragma once
  2. #include <ostream>
  3. #include <istream>
  4. #include <vector>
  5. #include <unordered_map>
  6. #include <memory>
  7. #include <string>
  8. #include <initializer_list>
  9. #include <utility>
  10. #include <stdint.h>
  11. namespace Swan {
  12. struct SRF {
  13. virtual ~SRF() = default;
  14. virtual void serialize(std::ostream &os) const = 0;
  15. virtual void parse(std::istream &is) = 0;
  16. virtual std::ostream &pretty(std::ostream &os) const = 0;
  17. static SRF *read(std::istream &is);
  18. };
  19. struct SRFObject: SRF {
  20. SRFObject() {}
  21. SRFObject(std::initializer_list<std::pair<std::string, SRF *>> lst);
  22. void serialize(std::ostream &os) const override;
  23. void parse(std::istream &os) override;
  24. std::ostream &pretty(std::ostream &os) const override;
  25. std::unordered_map<std::string, std::unique_ptr<SRF>> val;
  26. };
  27. struct SRFArray: SRF {
  28. SRFArray() {}
  29. SRFArray(std::initializer_list<SRF *> lst);
  30. void serialize(std::ostream &os) const override;
  31. void parse(std::istream &os) override;
  32. std::ostream &pretty(std::ostream &os) const override;
  33. std::vector<std::unique_ptr<SRF>> val;
  34. };
  35. struct SRFString: SRF {
  36. SRFString(): val("") {}
  37. SRFString(const std::string &v): val(v) {}
  38. void serialize(std::ostream &os) const override;
  39. void parse(std::istream &os) override;
  40. std::ostream &pretty(std::ostream &os) const override;
  41. std::string val;
  42. };
  43. struct SRFByte: SRF {
  44. SRFByte(): val(0) {}
  45. SRFByte(uint8_t v): val(v) {}
  46. void serialize(std::ostream &os) const override;
  47. void parse(std::istream &os) override;
  48. std::ostream &pretty(std::ostream &os) const override;
  49. uint8_t val;
  50. };
  51. struct SRFWord: SRF {
  52. SRFWord(): val(0) {}
  53. SRFWord(uint16_t v): val(v) {}
  54. void serialize(std::ostream &os) const override;
  55. void parse(std::istream &os) override;
  56. std::ostream &pretty(std::ostream &os) const override;
  57. uint16_t val;
  58. };
  59. struct SRFInt: SRF {
  60. SRFInt(): val(0) {}
  61. SRFInt(int32_t v): val(v) {}
  62. void serialize(std::ostream &os) const override;
  63. void parse(std::istream &os) override;
  64. std::ostream &pretty(std::ostream &os) const override;
  65. int32_t val;
  66. };
  67. struct SRFFloat: SRF {
  68. SRFFloat(): val(0) {}
  69. SRFFloat(float v): val(v) {}
  70. void serialize(std::ostream &os) const override;
  71. void parse(std::istream &os) override;
  72. std::ostream &pretty(std::ostream &os) const override;
  73. float val;
  74. };
  75. struct SRFDouble: SRF {
  76. SRFDouble(): val(0) {}
  77. SRFDouble(double v): val(v) {}
  78. void serialize(std::ostream &os) const override;
  79. void parse(std::istream &os) override;
  80. std::ostream &pretty(std::ostream &os) const override;
  81. double val;
  82. };
  83. struct SRFNone: SRF {
  84. void serialize(std::ostream &os) const override;
  85. void parse(std::istream &os) override;
  86. std::ostream &pretty(std::ostream &os) const override;
  87. };
  88. struct SRFByteArray: SRF {
  89. SRFByteArray() = default;
  90. SRFByteArray(std::initializer_list<uint8_t> lst): val(lst) {}
  91. SRFByteArray(std::vector<uint8_t> v): val(v) {}
  92. void serialize(std::ostream &os) const override;
  93. void parse(std::istream &os) override;
  94. std::ostream &pretty(std::ostream &os) const override;
  95. std::vector<uint8_t> val;
  96. };
  97. struct SRFWordArray: SRF {
  98. SRFWordArray() = default;
  99. SRFWordArray(std::initializer_list<uint16_t> v): val(v) {}
  100. SRFWordArray(std::vector<uint16_t> v): val(v) {}
  101. void serialize(std::ostream &os) const override;
  102. void parse(std::istream &os) override;
  103. std::ostream &pretty(std::ostream &os) const override;
  104. std::vector<uint16_t> val;
  105. };
  106. struct SRFIntArray: SRF {
  107. SRFIntArray() = default;
  108. SRFIntArray(std::initializer_list<int> v): val(v) {}
  109. SRFIntArray(std::vector<int32_t> v): val(v) {}
  110. void serialize(std::ostream &os) const override;
  111. void parse(std::istream &os) override;
  112. std::ostream &pretty(std::ostream &os) const override;
  113. std::vector<int32_t> val;
  114. };
  115. struct SRFFloatArray: SRF {
  116. SRFFloatArray() = default;
  117. SRFFloatArray(std::initializer_list<float> v): val(v) {}
  118. SRFFloatArray(std::vector<float> v): val(v) {}
  119. void serialize(std::ostream &os) const override;
  120. void parse(std::istream &os) override;
  121. std::ostream &pretty(std::ostream &os) const override;
  122. std::vector<float> val;
  123. };
  124. struct SRFDoubleArray: SRF {
  125. SRFDoubleArray() = default;
  126. SRFDoubleArray(std::initializer_list<double> v): val(v) {}
  127. SRFDoubleArray(std::vector<double> v): val(v) {}
  128. void serialize(std::ostream &os) const override;
  129. void parse(std::istream &os) override;
  130. std::ostream &pretty(std::ostream &os) const override;
  131. std::vector<double> val;
  132. };
  133. }