X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxalgo.h;h=d1aa023e1e918dd9ecfe2ad4799245f9070598fe;hb=279e656d6a7c4ee3647752cba8b9aa7d6ec6e0c2;hp=2d8d49f06c943b3bf615987e90238e8a987803e2;hpb=998cee223a0784c8ba6f01a89f758fc474a3b5fd;p=lyx.git diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index 2d8d49f06c..d1aa023e1e 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -1,9 +1,23 @@ // -*- 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 + namespace lyx { @@ -42,9 +56,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)) { @@ -54,5 +72,23 @@ OutputIter copy_if(InputIter first, InputIter last, return result; } -} // end of namespace lyx -#endif + +/// 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