General Purpose library for Freestanding C++ and POSIX systems
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

30 Zeilen
573 B

#pragma once
#include "gp_config.hpp"
#include "gp/algorithms/move.hpp"
namespace gp{
// TODO: this goes in functional
template<typename T>
T identity(T v){return v;}
template<typename T>
T& identity(T& v){return v;}
template<typename it, typename transform>
auto&& min_of(it beg, it end, transform fn = identity) {
gp_config::assertion(beg != end, "min_of provided with empty range");
auto fn_v = fn(*beg);
++beg;
while(beg != end) {
auto n_fn_v = fn(*beg);
if(n_fn_v < fn_v) {
fn_v = n_fn_v;
}
++beg;
}
return gp::move(fn_v);
}
}