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