Program Listing for File ClassHierarchyGraph.h#
↰ Return to documentation for file (src/midend/programAnalysis/CallGraphAnalysis/ClassHierarchyGraph.h)
#ifndef CLASS_HIERARCHY_GRAPH_H
#define CLASS_HIERARCHY_GRAPH_H
#include <vector>
#include <map>
#include <unordered_map>
#include <unordered_set>
class ROSE_DLL_API ClassHierarchyWrapper
{
public:
typedef std::unordered_set<SgClassDefinition*> ClassDefSet;
typedef std::unordered_map<std::string, ClassDefSet> MangledNameToClassDefsMap;
private:
MangledNameToClassDefsMap directParents;
MangledNameToClassDefsMap directChildren;
MangledNameToClassDefsMap ancestorClasses;
MangledNameToClassDefsMap subclasses;
#if 0 // [Robb Matzke 2021-03-17]: unused
SgIncidenceDirectedGraph* classGraph;
#endif
public:
explicit
ClassHierarchyWrapper(SgNode* node);
const ClassDefSet& getSubclasses(SgClassDefinition *) const;
const ClassDefSet& getDirectSubclasses(SgClassDefinition *) const;
const ClassDefSet& getAncestorClasses(SgClassDefinition *) const;
private:
static void buildAncestorsMap(const MangledNameToClassDefsMap& parents, MangledNameToClassDefsMap& transitiveParents);
};
#endif