Revision: 39091 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39091 Author: shuvro Date: 2011-08-06 04:41:19 +0000 (Sat, 06 Aug 2011) Log Message: ----------- SparseMatrix class enhancement
Modified Paths: -------------- branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h Modified: branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h =================================================================== --- branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h 2011-08-06 04:19:30 UTC (rev 39090) +++ branches/soc-2011-avocado/blender/intern/autoseam/SparseMatrix.h 2011-08-06 04:41:19 UTC (rev 39091) @@ -35,20 +35,25 @@ #include <vector> #include <iostream> +#define INF 99999999 + + + /** * This class is based on compressed row storage(CRS) format. * More info can be found at http://web.eecs.utk.edu/~dongarra/etemplates/node373.html */ - template <class T> class SparseMatrix { public: + typedef std::map<size_t, std::map<size_t , T> > mat_t; typedef typename mat_t::iterator row_iter; typedef std::map<size_t, T> col_t; typedef typename col_t::iterator col_iter; - + + SparseMatrix(){}; SparseMatrix(size_t i){ m=i; n=i; } SparseMatrix(size_t i, size_t j){ m=i; n=j; } @@ -59,13 +64,41 @@ if(i>=m || j>=n) throw; return mat[i][j]; } + + /** + * This function does not create an element for + * an not existing key. In this case, it returns -INF + */ inline T operator()(size_t i, size_t j) const { if(i>=m || j>=n) throw; return mat[i][j]; + + /*row_iter ii; + col_iter jj; + + + if(mat.count(i)){ + ii = mat.find(i); + + if((*ii).count(j)){ + jj = (*ii).find(j); + printf("requested value is : %lf",(*jj).second); + return (*jj).second; + } + + } + printf("requested value is Infinity: %d",-INF); + return -INF;*/ } - + + inline + SparseMatrix* operator=(const SparseMatrix* matrix) { + mat = matrix; + return mat; + } + /** * Multiplies vector x with matrix m and returns * the result as a vector. @@ -131,9 +164,49 @@ } std::cout << std::endl; } - + + T row_sum(int row_index) + { + if( row_index >= m ) throw; + + row_iter ii; + col_iter jj; + T sum = 0; + + if(mat.count(row_index)){ + ii = mat.find(row_index); + for( jj=(*ii).second.begin(); jj!=(*ii).second.end(); jj++) + sum += (*jj).second; + } + + return sum; + + } + + + int rows() + { + return m; + } + + int cols() + { + return n; + } + + int resize(size_t i, size_t j) + { + m=i; + n=j; + return 0; + } + + + + + mat_t mat; private: - mat_t mat; + size_t m; size_t n; }; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs