// -*- C++ -*- #ifndef LYX_ALGO_H #define LYX_ALGO_H #include namespace lyx { /// Returns true if the sequence first,last is sorted, false if not. template bool sorted(For first, For last) { if (first == last) return true; For tmp = first; while (++tmp != last) { if (*tmp < *first++) return false; } return true; } /// Cmp is the same Cmp as you would pass to std::sort. template bool sorted(For first, For last, Cmp cmp) { if (first == last) return true; For tmp = first; while (++tmp != last) { if (cmp(*tmp, *first++)) return false; } return true; } struct firster { template P1 operator()(std::pair const & p) { return p.first; } }; template OutputIter copy_if(InputIter first, InputIter last, OutputIter result, Func func) { for (; first != last; ++first) { if (func(*first)) { *result++ = *first; } } return result; } } // end of namespace lyx #endif