module des.math.graph.base; struct WTable(T) { private: T[] data; size_t _width; public: this( size_t sz, T init_value=T.init ) { _width = sz; data.length = sz * sz; data[] = init_value; } size_t size() pure const @property { return _width; } T opIndex( size_t from, size_t to ) const pure { return data[ from*size + to ]; } ref T opIndex( size_t from, size_t to ) pure { return data[ from*size + to ]; } int opApply( int delegate(size_t, size_t, T) dlg ) const { foreach( i, w; data ) if( auto r = dlg( i/size, i%size, w ) ) return r; return 0; } int opApply( int delegate(size_t, size_t, ref T) dlg ) { foreach( i, ref w; data ) if( auto r = dlg( i/size, i%size, w ) ) return r; return 0; } } struct Path(T) { T cost; size_t[] nodes; }