RaftLib  0.3a
C++ Stream Processing Template Library
utility.hpp
1 
20 #ifndef _UTILITY_HPP_
21 #define _UTILITY_HPP_ 1
22 #include <vector>
23 #include <cstddef>
24 #include <cstdint>
25 #include <functional>
26 #include <cassert>
27 #include <utility>
28 #include <type_traits>
29 #include <cmath>
30 
31 namespace raft
32 {
33 
34 template < typename A,
35  typename B > using common_t = typename std::common_type< A, B >::type;
36 
37 template < typename A,
38  typename B > using common_v_t = std::vector< common_t< A, B > >;
39 
53 template < typename A,
54  typename B,
55  typename std::enable_if< std::is_arithmetic< A >::value >::type* = nullptr,
56  typename std::enable_if< std::is_arithmetic< B >::value >::type* = nullptr >
57 static
58 common_v_t< A, B >
59 range( const A a,
60  const B b,
61  const common_t< A, B > delta = 1 )
62 {
63  if( a < b )
64  {
65  const auto cap( (b - a + delta) / delta );
66  common_v_t< A, B > out( cap );
67  auto index( 0 );
68  for( common_t< A, B > i( a );
69  std::islessequal( i, b + delta ); i += delta, index++ )
70  {
71  out[ index ] = i;
72  }
73  return( std::forward< common_v_t< A, B > >( out ) );
74  }
75  else
76  {
77  const auto cap( (a - b + delta ) / delta );
78  common_v_t< A, B > out( cap );
79  auto index( 0 );
80  for( common_t< A, B > i( a );
81  std::isgreaterequal( i, b - delta ); i -= delta, index++ )
82  {
83  out[ index ] = i;
84  }
85  return( std::forward< common_v_t< A, B > >( out ) );
86  }
87 }
88 }
89 #endif /* END _UTILITY_HPP_ */
Definition: globalmap.cpp:3