aboutsummaryrefslogtreecommitdiffstats
path: root/include/utility.h
diff options
context:
space:
mode:
authorAntony Woods <acron1@gmail.com>2014-10-23 18:33:03 +0100
committerAntony Woods <acron1@gmail.com>2014-10-23 18:33:03 +0100
commit27bf11d35c8ce44fd9fef656e2975712846b9bb2 (patch)
tree7005bb1a5227983464e9a89fb7a381000ce7bb74 /include/utility.h
parenta5fab23f70e6e33c633ba4b646a41d0851169ad1 (diff)
downloadcrow-27bf11d35c8ce44fd9fef656e2975712846b9bb2.tar.gz
crow-27bf11d35c8ce44fd9fef656e2975712846b9bb2.zip
Re-implemented 'get_middleware()' as suggested, without changing the Server constructor and now no longer encountering hangs
Diffstat (limited to 'include/utility.h')
-rw-r--r--include/utility.h42
1 files changed, 41 insertions, 1 deletions
diff --git a/include/utility.h b/include/utility.h
index c910eb2..835fdbd 100644
--- a/include/utility.h
+++ b/include/utility.h
@@ -293,5 +293,45 @@ template <typename F, typename Set>
struct empty_context
{
};
- }
+
+ } // namespace black_magic
+
+ namespace detail
+ {
+
+ template <class T, std::size_t N, class... Args>
+ struct get_index_of_element_from_tuple_by_type_impl
+ {
+ static constexpr auto value = N;
+ };
+
+ template <class T, std::size_t N, class... Args>
+ struct get_index_of_element_from_tuple_by_type_impl<T, N, T, Args...>
+ {
+ static constexpr auto value = N;
+ };
+
+ template <class T, std::size_t N, class U, class... Args>
+ struct get_index_of_element_from_tuple_by_type_impl<T, N, U, Args...>
+ {
+ static constexpr auto value = get_index_of_element_from_tuple_by_type_impl<T, N + 1, Args...>::value;
+ };
+
+ } // namespace detail
+
+ namespace utility
+ {
+ template <class T, class... Args>
+ T get_element_by_type(std::tuple<Args...>& t)
+ {
+ return std::get<detail::get_index_of_element_from_tuple_by_type_impl<T, 0, Args...>::value>(t);
+ }
+
+ template <class T, class... Args>
+ T* get_element_by_type_ptr(std::tuple<Args...>& t)
+ {
+ return &std::get<detail::get_index_of_element_from_tuple_by_type_impl<T, 0, Args...>::value>(t);
+ }
+
+ } // namespace utility
}