the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at master 118 lines 4.9 kB view raw
1/////////////////////////////////////////////////////////////////////////////// 2/// \file algorithm.hpp 3/// Contains range-based versions of the std algorithms 4// 5///////////////////////////////////////////////////////////////////////////// 6// Copyright 2009 Neil Groves. 7// Distributed under the Boost Software License, Version 1.0. (See 8// accompanying file LICENSE_1_0.txt or copy at 9// http://www.boost.org/LICENSE_1_0.txt) 10// 11 12// Copyright 2006 Thorsten Ottosen. 13// Distributed under the Boost Software License, Version 1.0. (See 14// accompanying file LICENSE_1_0.txt or copy at 15// http://www.boost.org/LICENSE_1_0.txt) 16// 17// Copyright 2004 Eric Niebler. 18// Distributed under the Boost Software License, Version 1.0. (See 19// accompanying file LICENSE_1_0.txt or copy at 20// http://www.boost.org/LICENSE_1_0.txt) 21 22#if defined(_MSC_VER) && _MSC_VER >= 1000 23 #pragma once 24#endif 25 26#ifndef BOOST_RANGE_NUMERIC_HPP 27#define BOOST_RANGE_NUMERIC_HPP 28 29#include <boost/config.hpp> 30#include <boost/assert.hpp> 31#include <boost/range/begin.hpp> 32#include <boost/range/end.hpp> 33#include <boost/range/concepts.hpp> 34#include <boost/range/distance.hpp> 35#include <numeric> 36 37 38namespace boost 39{ 40 template< class SinglePassRange, class Value > 41 inline Value accumulate( const SinglePassRange& rng, Value init ) 42 { 43 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> )); 44 return std::accumulate( boost::begin(rng), boost::end(rng), init ); 45 } 46 47 template< class SinglePassRange, class Value, class BinaryOperation > 48 inline Value accumulate( const SinglePassRange& rng, Value init, BinaryOperation op ) 49 { 50 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> )); 51 return std::accumulate( boost::begin(rng), boost::end(rng), init, op ); 52 } 53 54 55 template< class SinglePassRange1, class SinglePassRange2, class Value > 56 inline Value inner_product( const SinglePassRange1& rng1, const SinglePassRange2& rng2, Value init ) 57 { 58 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> )); 59 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> )); 60 BOOST_ASSERT( boost::distance(rng2) >= boost::distance(rng1) ); 61 return std::inner_product( boost::begin(rng1), boost::end(rng1), 62 boost::begin(rng2), init ); 63 } 64 65 template< class SinglePassRange1, 66 class SinglePassRange2, 67 class Value, 68 class BinaryOperation1, class BinaryOperation2 > 69 inline Value inner_product( const SinglePassRange1& rng1, const SinglePassRange2& rng2, 70 Value init, 71 BinaryOperation1 op1, BinaryOperation2 op2 ) 72 { 73 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> )); 74 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> )); 75 BOOST_ASSERT( boost::distance(rng2) >= boost::distance(rng1) ); 76 77 return std::inner_product( boost::begin(rng1), boost::end(rng1), 78 boost::begin(rng2), init, op1, op2 ); 79 } 80 81 template< class SinglePassRange, class OutputIterator > 82 inline OutputIterator partial_sum ( const SinglePassRange& rng, 83 OutputIterator result ) 84 { 85 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> )); 86 return std::partial_sum( boost::begin(rng), boost::end(rng), result ); 87 } 88 89 template< class SinglePassRange, class OutputIterator, class BinaryOperation > 90 inline OutputIterator partial_sum ( const SinglePassRange& rng, OutputIterator result, 91 BinaryOperation op ) 92 { 93 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> )); 94 return std::partial_sum( boost::begin(rng), boost::end(rng), result, op ); 95 } 96 97 template< class SinglePassRange, class OutputIterator > 98 inline OutputIterator adjacent_difference ( const SinglePassRange& rng, 99 OutputIterator result ) 100 { 101 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> )); 102 return std::adjacent_difference( boost::begin(rng), boost::end(rng), 103 result ); 104 } 105 106 template< class SinglePassRange, class OutputIterator, class BinaryOperation > 107 inline OutputIterator adjacent_difference ( const SinglePassRange& rng, 108 OutputIterator result, 109 BinaryOperation op ) 110 { 111 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> )); 112 return std::adjacent_difference( boost::begin(rng), boost::end(rng), 113 result, op ); 114 } 115 116} 117 118#endif