boost-use-ranges¶
Detects calls to standard library iterator algorithms that could be replaced with a Boost ranges version instead.
Example¶
auto Iter1 = std::find(Items.begin(), Items.end(), 0);
auto AreSame = std::equal(Items1.cbegin(), Items1.cend(), std::begin(Items2),
std::end(Items2));
Transforms to:
auto Iter1 = boost::range::find(Items, 0);
auto AreSame = boost::range::equal(Items1, Items2);
Supported algorithms¶
Calls to the following std library algorithms are checked:
std::accumulate
,
std::adjacent_difference
,
std::adjacent_find
,
std::all_of
,
std::any_of
,
std::binary_search
,
std::copy_backward
,
std::copy_if
,
std::copy
,
std::count_if
,
std::count
,
std::equal_range
,
std::equal
,
std::fill
,
std::find_end
,
std::find_first_of
,
std::find_if_not
,
std::find_if
,
std::find
,
std::for_each
,
std::generate
,
std::includes
,
std::iota
,
std::is_partitioned
,
std::is_permutation
,
std::is_sorted_until
,
std::is_sorted
,
std::lexicographical_compare
,
std::lower_bound
,
std::make_heap
,
std::max_element
,
std::merge
,
std::min_element
,
std::mismatch
,
std::next_permutation
,
std::none_of
,
std::parital_sum
,
std::partial_sort_copy
,
std::partition_copy
,
std::partition_point
,
std::partition
,
std::pop_heap
,
std::prev_permutation
,
std::push_heap
,
std::random_shuffle
,
std::reduce
,
std::remove_copy_if
,
std::remove_copy
,
std::remove_if
,
std::remove
,
std::replace_copy_if
,
std::replace_copy
,
std::replace_if
,
std::replace
,
std::reverse_copy
,
std::reverse
,
std::search
,
std::set_difference
,
std::set_intersection
,
std::set_symmetric_difference
,
std::set_union
,
std::sort_heap
,
std::sort
,
std::stable_partition
,
std::stable_sort
,
std::transform
,
std::unique_copy
,
std::unique
,
std::upper_bound
.
The check will also look for the following functions from the
boost::algorithm
namespace:
all_of_equal
,
any_of_equal
,
any_of
,
apply_permutation
,
apply_reverse_permutation
,
clamp_range
,
copy_if_until
,
copy_if_while
,
copy_if
,
copy_until
,
copy_while
,
find_backward
,
find_if_backward
,
find_if_not_backward
,
find_if_not
,
find_not_backward
,
hex_lower
,
hex
,
iota
, all_of
,
is_decreasing
,
is_increasing
,
is_palindrome
,
is_partitioned_until
,
is_partitioned
,
is_permutation
,
is_sorted_until
,
is_sorted
,
is_strictly_decreasing
,
is_strictly_increasing
,
none_of_equal
,
none_of
,
one_of_equal
,
one_of
,
partition_copy
,
partition_point
,
reduce
,
unhex
.
Reverse Iteration¶
If calls are made using reverse iterators on containers, The code will be
fixed using the boost::adaptors::reverse
adaptor.
auto AreSame = std::equal(Items1.rbegin(), Items1.rend(),
std::crbegin(Items2), std::crend(Items2));
Transforms to:
auto AreSame = boost::range::equal(boost::adaptors::reverse(Items1),
boost::adaptors::reverse(Items2));
Options¶
- IncludeStyle¶
A string specifying which include-style is used, llvm or google. Default is llvm.
- IncludeBoostSystem¶
If true (default value) the boost headers are included as system headers with angle brackets (#include <boost.hpp>), otherwise quotes are used (#include “boost.hpp”).
- UseReversePipe¶
When true (default false), fixes which involve reverse ranges will use the pipe adaptor syntax instead of the function syntax.
std::find(Items.rbegin(), Items.rend(), 0);
Transforms to:
boost::range::find(Items | boost::adaptors::reversed, 0);