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