LCOV - code coverage report
Current view: top level - http_proto/impl - context.ipp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 17 18 94.4 %
Date: 2023-12-22 17:54:30 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             : struct context::data
      22             : {
      23             :     // Installed services
      24             :     std::unordered_map<
      25             :         detail::type_index,
      26             :         std::unique_ptr<service>,
      27             :         detail::type_index_hasher
      28             :             > services;
      29             : };
      30             : 
      31             : //------------------------------------------------
      32             : 
      33          33 : context::
      34          33 : ~context()
      35             : {
      36          33 : }
      37             : 
      38          33 : context::
      39          33 : context()
      40          33 :     : p_(new data)
      41             : {
      42          33 : }
      43             : 
      44             : //------------------------------------------------
      45             : 
      46             : auto
      47         824 : context::
      48             : find_service_impl(
      49             :     detail::type_index id) const noexcept ->
      50             :         service*
      51             : {
      52         824 :     auto it = p_->services.find(id);
      53         824 :     if(it != p_->services.end())
      54         792 :         return it->second.get();
      55          32 :     return nullptr;
      56             : }
      57             : 
      58             : auto
      59          32 : context::
      60             : make_service_impl(
      61             :     detail::type_index id,
      62             :     std::unique_ptr<service> sp) ->
      63             :         service&
      64             : {
      65             :     auto const result =
      66          32 :         p_->services.emplace(
      67          32 :             id, std::move(sp));
      68          32 :     if(! result.second)
      69             :     {
      70             :         // already exists
      71           0 :         detail::throw_out_of_range();
      72             :     }
      73          64 :     return *result.first->second;
      74             : }
      75             : 
      76             : } // http_proto
      77             : } // boost
      78             : 
      79             : #endif

Generated by: LCOV version 1.15