in src/cpp/RiderLink/Source/RD/src/rd_core_cpp/src/main/reactive/base/IViewableMap.h [145:178]
void view(Lifetime lifetime, std::function<void(Lifetime lifetime, std::pair<K const*, V const*> const&)
>
handler) const override
{
advise_add_remove(lifetime, [this, lifetime, handler](AddRemove kind, K const& key, V const& value) {
const std::pair<K const*, V const*> entry = std::make_pair(&key, &value);
switch (kind)
{
case AddRemove::ADD:
{
if (lifetimes[lifetime].count(key) == 0)
{
/*auto const &[it, inserted] = lifetimes[lifetime].emplace(key, LifetimeDefinition(lifetime));*/
auto const& pair = lifetimes[lifetime].emplace(&key, LifetimeDefinition(lifetime));
auto& it = pair.first;
auto& inserted = pair.second;
RD_ASSERT_MSG(inserted, "lifetime definition already exists in viewable map by key:" + to_string(key));
handler(it->second.lifetime, entry);
}
break;
}
case AddRemove::REMOVE:
{
RD_ASSERT_MSG(lifetimes.at(lifetime).count(key) > 0,
"attempting to remove non-existing lifetime in viewable map by key:" + to_string(key));
LifetimeDefinition def = std::move(lifetimes.at(lifetime).at(key));
lifetimes.at(lifetime).erase(key);
def.terminate();
break;
}
}
});
}