#pragma once #include "Utils.hpp" #include "Reporter.hpp" #include "Map.hpp" #include #include #include #include #include #include namespace BMapInspector::Rule { class IRule { public: IRule(); virtual ~IRule(); YYCC_DELETE_COPY_MOVE(IRule) public: virtual std::u8string_view GetRuleName() const = 0; virtual void Check(Reporter::Reporter& reporter, Map::Level& ctx) const = 0; }; class Ruleset { public: Ruleset(); ~Ruleset(); YYCC_DELETE_COPY_MOVE(Ruleset) public: size_t GetRuleCount() const; const std::vector &GetRules() const; private: std::vector rules; }; } // namespace BMapInspector::Ruleset