00001
00002
00003
00004
00005 #ifndef TVMET_XPR_IDENTITY_H
00006 #define TVMET_XPR_IDENTITY_H
00007
00008
00009 namespace tvmet {
00010
00011
00023 template<class T, std::size_t Rows, std::size_t Cols>
00024 struct XprIdentity
00025 : public TvmetBase< XprIdentity<T, Rows, Cols> >
00026 {
00027 XprIdentity& operator=(const XprIdentity&);
00028
00029 public:
00030 typedef T value_type;
00031
00032 public:
00034 enum {
00035 ops_assign = Rows * Cols,
00036 ops = ops_assign
00037 };
00038
00039 public:
00041 value_type operator()(std::size_t i, std::size_t j) const {
00042 return i==j ? 1 : 0;
00043 }
00044
00045 public:
00046 void print_xpr(std::ostream& os, std::size_t l=0) const {
00047 os << IndentLevel(l++)
00048 << "XprIdentity[O="<< ops << ")]<"
00049 << std::endl;
00050 os << IndentLevel(l)
00051 << typeid(T).name() << ","
00052 << "R=" << Rows << ", C=" << Cols << std::endl;
00053 os << IndentLevel(--l) << ">"
00054 << ((l != 0) ? "," : "") << std::endl;
00055 }
00056 };
00057
00058
00059 }
00060
00061
00062 #endif // TVMET_XPR_IDENTITY_H
00063
00064
00065
00066
00067
00068