00001 /* 00002 * $Revision: 2299 $ 00003 * 00004 * last checkin: 00005 * $Author: gutwenger $ 00006 * $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 00007 ***************************************************************/ 00008 00043 #ifdef _MSC_VER 00044 #pragma once 00045 #endif 00046 00047 #ifndef OGDF_BOYER_MYRVOLD_INIT_H 00048 #define OGDF_BOYER_MYRVOLD_INIT_H 00049 00050 00051 #include <ogdf/internal/planarity/BoyerMyrvoldPlanar.h> 00052 #include <ogdf/basic/List.h> 00053 00054 00055 namespace ogdf { 00056 00058 00062 class BoyerMyrvoldInit { 00063 public: 00065 BoyerMyrvoldInit(BoyerMyrvoldPlanar* pBM); 00066 00068 ~BoyerMyrvoldInit() { }; 00069 00071 void computeDFS(); 00072 00074 void computeLowPoints(); 00075 00077 void computeDFSChildLists(); 00078 00079 // avoid automatic creation of assignment operator 00081 BoyerMyrvoldInit &operator=(const BoyerMyrvoldInit &); 00082 00083 private: 00085 Graph& m_g; 00086 00088 const int& m_embeddingGrade; 00089 const bool& m_randomDFSTree; 00090 00092 00094 NodeArray<node>& m_realVertex; 00095 00097 NodeArray<int>& m_dfi; 00098 00100 Array<node>& m_nodeFromDFI; 00101 00103 00105 NodeArray<adjEntry> (&m_link)[2]; 00106 00108 NodeArray<adjEntry>& m_adjParent; 00109 00111 00113 NodeArray<int>& m_leastAncestor; 00114 00116 00123 EdgeArray<int>& m_edgeType; 00124 00126 NodeArray<int>& m_lowPoint; 00127 00129 NodeArray<int>& m_highestSubtreeDFI; 00130 00132 00134 NodeArray<ListPure<node> >& m_separatedDFSChildList; 00135 00137 00139 NodeArray<ListIterator<node> >& m_pNodeInParent; 00140 00142 void createVirtualVertex(const adjEntry father); 00143 }; 00144 00146 00148 class BucketLowPoint : public BucketFunc<node> { 00149 public: 00150 BucketLowPoint(const NodeArray<int>& lowPoint) :m_pLow(&lowPoint) { }; 00151 00153 int getBucket(const node& v) { 00154 return (*m_pLow)[v]; 00155 } 00156 private: 00158 const NodeArray<int>* m_pLow; 00159 }; 00160 00161 } 00162 00163 00164 #endif