X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxalgo.h;h=9e44838a795233bf70df36686f3d9eacea068d1a;hb=68a1f9a44ea36691ada208d4c7d3d49ffab32f3b;hp=dcbfd6d5d3bc4e195e7064e6bbf51097cc049748;hpb=e0dc1a3ffb0b8a3b98efa169ab5b7cd2bc6a9d30;p=lyx.git diff --git a/src/support/lyxalgo.h b/src/support/lyxalgo.h index dcbfd6d5d3..9e44838a79 100644 --- a/src/support/lyxalgo.h +++ b/src/support/lyxalgo.h @@ -1,16 +1,16 @@ // -*- C++ -*- /** * \file lyxalgo.h - * Copyright 1995-2002 the LyX Team - * Read the file COPYING + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * A variety of useful templates. + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. * - * \author unknown + * A variety of useful templates. */ - - #ifndef LYX_ALGO_H #define LYX_ALGO_H @@ -18,6 +18,7 @@ #include #include + namespace lyx { @@ -56,7 +57,7 @@ struct firster { /** - * copy elements in the given range to the output iterator + * copy elements in the given range to the output iterator * if the predicate evaluates as true */ template @@ -72,20 +73,41 @@ 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); + // 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()); +} + + +#ifdef LYX_USE_CXX11 +using std::next; #else - std::iterator_traits::difference_type n = 0; - while (first != last) - if (*first++ == value) ++n; - return n; +/// Replacement of std::next for older compilers +template +inline It next(It i, Diff n = 1) +{ + std::advance(i, n); + return i; +} #endif + + +#ifdef LYX_USE_CXX11 +using std::prev; +#else +/// Replacement of std::prev for older compilers +template +inline It prev(It i, Diff n = 1) +{ + std::advance(i, -n); + return i; } +#endif } // namespace lyx