summaryrefslogtreecommitdiff
path: root/deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2018-03-05 22:08:59 +0200
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2018-03-06 10:08:09 +0200
commitb2286c6c8f9076de4143061a778fc676cc15eb84 (patch)
tree66afddb456cf35e99c0a4c4c8b32433f9811da76 /deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp
parente8d6303d783a124aa5ba2fcf797df80a88ed546f (diff)
downloadqtlocation-mapboxgl-b2286c6c8f9076de4143061a778fc676cc15eb84.tar.gz
Bump Mapbox GL Native
mapbox-gl-native @ ae0e583590ce8d7a564c8d9cb7c0fcee5515125e Follow-up, added missing headers.
Diffstat (limited to 'deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp')
-rw-r--r--deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp b/deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp
new file mode 100644
index 0000000000..23a4e97180
--- /dev/null
+++ b/deps/tao_tuple/28626e99/include/tao/seq/make_integer_sequence.hpp
@@ -0,0 +1,84 @@
+// The Art of C++ / Sequences
+// Copyright (c) 2015 Daniel Frey
+
+#ifndef TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP
+#define TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP
+
+#include <cstddef>
+#include <utility>
+#include <type_traits>
+
+#include "config.hpp"
+#include "integer_sequence.hpp"
+
+namespace tao
+{
+ namespace seq
+ {
+
+#ifdef TAOCPP_USE_STD_MAKE_INTEGER_SEQUENCE
+
+ using std::make_integer_sequence;
+ using std::make_index_sequence;
+ using std::index_sequence_for;
+
+#else
+
+ // idea from http://stackoverflow.com/a/13073076
+
+ namespace impl
+ {
+ template< typename, std::size_t, bool >
+ struct double_up;
+
+ template< typename T, T... Ns, std::size_t N >
+ struct double_up< integer_sequence< T, Ns... >, N, false >
+ {
+ using type = integer_sequence< T, Ns..., ( N + Ns )... >;
+ };
+
+ template< typename T, T... Ns, std::size_t N >
+ struct double_up< integer_sequence< T, Ns... >, N, true >
+ {
+ using type = integer_sequence< T, Ns..., ( N + Ns )..., 2 * N >;
+ };
+
+ template< typename T, T N, typename = void >
+ struct generate;
+
+ template< typename T, T N >
+ using generate_t = typename generate< T, N >::type;
+
+ template< typename T, T N, typename >
+ struct generate
+ : double_up< generate_t< T, N / 2 >, N / 2, N % 2 == 1 >
+ {};
+
+ template< typename T, T N >
+ struct generate< T, N, typename std::enable_if< ( N == 0 ) >::type >
+ {
+ using type = integer_sequence< T >;
+ };
+
+ template< typename T, T N >
+ struct generate< T, N, typename std::enable_if< ( N == 1 ) >::type >
+ {
+ using type = integer_sequence< T, 0 >;
+ };
+ }
+
+ template< typename T, T N >
+ using make_integer_sequence = impl::generate_t< T, N >;
+
+ template< std::size_t N >
+ using make_index_sequence = make_integer_sequence< std::size_t, N >;
+
+ template< typename... Ts >
+ using index_sequence_for = make_index_sequence< sizeof...( Ts ) >;
+
+#endif
+
+ }
+}
+
+#endif // TAOCPP_SEQUENCES_INCLUDE_MAKE_INTEGER_SEQUENCE_HPP