//======================================================================= // Copyright Baptiste Wicht 2013-2014. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //======================================================================= #ifndef ALGORITHMS_H #define ALGORITHMS_H #include namespace std { template< class T > struct remove_reference {typedef T type;}; template< class T > struct remove_reference {typedef T type;}; template< class T > struct remove_reference {typedef T type;}; template constexpr typename remove_reference::type&& move(T&& t){ return static_cast::type&&>(t); } template constexpr T&& forward(typename remove_reference::type& t ){ return static_cast(t); } template constexpr T&& forward(typename remove_reference::type&& t ){ return static_cast(t); } template void copy(OutputIterator out, InputIterator it, InputIterator end){ if(it != end){ *out = *it; while(++it != end){ *++out = *it; } } } template void copy_n(OutputIterator out, InputIterator in, size_t n){ if(n > 0){ *out = *in; while(--n){ *++out = *++in; } } } template void move_n(OutputIterator out, InputIterator in, size_t n){ if(n > 0){ *out = std::move(*in); while(--n){ *++out = std::move(*++in); } } } template void fill(ForwardIterator it, ForwardIterator end, const T& value){ if(it != end){ *it = value; while(++it != end){ *it = value; } } } template void fill_n(ForwardIterator it, size_t n, const T& value){ if(n > 0){ *it = value; while(--n){ *++it = value; } } } template size_t compare_n(Iterator1 it1, Iterator2 it2, size_t n){ if(n > 0){ while(n--){ if(*it1 != *it2){ return *it1- *it2; } else { ++it1; ++it2; } } } return 0; } template bool equal_n(Iterator1 it1, Iterator2 it2, size_t n){ return compare_n(it1, it2, n) == 0; } template constexpr const T& min(const T& a, const T& b){ return a <= b ? a : b; } template constexpr const T& max(const T& a, const T& b){ return a >= b ? a : b; } } //end of namespace std #endif