00001 #ifndef SYNAPS_LINALG_TEXP_H
00002 #define SYNAPS_LINALG_TEXP_H
00003 #include <synaps/init.h>
00004 #include <synaps/arithm/texp.h>
00005 #include <synaps/base/Range.h>
00006 #include <synaps/linalg/VectDse.h>
00007
00008 __BEGIN_NAMESPACE_SYNAPS
00009
00010
00011 namespace linalg
00012 {
00013 define_binary_operator(_submatrix_,submatrix,submatrix);
00014 define_binary_operator(_row_,row,row);
00015 define_binary_operator(_col_,col,col);
00016 };
00017
00018 namespace arithm {
00019
00020 template<> struct template_expression_operand< Range2d > { typedef Range2d T; };
00021
00022
00023 template<class Matrix> struct binary_operator_prototype< linalg::_row_, Matrix, Range >
00024 {
00025 typedef Matrix F;
00026 typedef Matrix U;
00027 typedef Range V;
00028 };
00029
00030 template<class Matrix> struct binary_operator_prototype< linalg::_col_, Matrix, Range >
00031 {
00032 typedef Matrix F;
00033 typedef Matrix U;
00034 typedef Range V;
00035 };
00036
00037 template<class Matrix> struct binary_operator_prototype< linalg::_row_, Matrix, int >
00038 {
00039 typedef typename Matrix::row_type F;
00040 typedef Matrix U;
00041 typedef int V;
00042 };
00043
00044 template<class Matrix> struct binary_operator_prototype< linalg::_col_, Matrix, int >
00045 {
00046 typedef typename Matrix::col_type F;
00047 typedef Matrix U;
00048 typedef int V;
00049 };
00050 };
00051 __END_NAMESPACE_SYNAPS
00052 #endif