Go to the documentation of this file.00001 #ifndef NPSTAT_ISMONOTONOUS_HH_
00002 #define NPSTAT_ISMONOTONOUS_HH_
00003
00015 namespace npstat {
00017 template<class Iter>
00018 inline bool isStrictlyIncreasing(Iter begin, Iter const end)
00019 {
00020 if (begin == end)
00021 return false;
00022 Iter first(begin);
00023 bool status = ++begin != end;
00024 for (; begin != end && status; ++begin, ++first)
00025 if (!(*first < *begin))
00026 status = false;
00027 return status;
00028 }
00029
00031 template<class Iter>
00032 inline bool isStrictlyDecreasing(Iter begin, Iter const end)
00033 {
00034 if (begin == end)
00035 return false;
00036 Iter first(begin);
00037 bool status = ++begin != end;
00038 for (; begin != end && status; ++begin, ++first)
00039 if (!(*begin < *first))
00040 status = false;
00041 return status;
00042 }
00043
00045 template<class Iter>
00046 inline bool isStrictlyMonotonous(Iter const begin, Iter const end)
00047 {
00048 return isStrictlyIncreasing(begin, end) ||
00049 isStrictlyDecreasing(begin, end);
00050 }
00051
00053 template<class Iter>
00054 inline bool isNonDecreasing(Iter begin, Iter const end)
00055 {
00056 if (begin == end)
00057 return false;
00058 Iter first(begin);
00059 bool status = ++begin != end;
00060 for (; begin != end && status; ++begin, ++first)
00061 if (*begin < *first)
00062 status = false;
00063 return status;
00064 }
00065
00067 template<class Iter>
00068 inline bool isNonIncreasing(Iter begin, Iter const end)
00069 {
00070 if (begin == end)
00071 return false;
00072 Iter first(begin);
00073 bool status = ++begin != end;
00074 for (; begin != end && status; ++begin, ++first)
00075 if (*begin > *first)
00076 status = false;
00077 return status;
00078 }
00079
00084 template<class Iter>
00085 inline bool isMonotonous(Iter const begin, Iter const end)
00086 {
00087 return isNonDecreasing(begin, end) || isNonIncreasing(begin, end);
00088 }
00089 }
00090
00091 #endif // NPSTAT_ISMONOTONOUS_HH_
00092