| Coverage Report |
 |
|
|
 |
: /*
: Copyright (c) 2025 Giuseppe Roberti.
: All rights reserved.
:
: Redistribution and use in source and binary forms, with or without modification,
: are permitted provided that the following conditions are met:
:
: 1. Redistributions of source code must retain the above copyright notice, this
: list of conditions and the following disclaimer.
:
: 2. Redistributions in binary form must reproduce the above copyright notice,
: this list of conditions and the following disclaimer in the documentation and/or
: other materials provided with the distribution.
:
: 3. Neither the name of the copyright holder nor the names of its contributors
: may be used to endorse or promote products derived from this software without
: specific prior written permission.
:
: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
: */
: #pragma once
:
: #include "nngxx/ctx.h"
:
: #include "pars/net/context.h"
: #include "pars/net/socket.h"
: #include "pars/net/tool_view.h"
:
: #include <format>
: #include <tuple>
: #include <unordered_map>
:
: namespace pars::net
: {
:
: class context_registry
: {
: public:
: context_registry(ev::enqueuer& r, net::socket& s)
: : router_m{r}
: , sock_m{s}
: {
: }
:
: void stop_all()
: {
0 / 1 : for (auto& c : ctx_map_m)
0 / 1 : c.second.stop();
: }
:
: context& emplace()
: {
0 / 1 : auto ctx = sock_m.make_ctx();
:
0 / 1 : auto id = ctx.id();
:
0 / 1 : auto res = ctx_map_m.try_emplace(id, router_m, std::move(ctx), sock_m);
:
0 / 1 : if (!res.second)
0 / 1 : throw std::runtime_error("Unable to emplace a context");
:
0 / 1 : return res.first->second;
: }
:
: context& of(const net::tool_view& t)
: {
0 / 1 : if (t.type() != typeid(nngxx::ctx_view))
0 / 1 : throw std::runtime_error("We need a context here");
:
0 / 1 : if (ctx_map_m.find(t.id()) == ctx_map_m.end())
0 / 1 : throw std::runtime_error(std::format("Unknown context {}", t.id()));
:
0 / 1 : return ctx_map_m.at(t.id());
: }
:
: void start_recv(int num_ctxs)
: {
0 / 1 : for (int i = 0; i < num_ctxs; ++i)
0 / 1 : emplace().recv();
: }
:
: private:
: ev::enqueuer& router_m;
: socket& sock_m;
: std::unordered_map<int, context> ctx_map_m;
: };
:
: } // namespace pars::net
 |
| Generated by: llvmcov2html |