00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef TVMET_EXTREMUM_H
00025 #define TVMET_EXTREMUM_H
00026
00027 namespace tvmet {
00028
00029
00035 struct matrix_tag { };
00036
00037
00043 struct vector_tag { };
00044
00045
00050 template<class T1, class T2, class Tag>
00051 class Extremum { };
00052
00053
00058 template<class T1, class T2>
00059 class Extremum<T1, T2, vector_tag>
00060 {
00061 public:
00062 typedef T1 value_type;
00063 typedef T2 index_type;
00064
00065 public:
00066 Extremum(value_type value, index_type index)
00067 : m_value(value), m_index(index) { }
00068 value_type value() const { return m_value; }
00069 index_type index() const { return m_index; }
00070
00071 private:
00072 value_type m_value;
00073 index_type m_index;
00074 };
00075
00076
00081 template<class T1, class T2>
00082 class Extremum<T1, T2, matrix_tag>
00083 {
00084 public:
00085 typedef T1 value_type;
00086 typedef T2 index_type;
00087
00088 public:
00089 Extremum(value_type value, index_type row, index_type col)
00090 : m_value(value), m_row(row), m_col(col) { }
00091 value_type value() const { return m_value; }
00092 index_type row() const { return m_row; }
00093 index_type col() const { return m_col; }
00094
00095 private:
00096 value_type m_value;
00097 index_type m_row, m_col;
00098 };
00099
00100
00101 }
00102
00103 #endif // TVMET_EXTREMUM_H
00104
00105
00106
00107
00108