CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/JetMETCorrections/InterpolationTables/interface/isMonotonous.h

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