#pragma once #include #include #include "../interface.hpp" #include "../types.hpp" namespace lsp::language::symbol::graph { class Inheritance : public ISymbolGraph { public: void OnSymbolRemoved(SymbolId id) override; void Clear() override; void AddInheritance(SymbolId derived, SymbolId base); const std::vector& base_classes(SymbolId id) const; const std::vector& derived_classes(SymbolId id) const; bool IsSubclassOf(SymbolId derived, SymbolId base) const; private: std::unordered_map> base_classes_; std::unordered_map> derived_classes_; }; } // namespace lsp::language::symbol::graph