Program Listing for File ClassHierarchyGraph.h

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