Subject: Re: [Boost-bugs] [Boost C++ Libraries] #11801: Recursive modify in multi_index sometimes does not update index correctly
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2015-11-19 16:55:15
#11801: Recursive modify in multi_index sometimes does not update index correctly
-------------------------------------+-------------------------------------
Reporter: Valentyn Shtronda | Owner: joaquin
<valiko.ua@â¦> | Status: closed
Type: Bugs | Component: multi_index
Milestone: To Be Determined | Severity: Problem
Version: Boost 1.59.0 | Keywords: multi_index
Resolution: invalid | multi_index_container recursive
| modify
-------------------------------------+-------------------------------------
Comment (by joaquin):
This is a combination of the previous solutions, probably somewhat faster
as it incurs in fewer reindexings:
{{{
bool succeeded = deps_map.modify(it,
[=](node_info_t& node_info)
{
if (node_info.deps.size() == 0)
{
node_info.layer = 0;
}
else
{
index_by_name_t& index_by_name = deps_map.get<by_name>();
node_info.layer = CALCULATION_IN_PROGRESS;
index_by_name.modify(it,[](node_info_t&){});
int layer = 0;
for (const std::string& dep_name : node_info.deps)
{
index_by_name_t::iterator dep_it =
index_by_name.find(dep_name);
if (dep_it == deps_map.end())
{
node_info.layer = UNINITIALIZED;
printf("Unknown dependency.\n");
return;
}
if (!calc_layer(dep_it))
{
node_info.layer = UNINITIALIZED;
return;
}
layer = std::max(layer, dep_it->layer + 1);
}
node_info.layer = layer;
}
});
}}}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/11801#comment:5> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:19 UTC