#pragma once #include #include "TypeRegistry.h" class Block; class BlockFilter : public Framework::ReferenceCounter { public: BlockFilter(); virtual bool test(const Block* zBlock) = 0; }; class BlockFilterAnd : public BlockFilter { private: Framework::RCArray filters; public: BlockFilterAnd(Framework::RCArray filters); bool test(const Block* zBlock) override; Framework::RCArray getFilters() const; }; class BlockFilterAndFactory : public SubTypeFactory { public: BlockFilterAndFactory(); BlockFilterAnd* fromJson(Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson(BlockFilterAnd* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterOr : public BlockFilter { private: Framework::RCArray filters; public: BlockFilterOr(Framework::RCArray filters); bool test(const Block* zBlock) override; Framework::RCArray getFilters() const; }; class BlockFilterOrFactory : public SubTypeFactory { public: BlockFilterOrFactory(); BlockFilterOr* fromJson(Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson(BlockFilterOr* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterNot : public BlockFilter { private: BlockFilter* filter; public: BlockFilterNot(BlockFilter* filter); bool test(const Block* zBlock) override; BlockFilter* zFilter() const; }; class BlockFilterNotFactory : public SubTypeFactory { public: BlockFilterNotFactory(); BlockFilterNot* fromJson(Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson(BlockFilterNot* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterBlockType : public BlockFilter { private: Framework::Array blockTypeIds; public: BlockFilterBlockType(Framework::Array blockTypeIds); bool test(const Block* zBlock) override; const Framework::Array& getBlockTypeIds() const; }; class BlockFilterBlockTypeFactory : public SubTypeFactory { public: BlockFilterBlockTypeFactory(); BlockFilterBlockType* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( BlockFilterBlockType* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterTypeGroup : public BlockFilter { private: Framework::RCArray groupNames; public: BlockFilterTypeGroup(Framework::RCArray groupNames); bool test(const Block* zBlock) override; const Framework::RCArray& getGroupNames() const; }; class BlockFilterTypeGroupFactory : public SubTypeFactory { public: BlockFilterTypeGroupFactory(); BlockFilterTypeGroup* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( BlockFilterTypeGroup* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterMaxHardness : public BlockFilter { private: float maxHardness; public: BlockFilterMaxHardness(float maxHardness); bool test(const Block* zBlock) override; float getMaxHardness() const; }; class BlockFilterMaxHardnessFactory : public SubTypeFactory { public: BlockFilterMaxHardnessFactory(); BlockFilterMaxHardness* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( BlockFilterMaxHardness* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterMinHardness : public BlockFilter { private: float minHardness; public: BlockFilterMinHardness(float minHardness); bool test(const Block* zBlock) override; float getMinHardness() const; }; class BlockFilterMinHardnessFactory : public SubTypeFactory { public: BlockFilterMinHardnessFactory(); BlockFilterMinHardness* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( BlockFilterMinHardness* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class BlockFilterMaxHeat : public BlockFilter { private: float maxHeat; public: BlockFilterMaxHeat(float maxHeat); bool test(const Block* zBlock) override; float getMaxHeat() const; }; class BlockFilterMaxHeatFactory : public SubTypeFactory { public: BlockFilterMaxHeatFactory(); BlockFilterMaxHeat* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( BlockFilterMaxHeat* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; };