X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxalgo.h;h=d1aa023e1e918dd9ecfe2ad4799245f9070598fe;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=8e243bd506c0c57cf6db838dac64b7759abd4bfe;hpb=28ed6c5e800be8a1593eb808f3027d17c6cfcd33;p=lyx.git diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index 8e243bd506..d1aa023e1e 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -1,16 +1,26 @@ // -*- C++ -*- +/** + * \file lyxalgo.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. + * + * A variety of useful templates. + */ #ifndef LYX_ALGO_H #define LYX_ALGO_H +#include +#include #include -// using std::less; -// Both these functions should ideally be placed into namespace lyx. -// Also the using std::less should not be used. +namespace lyx { -//namespace lyx { /// Returns true if the sequence first,last is sorted, false if not. template @@ -19,11 +29,12 @@ bool sorted(For first, For last) if (first == last) return true; For tmp = first; while (++tmp != last) { - if (less(*tmp, *first++)) return false; + 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) @@ -36,5 +47,48 @@ bool sorted(For first, For last, Cmp cmp) return true; } -// } // end of namespace lyx -#endif + +struct firster { + template + P1 operator()(std::pair const & p) { + return p.first; + } +}; + + +/** + * copy elements in the given range to the output iterator + * if the predicate evaluates as true + */ +template +OutputIter copy_if(InputIter first, InputIter last, + OutputIter result, Func func) +{ + for (; first != last; ++first) { + if (func(*first)) { + *result++ = *first; + } + } + return result; +} + + +/// Remove all duplicate entries in c. +template +void eliminate_duplicates(C & c) +{ + // It is a requirement that the container is sorted for + // std::unique to work properly. + std::sort(c.begin(), c.end()); + c.erase(std::unique(c.begin(), c.end()), c.end()); +} + + +using std::next; + + +using std::prev; + +} // namespace lyx + +#endif // LYX_ALGO_H