28 lines
725 B
C++
28 lines
725 B
C++
#pragma once
|
|
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#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<SymbolId>& base_classes(SymbolId id) const;
|
|
const std::vector<SymbolId>& derived_classes(SymbolId id) const;
|
|
bool IsSubclassOf(SymbolId derived, SymbolId base) const;
|
|
|
|
private:
|
|
std::unordered_map<SymbolId, std::vector<SymbolId>> base_classes_;
|
|
std::unordered_map<SymbolId, std::vector<SymbolId>> derived_classes_;
|
|
};
|
|
|
|
} // namespace lsp::language::symbol::graph
|