00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 #ifndef SCPPNT_MATALG_H
00013 #define SCPPNT_MATALG_H
00014 #ifdef SCPPNT_NO_DIR_PREFIX
00015 #include "scppnt.h"
00016 #else
00017 #include "scppnt/scppnt.h"
00018 #endif
00019 
00020 namespace SCPPNT
00021 {
00022 
00023   
00024   template<class M, class FUNC> void apply_rows(M &matrix, FUNC &f)
00025   {
00026     typename M::rows_iterator irows = matrix.begin_rows();
00027 
00028     Subscript ncolumns = matrix.num_columns();
00029 
00030     for (Subscript i = matrix.num_rows(); i--; ++irows)
00031     {
00032       f(ncolumns, *irows);
00033     }
00034   }
00035 
00036   
00037   template<class M, class FUNC> void apply_columns(M &matrix, FUNC &f)
00038   {
00039     typename M::columns_iterator icolumns = matrix.begin_columns();
00040 
00041     Subscript nrows = matrix.num_rows();
00042 
00043     for (Subscript i = matrix.num_columns(); i--; ++icolumns)
00044     {
00045       f(nrows, *icolumns);
00046     }
00047   }
00048 
00049   
00050 
00051 
00052 
00053 
00054 
00055   template<class M, class V, class FUNC> V over_columns(M &matrix, FUNC &f)
00056   {
00057     typename M::rows_iterator irows = matrix.begin_rows();
00058     V vec(matrix.num_rows());
00059 
00060     Subscript ncolumns = matrix.num_columns();
00061 
00062     typename V::iterator iv = vec.begin();
00063     for (Subscript i = matrix.num_rows(); i--; ++irows, ++iv)
00064     {
00065       *iv = f(ncolumns, *irows);
00066     }
00067 
00068     return vec;
00069   }
00070 
00071   
00072 
00073 
00074 
00075 
00076 
00077   template<class M, class V, class FUNC> V over_rows(M &matrix, FUNC &f)
00078   {
00079     typename M::columns_iterator icolumns = matrix.begin_columns();
00080     V vec(matrix.num_columns());
00081 
00082     Subscript nrows = matrix.num_rows();
00083 
00084     typename V::iterator iv = vec.begin();
00085     for (Subscript i = matrix.num_columns(); i--; ++icolumns, ++iv)
00086     {
00087       *iv = f(nrows, *icolumns);
00088     }
00089 
00090     return vec;
00091   }
00092 
00093 } 
00094 
00095 #endif // SCPPNT_MATALG_H