OpenADFortTk (basic)
src/xaif2whirl/XAIF_DOMFilters.h
Go to the documentation of this file.
00001 // -*-Mode: C++;-*-
00002 // $Header: /Volumes/cvsrep/developer/OpenADFortTk/src/xaif2whirl/XAIF_DOMFilters.h,v 1.18 2006/05/12 16:12:23 utke Exp $
00003 
00004 
00005 #ifndef XAIF_DOMFilters_INCLUDED_h
00006 #define XAIF_DOMFilters_INCLUDED_h
00007 
00008 #include <iostream>
00009 
00010 #include "xercesc/dom/DOMNodeFilter.hpp"
00011 
00012 namespace xaif2whirl { 
00013 
00014   // Dumps only this node
00015   void 
00016   XercesPrintNode(std::ostream& os, const xercesc::DOMNode* n);
00017 
00018   // Dumps the tree rooted at 'n'
00019   void
00020   XercesPrintTree(std::ostream& os, const xercesc::DOMNode* n);
00021 
00022   std::ostream& 
00023   operator<<(std::ostream& os, const xercesc::DOMElement& elem);
00024 
00025   // Shortcut for XercesPrintNode
00026   void 
00027   XercesDumpNode(const xercesc::DOMNode* n);
00028 
00029   // Shortcut for XercesPrintTree
00030   void 
00031   XercesDumpTree(const xercesc::DOMNode* n);
00032 
00033   void 
00034   XercesDumpNode(void* n); // For *^#% debuggers
00035 
00036   void 
00037   XercesDumpTree(void* n); // For *^#% debuggers
00038 
00039   xercesc::DOMElement*
00040   GetFirstChildElement(const xercesc::DOMNode* n);
00041 
00042   xercesc::DOMElement*
00043   GetLastChildElement(const xercesc::DOMNode* n);
00044 
00045   xercesc::DOMElement*
00046   GetChildElement(const xercesc::DOMNode* n, const XMLCh* name);
00047 
00048   xercesc::DOMElement*
00049   GetChildElement(const xercesc::DOMNode* n, const xercesc::DOMNodeFilter* filter);
00050 
00051   unsigned int
00052   GetChildElementCount(const xercesc::DOMNode* n);
00053 
00054   xercesc::DOMElement*
00055   GetPrevSiblingElement(const xercesc::DOMNode* n);
00056 
00057   xercesc::DOMElement*
00058   GetNextSiblingElement(const xercesc::DOMNode* n);
00059 
00060   xercesc::DOMElement*
00061   GetNextSiblingElement(const xercesc::DOMNode* n, const XMLCh* name);
00062 
00063   xercesc::DOMElement*
00064   GetNextSiblingElement(const xercesc::DOMNode* n, const xercesc::DOMNodeFilter* filter);
00065 
00066   class XAIF_ElemFilter : public xercesc::DOMNodeFilter {
00067   public:
00068     XAIF_ElemFilter(const XMLCh* name) : mName(name) { }
00069     ~XAIF_ElemFilter() { }
00070     short acceptNode(const xercesc::DOMNode *node) const;
00071   private:
00072     const XMLCh* mName;
00073   };
00074 
00075   class XAIF_ScopeElemFilter : public xercesc::DOMNodeFilter {
00076   public:
00077     XAIF_ScopeElemFilter() { }
00078     ~XAIF_ScopeElemFilter() { }
00079     short acceptNode(const xercesc::DOMNode *node) const;
00080   };
00081 
00082   class XAIF_SymbolElemFilter : public xercesc::DOMNodeFilter {
00083   public:
00084     XAIF_SymbolElemFilter() { }
00085     ~XAIF_SymbolElemFilter() { }
00086     short acceptNode(const xercesc::DOMNode *node) const;
00087   };
00088 
00089   class XAIF_DimensionBoundsElemFilter : public xercesc::DOMNodeFilter {
00090   public:
00091     XAIF_DimensionBoundsElemFilter() { }
00092     ~XAIF_DimensionBoundsElemFilter() { }
00093     short acceptNode(const xercesc::DOMNode *node) const;
00094   };
00095 
00096   class XAIF_CFGElemFilter : public xercesc::DOMNodeFilter {
00097   public:
00098     XAIF_CFGElemFilter(bool cfgOrReplaceList_ = true) 
00099       : cfgOrReplaceList(cfgOrReplaceList_) { }
00100     ~XAIF_CFGElemFilter() { }
00101 
00102     short acceptNode(const xercesc::DOMNode *node) const;
00103   
00104     static bool IsCFG(const xercesc::DOMNode *node);
00105     static bool IsReplaceList(const xercesc::DOMNode *node);
00106     static bool IsReplacement(const xercesc::DOMNode *node);
00107   private:
00108     bool cfgOrReplaceList;
00109   };
00110 
00111 
00112   class XAIF_BBElemFilter : public xercesc::DOMNodeFilter {
00113   public:
00114     // if 'onlyBasicBlock' is true, only xaif:BasicBlocks are in the iteration
00115     XAIF_BBElemFilter(bool edges = true)
00116       : includeEdges(edges) { }
00117     ~XAIF_BBElemFilter() { }
00118 
00119     short acceptNode(const xercesc::DOMNode *node) const;
00120   
00121     static bool IsAnyBB(const xercesc::DOMNode *node);
00122     static bool IsBBEntry(const xercesc::DOMNode *node);
00123     static bool IsBBExit(const xercesc::DOMNode *node);
00124     static bool IsBB(const xercesc::DOMNode *node);
00125     static bool IsBBBranch(const xercesc::DOMNode *node);
00126     static bool IsBBEndBr(const xercesc::DOMNode *node);
00127     static bool IsBBForLoop(const xercesc::DOMNode *node);
00128     static bool IsBBPreLoop(const xercesc::DOMNode *node);
00129     static bool IsBBPostLoop(const xercesc::DOMNode *node);
00130     static bool IsBBEndLoop(const xercesc::DOMNode *node);
00131     static bool IsEdge(const xercesc::DOMNode *node);
00132   private:
00133     bool includeEdges;
00134   };
00135 
00136 
00137   // Accepts: basic block statements and DerivativeAccumulator
00138   class XAIF_BBStmtElemFilter : public xercesc::DOMNodeFilter {
00139   public:
00140     XAIF_BBStmtElemFilter() { }
00141     ~XAIF_BBStmtElemFilter() { }
00142 
00143     short acceptNode(const xercesc::DOMNode *node) const;
00144 
00145     static bool IsAnyStmt(const xercesc::DOMNode *node);
00146     static bool IsAssign(const xercesc::DOMNode *node);
00147     static bool IsSubCall(const xercesc::DOMNode *node);
00148     static bool IsInlinableSubCall(const xercesc::DOMNode *node);
00149     static bool IsMarker(const xercesc::DOMNode *node);
00150     static bool IsDerivProp(const xercesc::DOMNode *node);
00151   };
00152 
00153 
00154   class XAIF_DerivPropStmt : public xercesc::DOMNodeFilter {
00155   public:
00156     XAIF_DerivPropStmt() { }
00157     ~XAIF_DerivPropStmt() { }
00158   
00159     short acceptNode(const xercesc::DOMNode *node) const;
00160 
00161     static bool IsSetDeriv(const xercesc::DOMNode *node);
00162     static bool IsSetNegDeriv(const xercesc::DOMNode *node);
00163     static bool IsIncDeriv(const xercesc::DOMNode *node);
00164     static bool IsDecDeriv(const xercesc::DOMNode *node);
00165     static bool IsSax(const xercesc::DOMNode *node);
00166     static bool IsSaxpy(const xercesc::DOMNode *node);
00167     static bool IsZeroDeriv(const xercesc::DOMNode *node);  
00168   };
00169 
00170 }
00171 
00172 #endif 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines