00001 00003 #ifndef __gdtnode_matrix__ 00004 #define __gdtnode_matrix__ 00005 00006 #include <GDT/rm3_undi_graph.h> 00007 #include <GDT/gdt_graph_array.h> 00008 00009 namespace gdt { 00010 00011 template<class E> 00012 00013 class gdtnode_matrix { 00014 00015 gdtnode_array< gdtnode_array<E> > M; 00016 00017 public: 00018 00019 gdtnode_matrix() {} 00020 00021 gdtnode_matrix(const undi_graph& G) { init(G); } 00022 00023 gdtnode_matrix(const undi_graph& G, E x) { init(G,x); } 00024 00025 gdtnode_matrix(const gdtnode_matrix<E>& mat) : M(mat.M) {} 00026 00027 gdtnode_matrix<E>& operator=(const gdtnode_matrix<E>& mat) 00028 { M = mat.M; return *this; } 00029 00030 ~gdtnode_matrix() {} 00031 00032 void init(const undi_graph& G) 00033 { 00034 M.init(G); 00035 gdtnode v; 00036 forall_nodes(v,G) M[v].init(G); 00037 } 00038 00039 void init(const undi_graph& G, E x) 00040 { 00041 M.init(G); 00042 gdtnode v; 00043 forall_nodes(v,G) M[v].init(G,x); 00044 } 00045 00046 const gdtnode_array<E>& operator[](gdtnode v) const { return M[v]; } 00047 gdtnode_array<E>& operator[](gdtnode v) { return M[v]; } 00048 00049 const E& operator()(gdtnode v, gdtnode w) const { return M[v][w]; } 00050 E& operator()(gdtnode v, gdtnode w) { return M[v][w]; } 00051 00052 }; 00053 00054 } 00055 00056 #endif