#include <iostream>
{
using map_t = std::map<std::string, so_5::disp_binder_shptr_t, std::less<>>;
std::mutex m_lock;
map_t m_dict;
public:
void add(
const std::string & name,
{
std::lock_guard<std::mutex> l{m_lock};
auto [it, inserted] = m_dict.emplace(name, std::move(binder));
(void)it;
if(!inserted)
throw std::runtime_error(name + ": is not unique name");
}
std::optional<so_5::disp_binder_shptr_t>
try_get(std::string_view name) noexcept
{
std::lock_guard<std::mutex> l{m_lock};
if(const auto it = m_dict.find(name); it != m_dict.end())
return { it->second };
else
return std::nullopt;
}
get(std::string_view name)
{
auto r = try_get(name);
if(!r) throw std::runtime_error("binder is not found");
return std::move(*r);
}
};
{
public:
:
so_5::agent_t{std::move(ctx)}
, m_parent{std::move(parent)}
{}
{
so_5::send<i_am_completed>(m_parent);
}
private:
};
{
public:
a_parent_t(context_t ctx, std::string disp_name)
:
so_5::agent_t{std::move(ctx)}
, m_disp_name{std::move(disp_name)}
{}
{
[this](mhood_t<a_child_t::i_am_completed>) {
std::cout << "child from '" << m_disp_name << "' completed"
<< std::endl;
});
}
{
disp_binder_dictionary_layer_t
>()->get(m_disp_name);
});
}
private:
const std::string m_disp_name;
};
int main()
{
auto * layer = env.
query_layer<disp_binder_dictionary_layer_t>();
layer->add("first",
layer->add("second",
layer->add("third",
},
params.add_layer(std::make_unique<disp_binder_dictionary_layer_t>());
});
return 0;
}