#ifndef COMPILER_RULES_CHARACTER_SET_H_ #define COMPILER_RULES_CHARACTER_SET_H_ #include #include #include #include #include "compiler/rules/rule.h" #include "compiler/rules/character_range.h" namespace tree_sitter { namespace rules { class CharacterSet : public Rule { public: CharacterSet(); explicit CharacterSet(const std::set &ranges); explicit CharacterSet(const std::initializer_list &ranges); bool operator==(const Rule& other) const; bool operator<(const CharacterSet &) const; size_t hash_code() const; rule_ptr copy() const; std::string to_string() const; void accept(Visitor *visitor) const; void add_set(const CharacterSet &other); CharacterSet remove_set(const CharacterSet &other); CharacterSet complement() const; CharacterSet intersect(const CharacterSet &) const; std::pair most_compact_representation() const; bool is_empty() const; std::set ranges; }; } } namespace std { template<> struct hash { size_t operator()(const tree_sitter::rules::CharacterSet &rule) const { return rule.hash_code(); } }; } #endif // COMPILER_RULES_CHARACTER_SET_H_