From c89cafa820ec02f041c3b0e52877bc321f6a1ba9 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Sun, 7 Sep 2014 01:24:45 +0900 Subject: add Middlewares template to Crow main class, context implementation --- include/utility.h | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'include/utility.h') diff --git a/include/utility.h b/include/utility.h index a46d577..35ea848 100644 --- a/include/utility.h +++ b/include/utility.h @@ -2,6 +2,8 @@ #include #include +#include +#include namespace crow { @@ -211,5 +213,76 @@ template using type = S<>; }; + template + struct last_element_type + { + using type = typename std::tuple_element>::type; + }; + + + template <> + struct last_element_type<> + { + }; + + + // from http://stackoverflow.com/questions/13072359/c11-compile-time-array-with-logarithmic-evaluation-depth + template using Invoke = typename T::type; + + template struct seq{ using type = seq; }; + + template struct concat; + + template + struct concat, seq> + : seq{}; + + template + using Concat = Invoke>; + + template struct gen_seq; + template using GenSeq = Invoke>; + + template + struct gen_seq : Concat, GenSeq>{}; + + template<> struct gen_seq<0> : seq<>{}; + template<> struct gen_seq<1> : seq<0>{}; + + template + struct pop_back_helper; + + template + struct pop_back_helper, Tuple> + { + template