libostd
Macros | Functions
algorithm.hh File Reference

Generic algorithms for working with ranges. More...

Go to the source code of this file.

Macros

#define OSTD_TEST_MODULE   libostd_algorithm
 

Functions

template<typename ForwardRange , typename Predicate >
ForwardRange ostd::partition (ForwardRange range, Predicate pred)
 Partitions a range. More...
 
template<typename Predicate >
auto ostd::partition (Predicate &&pred)
 A pipeable version of ostd::partition(). More...
 
template<typename InputRange , typename Predicate >
bool ostd::is_partitioned (InputRange range, Predicate pred)
 Checks if a range is partitioned as in ostd::partition(). More...
 
template<typename Predicate >
auto ostd::is_partitioned (Predicate &&pred)
 A pipeable version of ostd::is_partitioned(). More...
 
template<typename FiniteRandomRange , typename Compare >
FiniteRandomRange ostd::sort_cmp (FiniteRandomRange range, Compare compare)
 Sorts a range given a comparison function. More...
 
template<typename Compare >
auto ostd::sort_cmp (Compare &&compare)
 A pipeable version of ostd::sort_cmp(). More...
 
template<typename FiniteRandomRange >
FiniteRandomRange ostd::sort (FiniteRandomRange range)
 Like ostd::sort_cmp() using std::less<ostd::range_value_t<R>>{}.
 
auto ostd::sort ()
 A pipeable version of ostd::sort().
 
template<typename ForwardRange >
ForwardRange ostd::min_element (ForwardRange range)
 Finds the smallest element in the range. More...
 
template<typename ForwardRange , typename Compare >
ForwardRange ostd::min_element_cmp (ForwardRange range, Compare compare)
 Finds the smallest element in the range. More...
 
auto ostd::min_element ()
 A pipeable version of ostd::min_element().
 
template<typename Compare >
auto ostd::min_element_cmp (Compare &&compare)
 A pipeable version of ostd::min_element_cmp(). More...
 
template<typename ForwardRange >
ForwardRange ostd::max_element (ForwardRange range)
 Finds the largest element in the range. More...
 
template<typename ForwardRange , typename Compare >
ForwardRange ostd::max_element_cmp (ForwardRange range, Compare compare)
 Finds the largest element in the range. More...
 
auto ostd::max_element ()
 A pipeable version of ostd::max_element().
 
template<typename Compare >
auto ostd::max_element_cmp (Compare &&compare)
 A pipeable version of ostd::max_element_cmp(). More...
 
template<typename InputRange1 , typename InputRange2 >
bool ostd::lexicographical_compare (InputRange1 range1, InputRange2 range2)
 Like std::lexicographical_compare(), but for ranges. More...
 
template<typename InputRange >
auto ostd::lexicographical_compare (InputRange &&range)
 A pipeable version of ostd::lexicographical_compare(). More...
 
template<typename InputRange1 , typename InputRange2 , typename Compare >
bool ostd::lexicographical_compare_cmp (InputRange1 range1, InputRange2 range2, Compare compare)
 Like std::lexicographical_compare(), but for ranges. More...
 
template<typename InputRange , typename Compare >
auto ostd::lexicographical_compare_cmp (InputRange &&range, Compare &&compare)
 A pipeable version of ostd::lexicographical_compare_cmp(). More...
 
template<typename InputRange , typename UnaryFunction >
UnaryFunction ostd::for_each (InputRange range, UnaryFunction func)
 Executes func on each element of range. More...
 
template<typename UnaryFunction >
auto ostd::for_each (UnaryFunction &&func)
 A pipeable version of ostd::for_each(). More...
 
template<typename InputRange , typename Predicate >
bool ostd::all_of (InputRange range, Predicate pred)
 Checks if every element of range matches pred. More...
 
template<typename Predicate >
auto ostd::all_of (Predicate &&pred)
 A pipeable version of ostd::all_of(). More...
 
template<typename InputRange , typename Predicate >
bool ostd::any_of (InputRange range, Predicate pred)
 Checks if any element of range matches pred. More...
 
template<typename Predicate >
auto ostd::any_of (Predicate &&pred)
 A pipeable version of ostd::any_of(). More...
 
template<typename InputRange , typename Predicate >
bool ostd::none_of (InputRange range, Predicate pred)
 Checks if no element of range matches pred. More...
 
template<typename Predicate >
auto ostd::none_of (Predicate &&pred)
 A pipeable version of ostd::none_of(). More...
 
template<typename InputRange , typename Value >
InputRange ostd::find (InputRange range, Value const &v)
 Finds v in range. More...
 
template<typename Value >
auto ostd::find (Value &&v)
 A pipeable version of ostd::find(). More...
 
template<typename ForwardRange , typename Value >
ForwardRange ostd::find_last (ForwardRange range, Value const &v)
 Finds the last occurence of v in range. More...
 
template<typename Value >
auto ostd::find_last (Value &&v)
 A pipeable version of ostd::find_last(). More...
 
template<typename InputRange , typename Predicate >
InputRange ostd::find_if (InputRange range, Predicate pred)
 Finds an element matching pred in range. More...
 
template<typename Predicate >
auto ostd::find_if (Predicate &&pred)
 A pipeable version of ostd::find_if(). More...
 
template<typename InputRange , typename Predicate >
InputRange ostd::find_if_not (InputRange range, Predicate pred)
 Finds an element not matching pred in range. More...
 
template<typename Predicate >
auto ostd::find_if_not (Predicate &&pred)
 A pipeable version of ostd::find_if_not(). More...
 
