BlockFilter.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #pragma once
  2. #include <Array.h>
  3. #include "TypeRegistry.h"
  4. class Block;
  5. class BlockFilter : public Framework::ReferenceCounter
  6. {
  7. public:
  8. BlockFilter();
  9. virtual bool test(const Block* zBlock) = 0;
  10. };
  11. class BlockFilterAnd : public BlockFilter
  12. {
  13. private:
  14. Framework::RCArray<BlockFilter> filters;
  15. public:
  16. BlockFilterAnd(Framework::RCArray<BlockFilter> filters);
  17. bool test(const Block* zBlock) override;
  18. Framework::RCArray<BlockFilter> getFilters() const;
  19. };
  20. class BlockFilterAndFactory : public SubTypeFactory<BlockFilter, BlockFilterAnd>
  21. {
  22. public:
  23. BlockFilterAndFactory();
  24. BlockFilterAnd* fromJson(Framework::JSON::JSONObject* zJson) const override;
  25. Framework::JSON::JSONObject* toJson(BlockFilterAnd* zObject) const override;
  26. Framework::JSON::Validator::JSONValidator* getValidator(
  27. Framework::JSON::Validator::ObjectValidationBuilder<
  28. Framework::JSON::Validator::JSONValidator>* builder) const override;
  29. Framework::Text getTypeToken() const override;
  30. };
  31. class BlockFilterOr : public BlockFilter
  32. {
  33. private:
  34. Framework::RCArray<BlockFilter> filters;
  35. public:
  36. BlockFilterOr(Framework::RCArray<BlockFilter> filters);
  37. bool test(const Block* zBlock) override;
  38. Framework::RCArray<BlockFilter> getFilters() const;
  39. };
  40. class BlockFilterOrFactory : public SubTypeFactory<BlockFilter, BlockFilterOr>
  41. {
  42. public:
  43. BlockFilterOrFactory();
  44. BlockFilterOr* fromJson(Framework::JSON::JSONObject* zJson) const override;
  45. Framework::JSON::JSONObject* toJson(BlockFilterOr* zObject) const override;
  46. Framework::JSON::Validator::JSONValidator* getValidator(
  47. Framework::JSON::Validator::ObjectValidationBuilder<
  48. Framework::JSON::Validator::JSONValidator>* builder) const override;
  49. Framework::Text getTypeToken() const override;
  50. };
  51. class BlockFilterNot : public BlockFilter
  52. {
  53. private:
  54. BlockFilter* filter;
  55. public:
  56. BlockFilterNot(BlockFilter* filter);
  57. bool test(const Block* zBlock) override;
  58. BlockFilter* zFilter() const;
  59. };
  60. class BlockFilterNotFactory : public SubTypeFactory<BlockFilter, BlockFilterNot>
  61. {
  62. public:
  63. BlockFilterNotFactory();
  64. BlockFilterNot* fromJson(Framework::JSON::JSONObject* zJson) const override;
  65. Framework::JSON::JSONObject* toJson(BlockFilterNot* zObject) const override;
  66. Framework::JSON::Validator::JSONValidator* getValidator(
  67. Framework::JSON::Validator::ObjectValidationBuilder<
  68. Framework::JSON::Validator::JSONValidator>* builder) const override;
  69. Framework::Text getTypeToken() const override;
  70. };
  71. class BlockFilterBlockType : public BlockFilter
  72. {
  73. private:
  74. Framework::Array<int> blockTypeIds;
  75. public:
  76. BlockFilterBlockType(Framework::Array<int> blockTypeIds);
  77. bool test(const Block* zBlock) override;
  78. const Framework::Array<int>& getBlockTypeIds() const;
  79. };
  80. class BlockFilterBlockTypeFactory
  81. : public SubTypeFactory<BlockFilter, BlockFilterBlockType>
  82. {
  83. public:
  84. BlockFilterBlockTypeFactory();
  85. BlockFilterBlockType* fromJson(
  86. Framework::JSON::JSONObject* zJson) const override;
  87. Framework::JSON::JSONObject* toJson(
  88. BlockFilterBlockType* zObject) const override;
  89. Framework::JSON::Validator::JSONValidator* getValidator(
  90. Framework::JSON::Validator::ObjectValidationBuilder<
  91. Framework::JSON::Validator::JSONValidator>* builder) const override;
  92. Framework::Text getTypeToken() const override;
  93. };
  94. class BlockFilterTypeGroup : public BlockFilter
  95. {
  96. private:
  97. Framework::RCArray<Framework::Text> groupNames;
  98. public:
  99. BlockFilterTypeGroup(Framework::RCArray<Framework::Text> groupNames);
  100. bool test(const Block* zBlock) override;
  101. const Framework::RCArray<Framework::Text>& getGroupNames() const;
  102. };
  103. class BlockFilterTypeGroupFactory
  104. : public SubTypeFactory<BlockFilter, BlockFilterTypeGroup>
  105. {
  106. public:
  107. BlockFilterTypeGroupFactory();
  108. BlockFilterTypeGroup* fromJson(
  109. Framework::JSON::JSONObject* zJson) const override;
  110. Framework::JSON::JSONObject* toJson(
  111. BlockFilterTypeGroup* zObject) const override;
  112. Framework::JSON::Validator::JSONValidator* getValidator(
  113. Framework::JSON::Validator::ObjectValidationBuilder<
  114. Framework::JSON::Validator::JSONValidator>* builder) const override;
  115. Framework::Text getTypeToken() const override;
  116. };
  117. class BlockFilterMaxHardness : public BlockFilter
  118. {
  119. private:
  120. float maxHardness;
  121. public:
  122. BlockFilterMaxHardness(float maxHardness);
  123. bool test(const Block* zBlock) override;
  124. float getMaxHardness() const;
  125. };
  126. class BlockFilterMaxHardnessFactory
  127. : public SubTypeFactory<BlockFilter, BlockFilterMaxHardness>
  128. {
  129. public:
  130. BlockFilterMaxHardnessFactory();
  131. BlockFilterMaxHardness* fromJson(
  132. Framework::JSON::JSONObject* zJson) const override;
  133. Framework::JSON::JSONObject* toJson(
  134. BlockFilterMaxHardness* zObject) const override;
  135. Framework::JSON::Validator::JSONValidator* getValidator(
  136. Framework::JSON::Validator::ObjectValidationBuilder<
  137. Framework::JSON::Validator::JSONValidator>* builder) const override;
  138. Framework::Text getTypeToken() const override;
  139. };
  140. class BlockFilterMinHardness : public BlockFilter
  141. {
  142. private:
  143. float minHardness;
  144. public:
  145. BlockFilterMinHardness(float minHardness);
  146. bool test(const Block* zBlock) override;
  147. float getMinHardness() const;
  148. };
  149. class BlockFilterMinHardnessFactory
  150. : public SubTypeFactory<BlockFilter, BlockFilterMinHardness>
  151. {
  152. public:
  153. BlockFilterMinHardnessFactory();
  154. BlockFilterMinHardness* fromJson(
  155. Framework::JSON::JSONObject* zJson) const override;
  156. Framework::JSON::JSONObject* toJson(
  157. BlockFilterMinHardness* zObject) const override;
  158. Framework::JSON::Validator::JSONValidator* getValidator(
  159. Framework::JSON::Validator::ObjectValidationBuilder<
  160. Framework::JSON::Validator::JSONValidator>* builder) const override;
  161. Framework::Text getTypeToken() const override;
  162. };
  163. class BlockFilterMaxHeat : public BlockFilter
  164. {
  165. private:
  166. float maxHeat;
  167. public:
  168. BlockFilterMaxHeat(float maxHeat);
  169. bool test(const Block* zBlock) override;
  170. float getMaxHeat() const;
  171. };
  172. class BlockFilterMaxHeatFactory
  173. : public SubTypeFactory<BlockFilter, BlockFilterMaxHeat>
  174. {
  175. public:
  176. BlockFilterMaxHeatFactory();
  177. BlockFilterMaxHeat* fromJson(
  178. Framework::JSON::JSONObject* zJson) const override;
  179. Framework::JSON::JSONObject* toJson(
  180. BlockFilterMaxHeat* zObject) const override;
  181. Framework::JSON::Validator::JSONValidator* getValidator(
  182. Framework::JSON::Validator::ObjectValidationBuilder<
  183. Framework::JSON::Validator::JSONValidator>* builder) const override;
  184. Framework::Text getTypeToken() const override;
  185. };