Algorithms are defined in the
include/picolibrary/algorithm.h
/source/picolibrary/algorithm.cc
header/source file pair.
Algorithm automated tests are defined in the
test/automated/picolibrary/algorithm/main.cc
source file.
for_each()
To apply a unary functor to a range, use the ::picolibrary::for_each()
algorithm.
To report functor errors to the caller, use the
::picolibrary::Functor_Can_Fail_Return_Fuctor
or
::picolibrary::Functor_Can_Fail_Discard_Functor
policy.
#include <cstdint>
#include "picolibrary/algorithm.h"
#include "picolibrary/array.h"
#include "picolibrary/result.h"
void foo( std::uint_fast8_t i ) noexcept;
auto bar( std::uint_fast8_t i ) noexcept -> Result<void>;
auto wibble( ::picolibrary::Array<std::uint_fast8_t, 8> const & array ) noexcept
{
return ::picolibrary::for_each( array.begin(), array.end(), foo );
}
auto wobble( ::picolibrary::Array<std::uint_fast8_t, 8> const & array ) noexcept
{
auto result = ::picolibrary::for_each<::picolibrary::Functor_Can_Fail_Return_Functor>(
array.begin(),
array.end(),
bar );
if ( result.is_error() ) {
// handle error
} // if
return result.value();
}
void wubble( ::picolibrary::Array<std::uint_fast8_t, 8> const & array ) noexcept
{
auto result = ::picolibrary::for_each<::picolibrary::Functor_Can_Fail_Discard_Functor>(
array.begin(),
array.end(),
bar );
if ( result.is_error() ) {
// handle error
} // if
}
fill()
To fill a range with a value, use the ::picolibrary::fill()
algorithm.
generate()
To fill a range with values generated by a nullary functor, use the
::picolibrary::generate()
algorithm.
To report functor errors to the caller, use the ::picolibrary::Functor_Can_Fail
policy.
#include <cstdint>
#include "picolibrary/algorithm.h"
#include "picolibrary/array.h"
#include "picolibrary/result.h"
auto foo() noexcept -> std::uint_fast8_t;
auto bar() noexcept -> Result<std::uint_fast8_t>;
auto wibble() noexcept -> Array<std::uint_fast8_t, 8>
{
Array<std::uint_fast8_t, 8> array;
::picolibrary::generate( array.begin(), array.end(), foo );
return array;
}
auto wobble() noexcept -> Array<std::uint_fast8_t, 8>
{
Array<std::uint_fast8_t, 8> array;
auto result = ::picolibrary::generate<::picolibrary::Functor_Can_Fail>(
array.begin(),
array.end(),
bar );
if ( result.is_error() ) {
// handle error
} // if
return array;
}
min()
To get the minimum of two values, use the ::picolibrary::min()
algorithm.
max()
To get the maximum of two values, use the ::picolibrary::max()
algorithm.
equal()
To check if two ranges are equal, use the ::picolibrary::equal()
algorithm.
If the elements in the ranges do not support direct comparison, a binary predicate can be
used to compare elements.