template<typename InputRange , typename ForwardRange , typename Compare >
InputRange ostd::find_one_of_cmp (InputRange range, ForwardRange values, Compare compare)
 Finds the first element matching any element in values. More...
 
template<typename ForwardRange , typename Compare >
auto ostd::find_one_of_cmp (ForwardRange &&values, Compare &&compare)
 A pipeable version of ostd::find_one_of_cmp(). More...
 
template<typename InputRange , typename ForwardRange >
InputRange ostd::find_one_of (InputRange range, ForwardRange values)
 Finds the first element matching any element in values. More...
 
template<typename ForwardRange >
auto ostd::find_one_of (ForwardRange &&values)
 A pipeable version of ostd::find_one_of(). More...
 
template<typename InputRange , typename Value >
range_size_t< InputRange > ostd::count (InputRange range, Value const &v)
 Counts the number of occurences of v in range. More...
 
template<typename Value >
auto ostd::count (Value &&v)
 A pipeable version of ostd::count(). More...
 
template<typename InputRange , typename Predicate >
range_size_t< InputRange > ostd::count_if (InputRange range, Predicate pred)
 Counts the number of elements matching pred in `range. More...
 
template<typename Predicate >
auto ostd::count_if (Predicate &&pred)
 A pipeable version of ostd::count_if(). More...
 
template<typename InputRange , typename Predicate >
range_size_t< InputRange > ostd::count_if_not (InputRange range, Predicate pred)
 Counts the number of elements not matching pred in `range. More...
 
template<typename Predicate >
auto ostd::count_if_not (Predicate &&pred)
 A pipeable version of ostd::count_if_not(). More...
 
template<typename InputRange >
bool ostd::equal (InputRange range1, InputRange range2)
 Checks if two ranges have equal contents. More...
 
template<typename InputRange >
auto ostd::equal (InputRange &&range)
 A pipeable version of ostd::equal(). More...
 
template<typename InputRange , typename OutputRange >
OutputRange ostd::copy (InputRange irange, OutputRange orange)
 Copies all elements from irange to orange. More...
 
template<typename InputRange , typename OutputRange , typename Predicate >
OutputRange ostd::copy_if (InputRange irange, OutputRange orange, Predicate pred)
 Copies elements of irange matching pred into orange. More...
 
template<typename InputRange , typename OutputRange , typename Predicate >
OutputRange ostd::copy_if_not (InputRange irange, OutputRange orange, Predicate pred)
 Copies elements of irange not matching pred into orange. More...
 
template<typename BidirRange >
void ostd::reverse (BidirRange range)
 Reverses the order of the given range in-place. More...
 
template<typename BidirRange , typename OutputRange >
OutputRange ostd::reverse_copy (BidirRange irange, OutputRange orange)
 Reverses the order of the given range into orange. More...
 
template<typename InputRange , typename Value >
void ostd::fill (InputRange range, Value const &v)
 Fills the given input range with v. More...
 
template<typename InputRange , typename UnaryFunction >
void ostd::generate (InputRange range, UnaryFunction gen)
 Fills the given input range with calls to gen. More...
 
template<typename InputRange1 , typename InputRange2 >
std::pair< InputRange1, InputRange2 > ostd::swap_ranges (InputRange1 range1, InputRange2 range2)
 Swaps the contents of two input ranges. More...
 
template<typename InputRange , typename Value >
void ostd::iota (InputRange range, Value value)
 Fills the given input range with value++. More...
 
template<typename InputRange , typename Value >
Value ostd::foldl (InputRange range, Value init)
 Left-folds the range into init. More...
 
template<typename InputRange , typename Value , typename BinaryFunction >
Value ostd::foldl_f (InputRange range, Value init, BinaryFunction func)
 Left-folds the range into init. More...
 
template<typename Value >
auto ostd::foldl (Value &&init)
 A pipeable version of ostd::foldl(). More...
 
template<typename Value , typename BinaryFunction >
auto ostd::foldl_f (Value &&init, BinaryFunction &&func)
 A pipeable version of ostd::foldl_f(). More...
 
template<typename InputRange , typename Value >
Value ostd::foldr (InputRange range, Value init)
 Right-folds the range into init. More...
 
template<typename InputRange , typename Value , typename BinaryFunction >
Value ostd::foldr_f (InputRange range, Value init, BinaryFunction func)
 Right-folds the range into init. More...
 
template<typename Value >
auto ostd::foldr (Value &&init)
 A pipeable version of ostd::foldr(). More...
 
template<typename Value , typename BinaryFunction >
auto ostd::foldr_f (Value &&init, BinaryFunction &&func)
 A pipeable version of ostd::foldr_f(). More...
 
template<typename InputRange , typename UnaryFunction >
auto ostd::map (InputRange range, UnaryFunction func)
 Gets a wrapper range that maps each item by func. More...
 
template<typename UnaryFunction >
auto ostd::map (UnaryFunction &&func)
 A pipeable version of ostd::map(). More...
 
template<typename InputRange , typename Predicate >
auto ostd::filter (InputRange range, Predicate pred)
 Gets a wrapper range that filters items by pred. More...
 
template<typename Predicate >
auto ostd::filter (Predicate &&pred)
 A pipeable version of ostd::filter(). More...
 

Detailed Description

Generic algorithms for working with ranges.

This file provides various algorithms that work with ranges, including partitioning, sorting, comparison, iteration, finding, filling, folding, mapping, filtering and others. It's roughly equivalent to the C++ header algorithm, with many of the algorithms being just range-based versions of the iterator ones, but it also provides different custom algorithms.