From 966867a9ca8ca3dd9e783d628b8184563318d03c Mon Sep 17 00:00:00 2001 From: ipknHama Date: Fri, 12 Dec 2014 01:38:57 +0900 Subject: change pointer to reference; fix up spaces --- amalgamate/crow_all.h | 66 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 12 deletions(-) (limited to 'amalgamate/crow_all.h') diff --git a/amalgamate/crow_all.h b/amalgamate/crow_all.h index ba483ca..911d15d 100644 --- a/amalgamate/crow_all.h +++ b/amalgamate/crow_all.h @@ -5610,7 +5610,41 @@ template struct empty_context { }; - } + + } // namespace black_magic + + namespace detail + { + + template + struct get_index_of_element_from_tuple_by_type_impl + { + static constexpr auto value = N; + }; + + template + struct get_index_of_element_from_tuple_by_type_impl + { + static constexpr auto value = N; + }; + + template + struct get_index_of_element_from_tuple_by_type_impl + { + static constexpr auto value = get_index_of_element_from_tuple_by_type_impl::value; + }; + + } // namespace detail + + namespace utility + { + template + T& get_element_by_type(std::tuple& t) + { + return std::get::value>(t); + } + + } // namespace utility } @@ -6035,7 +6069,7 @@ namespace crow json_value = std::move(r.json_value); code = r.code; headers = std::move(r.headers); - completed_ = r.completed_; + completed_ = r.completed_; return *this; } @@ -7136,7 +7170,7 @@ namespace crow boost::asio::io_service& io_service, Handler* handler, const std::string& server_name, - std::tuple& middlewares + std::tuple* middlewares ) : socket_(io_service), handler_(handler), @@ -7233,7 +7267,7 @@ namespace crow ctx_ = detail::context(); req.middleware_context = (void*)&ctx_; - detail::middleware_call_helper<0, decltype(ctx_), decltype(middlewares_), Middlewares...>(middlewares_, req, res, ctx_); + detail::middleware_call_helper<0, decltype(ctx_), decltype(*middlewares_), Middlewares...>(*middlewares_, req, res, ctx_); if (!res.completed_) { @@ -7266,8 +7300,8 @@ namespace crow detail::after_handlers_call_helper< ((int)sizeof...(Middlewares)-1), decltype(ctx_), - decltype(middlewares_)> - (middlewares_, ctx_, req_, res); + decltype(*middlewares_)> + (*middlewares_, ctx_, req_, res); } //auto self = this->shared_from_this(); @@ -7514,7 +7548,7 @@ namespace crow bool need_to_start_read_after_complete_{}; bool add_keep_alive_{}; - std::tuple& middlewares_; + std::tuple* middlewares_; detail::context ctx_; }; @@ -7551,12 +7585,13 @@ namespace crow class Server { public: - Server(Handler* handler, uint16_t port, uint16_t concurrency = 1) + Server(Handler* handler, uint16_t port, std::tuple* middlewares = nullptr, uint16_t concurrency = 1) : acceptor_(io_service_, tcp::endpoint(asio::ip::address(), port)), signals_(io_service_, SIGINT, SIGTERM), handler_(handler), concurrency_(concurrency), - port_(port) + port_(port), + middlewares_(middlewares) { } @@ -7649,8 +7684,7 @@ namespace crow uint16_t port_; unsigned int roundrobin_index_{}; - std::tuple middlewares_; - + std::tuple* middlewares_; }; } @@ -7734,7 +7768,7 @@ namespace crow void run() { validate(); - server_t server(this, port_, concurrency_); + server_t server(this, port_, &middlewares_, concurrency_); server.run(); } @@ -7754,11 +7788,19 @@ namespace crow return ctx.template get(); } + template + T& get_middleware() + { + return utility::get_element_by_type(middlewares_); + } + private: uint16_t port_ = 80; uint16_t concurrency_ = 1; Router router_; + + std::tuple middlewares_; }; template using App = Crow; -- cgit v1.2.3-54-g00ecf