#ifndef RULE_ENGINE_H #define RULE_ENGINE_H #include "common.h" #include #include #include #include class RuleEngine { public: RuleEngine(); ~RuleEngine(); // Load rules from parsed data bool LoadRules(const std::vector& rules); // Check if domain should be blocked (thread-safe) FilterAction CheckDomain(const std::string& domain) const; // Get statistics size_t GetRuleCount() const; // Clear all rules void ClearRules(); private: // Exact match rules (fastest lookup) std::unordered_set blocked_domains_; std::unordered_set allowed_domains_; // Wildcard pattern rules struct WildcardRule { std::string pattern; FilterAction action; WildcardRule(const std::string& p, FilterAction a) : pattern(p), action(a) {} }; std::vector wildcard_rules_; // Thread safety mutable std::shared_mutex rules_mutex_; // Helper functions bool MatchWildcard(const std::string& pattern, const std::string& domain) const; std::string NormalizeDomain(const std::string& domain) const; }; #endif // RULE_ENGINE_H