Stephen Kelly 0b5cf0dabd cmAlgorithms: Implement algorithm for removing indexes.
Implement ContainerAlgorithms::RemoveN to remove N elements to the
end of a container by rotating.  The rotate is implemented in terms
of the efficient swap algorithm, optimized even more in the standard
library implementation when the compiler supports the rvalue-references
feature to move elements.  Implement cmRemoveN with a Range API
for completeness.

std::rotate in C++11 is specified to return an iterator, but
c++98 specifies it to return void.  libstdc++ 5.0 will be the first
version to have the correct return type.  Implement
ContainerAlgorithms::Rotate in terms of std::rotate and return the
correct iterator from it.  While std::rotate requires forward iterators,
 this workaround means cmRotate requires bidirectional iterators.  As
most of CMake uses random access iterators anyway, this should not
be a problem.

Implement cmRemoveIndices in terms of the RemoveN algorithm, such
that each element which is not removed is rotated only once.  This
can not use the cmRemoveN range-API algorithm because that would
require creating a new range, but the range must be taken by reference
and so it can't be a temporary.

These remove algorithms are not part of the STL and I couldn't find them
anywhere else either.
2015-02-15 19:04:31 +01:00
..
2015-02-05 20:44:25 +01:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2015-02-13 00:01:16 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:35 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2012-09-28 17:00:52 -04:00
2014-10-15 23:16:44 +02:00
2014-10-15 23:16:44 +02:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-11 15:03:50 +01:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:35 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-04-28 21:43:40 -04:00
2014-03-08 13:05:39 -05:00
2014-06-05 12:44:18 -04:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2014-03-08 13:05:39 -05:00
2015-02-05 20:44:25 +01:00
2015-02-05 20:44:25 +01:00