X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxalgo.h;h=7f4fda7281f9c23cd8cd7449e0a3fc7228c3ec7a;hb=5e7275dabc36e1acb396c45ba27aecf8d8a0171e;hp=e609904689462a429ac3fa8b6d74ab87b4d8f461;hpb=62e2aecdfb3087e31f4f23b37b29da1ef4e6d837;p=lyx.git diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index e609904689..7f4fda7281 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -1,4 +1,13 @@ // -*- C++ -*- +/** + * \file lyxalgo.h + * Copyright 1995-2002 the LyX Team + * Read the file COPYING + * + * A variety of useful templates. + * + * \author unknown + */ #ifndef LYX_ALGO_H #define LYX_ALGO_H @@ -44,9 +53,13 @@ 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) + OutputIter result, Func func) { for (; first != last; ++first) { if (func(*first)) { @@ -63,15 +76,24 @@ typename std::iterator_traits::difference_type count (Iterator first, Iterator last, T const & value) { #ifdef HAVE_STD_COUNT - return std::count(first, last, value); + return std::count(first, last, value); #else - std::iterator_traits::difference_type n = 0; - while (first != last) + std::iterator_traits::difference_type n = 0; + while (first != last) if (*first++ == value) ++n; return n; #endif } +/// Remove all duplicate entries in c. +template +void eliminate_duplicates(C & c) +{ + std::sort(c.begin(), c.end()); + typename C::iterator p = std::unique(c.begin(), c.end()); + c.erase(p, c.end()); +} + } // namespace lyx -#endif +#endif // LYX_ALGO_H