diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-10-28 16:39:50 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-02 09:44:42 -0800 |
commit | 141e995806576364d185626176c1b993fc519291 (patch) | |
tree | ecdc41fc7699f2a1a9e9456157348451ebe99597 /src/mbgl/util/type_list.hpp | |
parent | 6a6bddb4537004cc1bfc506e76772de74d33f3f7 (diff) | |
download | qtlocation-mapboxgl-141e995806576364d185626176c1b993fc519291.tar.gz |
[core] Add support for data-driven styling
Diffstat (limited to 'src/mbgl/util/type_list.hpp')
-rw-r--r-- | src/mbgl/util/type_list.hpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mbgl/util/type_list.hpp b/src/mbgl/util/type_list.hpp new file mode 100644 index 0000000000..4a5e95c8a4 --- /dev/null +++ b/src/mbgl/util/type_list.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include <type_traits> +#include <tuple> + +namespace mbgl { + +template <class...> +class TypeList {}; + +namespace detail { + +template <class, class> +struct TypeCons; + +template <class T, class... Ts> +struct TypeCons<T, TypeList<Ts...>> { + using Type = TypeList<T, Ts...>; +}; + +template <class, template <class> class> +struct TypeFilter; + +template <template <class> class Predicate> +struct TypeFilter<TypeList<>, Predicate> { + using Type = TypeList<>; +}; + +template <template <class> class Predicate, class T, class... Ts> +struct TypeFilter<TypeList<T, Ts...>, Predicate> { + using Tail = typename TypeFilter<TypeList<Ts...>, Predicate>::Type; + using Type = std::conditional_t<Predicate<T>::value, typename TypeCons<T, Tail>::Type, Tail>; +}; + +} // namespace detail + +template <class TypeList, template <class> class Predicate> +using FilteredTypeList = typename detail::TypeFilter<TypeList, Predicate>::Type; + +} // namespace mbgl |