CSFIActivity/DUGInterface.hpp

Go to the documentation of this file.
00001 
00017 //--------------------------------------------------------------------
00018 //--------------------------------------------------------------------
00019 
00020 #ifndef DUGInterface_H
00021 #define DUGInterface_H
00022 
00023 #include <OpenAnalysis/IRInterface/IRHandles.hpp>
00024 #include <OpenAnalysis/Utils/DGraph/DGraphInterface.hpp>
00025 
00026 //--------------------------------------------------------------------
00027 
00028 namespace OA {
00029   namespace DUG {
00030       
00031 // Changes here must be also reflected in edgeTypeToString 
00032 // and nodeTypeToString.
00033 enum EdgeType { CFLOW_EDGE, CALL_EDGE, RETURN_EDGE, PARAM_EDGE };
00034 //enum NodeType { CFLOW_NODE, CALL_NODE, RETURN_NODE, ENTRY_NODE, EXIT_NODE };
00035 enum NodeType { FORMALPARAM_NODE, NONEFORMAL_NODE };
00036  
00037 //--------------------------------------------------------------------
00043   class NodeInterface;
00044   class EdgeInterface;
00045   class NodesIteratorInterface;
00046   class EdgesIteratorInterface;
00047   class DUGInterface;
00048  
00049   //--------------------------------------------------------
00050   class NodeInterface : public virtual DGraph::NodeInterface {
00051   public:
00052     NodeInterface () {}
00053     ~NodeInterface () { }
00054     
00055     //========================================================
00056     // Info specific to DUG
00057     //========================================================
00058     
00059     virtual NodeType getType() const = 0;
00060 
00061     virtual ProcHandle getProc() const = 0;
00062 
00063     virtual OA_ptr<Location> getLoc() const = 0;
00064    
00065     OA::SymHandle getSym();
00066   
00068     virtual unsigned int size () const = 0;
00069 
00070     /*
00072     virtual OA_ptr<CFG::NodeStatementsIteratorInterface> 
00073         getNodeStatementsIterator() const = 0;
00074 
00076     virtual OA_ptr<CFG::NodeStatementsRevIteratorInterface> 
00077         getNodeStatementsRevIterator() const = 0;
00078         */
00079 
00080     virtual OA_ptr<EdgesIteratorInterface> getDUGIncomingEdgesIterator() const = 0;
00081 
00082     virtual OA_ptr<EdgesIteratorInterface> getDUGOutgoingEdgesIterator() const = 0;
00083 
00084     virtual OA_ptr<NodesIteratorInterface> getDUGSourceNodesIterator() const = 0;
00085 
00086     virtual OA_ptr<NodesIteratorInterface> getDUGSinkNodesIterator() const = 0;
00087 
00088     virtual void markVaried(std::list<CallHandle>&,
00089                     OA_ptr<Activity::ActivityIRInterface>,
00090                     std::set<OA_ptr<EdgeInterface> >&,
00091                     std::set<std::pair<unsigned,unsigned> >&,
00092                     ProcHandle, unsigned,
00093                     OA_ptr<EdgeInterface>,
00094                     bool) = 0;
00095 
00096     virtual void markUseful(std::list<CallHandle>&,
00097                     OA_ptr<Activity::ActivityIRInterface>,
00098                     std::set<OA_ptr<EdgeInterface> >&,
00099                     std::set<std::pair<unsigned,unsigned> >&,
00100                     ProcHandle, unsigned,
00101                     OA_ptr<EdgeInterface>) = 0;
00102 
00103     virtual bool isPathFrom(OA_ptr<NodeInterface>,
00104                     std::set<OA_ptr<NodeInterface> >&) = 0;
00105 
00106     virtual void dump(std::ostream& os) = 0;  // for full override
00107     virtual void dumpbase(std::ostream& os) = 0;
00108     virtual void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir) = 0;
00109     virtual void dumpdot(std::ostream& os, OA_ptr<DUGIRInterface> ir) = 0;
00110     virtual void longdump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir) = 0;
00111     virtual void output(OA::IRHandlesIRInterface& ir) = 0;
00112 
00113     virtual void findOutgoingNodes(ProcHandle, std::set<SymHandle>&, 
00114                    std::set<SymHandle>&) = 0;
00115 //     virtual void findIncomingNodes(ProcHandle, std::set<SymHandle>&, 
00116 //                    std::set<SymHandle>&) = 0;
00117     virtual bool hasEdgesToOtherProc(ProcHandle, std::set<SymHandle>&) = 0;
00118     virtual bool hasEdgesFromOtherProc(ProcHandle, std::set<SymHandle>&) = 0;
00119 
00120 
00121   };
00122   
00123   //--------------------------------------------------------
00124   class EdgeInterface : public virtual DGraph::EdgeInterface {
00125   public:
00126     EdgeInterface () {}
00127     ~EdgeInterface () {}
00128     
00129     //========================================================
00130     // Info specific to DUG
00131     //========================================================
00132     
00133     virtual EdgeType getType() const = 0;
00134 
00135     virtual ProcHandle getSourceProc() const = 0;
00136     virtual ProcHandle getSinkProc() const = 0;
00137     virtual CallHandle getCall() const = 0;
00138     virtual ProcHandle getProc() const = 0;
00139 
00140     virtual OA_ptr<NodeInterface> getDUGSource() const = 0;
00141 
00142     virtual OA_ptr<NodeInterface> getDUGSink() const = 0;
00143     virtual void dumpdot(std::ostream& os, OA_ptr<DUGIRInterface> ir) = 0;
00144 
00145 
00146   }; 
00147   
00148  
00149   //------------------------------------------------------------------
00153   class NodesIteratorInterface :  public virtual DGraph::NodesIteratorInterface
00154   {
00155   public:
00156     NodesIteratorInterface () {}
00157     ~NodesIteratorInterface () {}
00158     virtual OA_ptr<NodeInterface> currentDUGNode() const = 0;
00159   };
00160   
00161   //------------------------------------------------------------------
00165   class EdgesIteratorInterface :  public virtual DGraph::EdgesIteratorInterface
00166   {
00167   public:
00168     EdgesIteratorInterface () {}
00169     ~EdgesIteratorInterface () {}
00170     virtual OA_ptr<EdgeInterface> currentDUGEdge() const = 0;
00171   };
00172   
00173 
00174 class DUGInterface : public virtual DGraph::DGraphInterface {
00175 
00176 //------------------------------------------------------------------
00177 public:
00178   DUGInterface () { } 
00179   virtual ~DUGInterface () { }
00180   
00181   virtual OA_ptr<NodesIteratorInterface>
00182       getDUGNodesIterator() const = 0;
00183 
00184   virtual OA_ptr<EdgesIteratorInterface>
00185       getDUGEdgesIterator() const = 0;
00186 
00187   virtual OA_ptr<NodesIteratorInterface>
00188       getDUGEntryNodesIterator() const = 0;
00189 
00190 
00191   virtual OA_ptr<NodesIteratorInterface>
00192       getDUGExitNodesIterator() const = 0;
00193 
00194   virtual OA_ptr<NodesIteratorInterface>
00195     getDUGReversePostDFSIterator(DGraph::DGraphEdgeDirection pOrient) = 0;
00196 
00197   virtual OA_ptr<NodesIteratorInterface>
00198       getDUGDFSIterator(OA_ptr<NodeInterface> n) = 0;
00199 
00200   
00201 };
00202 //--------------------------------------------------------------------
00203 
00204   } // end of DUG namespace
00205 } // end of OA namespace
00206 
00207 #endif

Generated on Sat Oct 31 05:21:21 2009 for OpenAnalysis by  doxygen 1.6.1