X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxalgo.h;h=d1aa023e1e918dd9ecfe2ad4799245f9070598fe;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=323f8e32f16a8b1269f00a817a53a72e52704b7a;hpb=a654de29ea80901be5321f603008f0e6a82a0ec9;p=lyx.git diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index 323f8e32f1..d1aa023e1e 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -1,4 +1,15 @@ // -*- 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 @@ -7,6 +18,7 @@ #include #include + namespace lyx { @@ -44,6 +56,10 @@ struct firster { }; +/** + * 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) @@ -57,21 +73,22 @@ OutputIter copy_if(InputIter first, InputIter last, } -/// A slot in replacement for std::count for systems where it is broken. -template -typename std::iterator_traits::difference_type -count (Iterator first, Iterator last, T const & value) +/// Remove all duplicate entries in c. +template +void eliminate_duplicates(C & c) { -#ifdef HAVE_STD_COUNT - return std::count(first, last, value); -#else - std::iterator_traits::difference_type n = 0; - while (first != last) - if (*first++ == value) ++n; - return n; -#endif + // 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 +#endif // LYX_ALGO_H