LCOV - code coverage report
Current view: top level - http_proto/impl - context.ipp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 17 19 89.5 %
Date: 2023-01-09 16:11:12 Functions: 4 4 100.0 %

          Line data    Source code
       1             : //
       2             : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3             : //
       4             : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5             : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6             : //
       7             : // Official repository: https://github.com/CPPAlliance/http_proto
       8             : //
       9             : 
      10             : #ifndef BOOST_HTTP_PROTO_IMPL_CONTEXT_IPP
      11             : #define BOOST_HTTP_PROTO_IMPL_CONTEXT_IPP
      12             : 
      13             : #include <boost/http_proto/context.hpp>
      14             : #include <boost/http_proto/detail/except.hpp>
      15             : //#include <boost/unordered_map.hpp> // doesn't support heterogenous lookup yet
      16             : #include <unordered_map>
      17             : 
      18             : namespace boost {
      19             : namespace http_proto {
      20             : 
      21             : namespace detail {
      22             : codecs& install_codecs_service(context& ctx);
      23             : } // detail
      24             : 
      25             : struct context::data
      26             : {
      27             :     // Installed services
      28             :     std::unordered_map<
      29             :         detail::type_index,
      30             :         std::unique_ptr<service>
      31             :             > services;
      32             : };
      33             : 
      34             : //------------------------------------------------
      35             : 
      36           5 : context::
      37           5 : ~context()
      38             : {
      39           5 : }
      40             : 
      41           5 : context::
      42           5 : context() noexcept
      43           5 :     : p_(new data)
      44             : {
      45           5 :     codecs_ = &detail::install_codecs_service(*this);
      46           5 : }
      47             : 
      48             : //------------------------------------------------
      49             : 
      50             : auto
      51           7 : context::
      52             : find_service_impl(
      53             :     detail::type_index id) noexcept ->
      54             :         service*
      55             : {
      56           7 :     auto it = p_->services.find(id);
      57           7 :     if(it != p_->services.end())
      58           0 :         return it->second.get();
      59           7 :     return nullptr;
      60             : }
      61             : 
      62             : auto
      63           7 : context::
      64             : make_service_impl(
      65             :     detail::type_index id,
      66             :     std::unique_ptr<service> sp) ->
      67             :         service&    
      68             : {
      69             :     auto const result =
      70           7 :         p_->services.emplace(
      71           7 :             id, std::move(sp));
      72           7 :     if(! result.second)
      73             :     {
      74             :         // already exists
      75           0 :         detail::throw_out_of_range();
      76             :     }
      77          14 :     return *result.first->second;
      78             : }
      79             : 
      80             : } // http_proto
      81             : } // boost
      82             : 
      83             : #endif

Generated by: LCOV version 1.15