00001 #ifndef EDGEARRAY_H 00002 #define EDGEARRAY_H 00003 00004 #include <Structs/Graphs/dynamicGraph.h> 00005 #include <Structs/Maps/pmMap.h> 00006 00007 template< typename dataType, typename GraphType> 00008 class EdgeArray 00009 { 00010 public: 00011 00012 typedef GraphType Graph; 00013 typedef typename Graph::NodeIterator node; 00014 typedef typename Graph::EdgeIterator edge; 00015 typedef typename Graph::SizeType sizeType; 00016 00017 EdgeArray():m_G(0) 00018 { 00019 } 00020 00021 EdgeArray( const Graph* G, dataType data = dataType()):m_G(G) 00022 { 00023 init(G, data); 00024 } 00025 00026 ~EdgeArray() 00027 { 00028 } 00029 00030 void init( const Graph* G, dataType data = dataType()) 00031 { 00032 m_map.clear(); 00033 m_G = G; 00034 00035 node u, lastNode; 00036 edge e, lastEdge; 00037 for( u = G->beginNodes(), lastNode = G->endNodes(); u != lastNode; ++u) 00038 { 00039 for( e = G->beginNodes(), lastEdge = G->endNodes(); e != lastEdge; ++e) 00040 { 00041 m_map[e->getDescriptor()] = data; 00042 } 00043 } 00044 } 00045 00046 dataType& operator[] ( const edge& e ) 00047 { 00048 return m_map[ e->getDescriptor()]; 00049 } 00050 00051 const dataType& operator[] ( const edge& e ) const 00052 { 00053 return m_map[ e->getDescriptor()]; 00054 } 00055 00056 private: 00057 const GraphType* m_G; 00058 PMMap< typename GraphType::EdgeDescriptor, dataType> m_map; 00059 }; 00060 00061 00062 00063 #endif //EDGEARRAY_H