| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Implement it in terms of std::remove_if with a binary search through
a matching range.
|
| |
|
|
|
|
|
| |
Avoid repeatedly looping over the indices to process elements (even
without breaking out of the loop when the element is found).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
| |
Use a ostringstream to account for the input being a variable of type
size_t as a result of using std::distance. There is no single
format string which portably accepts a size_t.
|
|\
| |
| |
| |
| |
| |
| | |
78757e7f cmFunctionCommand: Replace loops with cmJoin.
fc1cf265 cmFunctionCommand: Remove counting variable.
e5ebeae7 cmFunctionCommand: Split loop in two.
|
| | |
|
| |
| |
| |
| | |
Start iteration at correct starting point directly.
|
| | |
|
|\ \
| | |
| | |
| | |
| | | |
bf8f9c29 Xcode: Teach XCODE_ATTRIBUTE target properties about generator expressions
|
| |/
| |
| |
| | |
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
|
|/ |
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
b5f98e50 cmMacroCommand: Manipulate target string directly.
83414d5a cmMacroCommand: Move computation of ARGV%n names out of double loop.
9a1f8f35 cmMacroCommand: Move ARGV replacement out of condition.
4aa7bd2a cmMacroCommand: Remove condition around ARGN replacement.
6774c92b cmMacroCommand: Declare tmps in the scope that it's used.
2c4a7298 cmMacroCommand: Declare arg in the scope that it is used.
a551851a cmMacroCommand: Inline variable computation.
f79c0f76 cmMacroCommand: Compute variables outside of two loops.
8e0827b6 cmMacroCommand: Remove intermediate arg variables.
f2c49f59 cmMacroCommand: Remove condition around ARGN computation.
3250a7e5 cmMacroCommand: Remove conditional append of semicolon.
081a13f7 cmMacroCommand: Declare arg variables where used and initialized.
17b5ebd3 cmMacroCommand: Join the args strings outside of the loops.
|
| |
| |
| |
| |
| | |
Avoid copying a string from the source, manipulating it, and then
copying it back. Manipulate it in place instead.
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
There is none for ARGC replacement, so no reason to conditionalize the
replacement. The computation is already done.
|
| |
| |
| |
| |
| | |
We don't particularly need to reuse the string memory here, and this
pattern is not common in CMake.
|
| |
| |
| |
| |
| |
| | |
It can make sense to declare objects outside of loops if
the size required by the object can grow (eg std::string when
using getline), but that is not the case here.
|
| | |
|
| |
| |
| |
| |
| | |
Avoid computing them from scratch for each argument of each
function.
|
| | |
|
| |
| |
| |
| |
| | |
An empty string is appended if the condition is false, which is
ok for this commit.
|
| |
| |
| |
| | |
The conditions are never true.
|
| |
| |
| |
| |
| | |
Make the initialization by population with the expanded* content
unconditional.
|
| |
| |
| |
| |
| | |
This means that we compute the strings even if not used in the macro
but this shouldn't be expensive and it simplifies the code.
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
7c3f6376 Convert loop into two algorithms.
8a399c8c Convert loop to the common pattern.
abfca975 Move loop inside of condition.
0b61b86d Handle last element outside of the loop.
e21f7829 cmTarget: Use a sorted vector in place of a set.
559dc155 cmSet: Replace loop with cmJoin.
0ea71932 cmFindBase: Replace loop with cmJoin on range.
9380e85f Convert loops to cmJoin algorithm with cmRange.
bb10012f cmStringCommand: Accumulate with cmJoin and range adaptors.
0c12f1ea cmAlgorithms: Add a range adaptor and API for adjusting a range.
27c6f017 Use cmJoin to accumulate string ranges.
4e78ebbd cmAlgorithms: Add a Range container and adaptor method.
89102249 Replace common loop pattern with cmJoin
7b8725bf Convert loops populating maybe-empty content into the common pattern.
7ee56f03 Convert loops into the commonly used pattern.
0a4e5674 cmMacroCommand: Remove counting variable.
...
|
| | |
|
| | |
|
| |
| |
| |
| | |
The loop is only executed if the condition is true.
|
| |
| |
| |
| |
| | |
There is no point in checking on each loop iteration whether
it is the last element.
|
| |
| |
| |
| |
| |
| |
| | |
The vector has a more easy-to-use API.
Join the string with cmJoin, and avoid erasing from the container
in the loop.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Avoid using the std::accumulate algorithm which is designed for
numeric types, not complex types. It introduces unneccessary
copies.
Initialize variables where they are populated.
|
| |
| |
| |
| |
| |
| |
| |
| | |
This can make a pair of iterators API compatible with the
cmJoin algorithm and other range-based algorithms.
Accept different iterator types in the cmRange adaptor so that
a const and non-const iterator are accepted.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
Start iteration at correct starting point directly.
|
| | |
|
| | |
|
| | |
|
| | |
|