00001 #ifndef CLASS_HIERARCHY_GRAPH_H 00002 #define CLASS_HIERARCHY_GRAPH_H 00003 00004 #include <vector> 00005 #include <map> 00006 #include <boost/unordered_set.hpp> 00007 00008 class ClassHierarchyWrapper 00009 { 00010 public: 00011 typedef boost::unordered_set<SgClassDefinition*> ClassDefSet; 00012 00013 typedef boost::unordered_map<std::string, ClassDefSet> MangledNameToClassDefsMap; 00014 00015 private: 00016 00017 00019 MangledNameToClassDefsMap directParents; 00020 00022 MangledNameToClassDefsMap directChildren; 00023 00025 MangledNameToClassDefsMap ancestorClasses; 00026 00028 MangledNameToClassDefsMap subclasses; 00029 00030 SgIncidenceDirectedGraph* classGraph; 00031 00032 public: 00033 00034 ClassHierarchyWrapper(SgNode *node); 00035 const ClassDefSet& getSubclasses(SgClassDefinition *) const; 00036 const ClassDefSet& getDirectSubclasses(SgClassDefinition *) const; 00037 const ClassDefSet& getAncestorClasses(SgClassDefinition *) const; 00038 00039 private: 00040 00044 static void buildAncestorsMap(const MangledNameToClassDefsMap& parents, MangledNameToClassDefsMap& transitiveParents); 00045 }; 00046 00047 00048 #endif
1.4.7