GCC Code Coverage Report


Directory: libs/http_proto/include/boost/http_proto/
File: boost/http_proto/impl/context.ipp
Date: 2023-02-02 18:17:22
Exec Total Coverage
Lines: 7 18 38.9%
Functions: 2 4 50.0%
Branches: 0 6 0.0%

Line Branch Exec Source
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 > services;
28 };
29
30 //------------------------------------------------
31
32 1 context::
33 1 ~context()
34 {
35 1 }
36
37 1 context::
38 1 context() noexcept
39 1 : p_(new data)
40 {
41 1 }
42
43 //------------------------------------------------
44
45 auto
46 context::
47 find_service_impl(
48 detail::type_index id) const noexcept ->
49 service*
50 {
51 auto it = p_->services.find(id);
52 if(it != p_->services.end())
53 return it->second.get();
54 return nullptr;
55 }
56
57 auto
58 context::
59 make_service_impl(
60 detail::type_index id,
61 std::unique_ptr<service> sp) ->
62 service&
63 {
64 auto const result =
65 p_->services.emplace(
66 id, std::move(sp));
67 if(! result.second)
68 {
69 // already exists
70 detail::throw_out_of_range();
71 }
72 return *result.first->second;
73 }
74
75 } // http_proto
76 } // boost
77
78 #endif
79