Skip to content
Snippets Groups Projects
Commit 11d0e8fe authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Update usage of forEach in reader

parent 4269f509
No related branches found
No related tags found
2 merge requests!188ArMem Updates,!185Clean up interfaces and unneeded code in memory core classes
......@@ -242,32 +242,19 @@ namespace armarx::armem::articulated_object
.getCoreSegment(properties.coreInstanceSegmentName);
// clang-format on
for (const auto& [_, providerSegment] : coreSegment.providerSegments())
std::optional<wm::EntityInstance> instance;
coreSegment.forEachInstance([&instance](const wm::EntityInstance & i)
{
const auto entities = simox::alg::get_values(providerSegment.entities());
if (entities.empty())
{
ARMARX_WARNING << "No entity found";
continue;
}
const auto entitySnapshots = simox::alg::get_values(entities.front().history());
if (entitySnapshots.empty())
{
ARMARX_WARNING << "No entity snapshots found";
continue;
}
// TODO(fabian.reister): check if 0 available
const armem::wm::EntityInstance& instance = entitySnapshots.front().getInstance(0);
return robot::convertRobotState(instance);
instance = i;
});
if (instance.has_value())
{
return robot::convertRobotState(instance.value());
}
else
{
return std::nullopt;
}
return std::nullopt;
}
......@@ -275,67 +262,43 @@ namespace armarx::armem::articulated_object
Reader::getRobotDescription(const armarx::armem::wm::Memory& memory) const
{
// clang-format off
const armem::wm::CoreSegment& coreSegment = memory
.getCoreSegment(properties.coreClassSegmentName);
const armem::wm::CoreSegment& coreSegment = memory.getCoreSegment(properties.coreClassSegmentName);
// clang-format on
for (const auto& [_, providerSegment] : coreSegment.providerSegments())
std::optional<wm::EntityInstance> instance;
coreSegment.forEachInstance([&instance](const wm::EntityInstance & i)
{
const auto entities = simox::alg::get_values(providerSegment.entities());
if (entities.empty())
{
ARMARX_WARNING << "No entity found";
continue;
}
const auto entitySnapshots = simox::alg::get_values(entities.front().history());
if (entitySnapshots.empty())
{
ARMARX_WARNING << "No entity snapshots found";
continue;
}
if (entitySnapshots.front().hasInstance(0))
{
const armem::wm::EntityInstance& instance = entitySnapshots.front().getInstance(0);
return convertRobotDescription(instance);
}
instance = i;
});
if (instance.has_value())
{
return convertRobotDescription(instance.value());
}
else
{
return std::nullopt;
}
return std::nullopt;
}
std::vector<robot::RobotDescription>
Reader::getRobotDescriptions(const armarx::armem::wm::Memory& memory) const
{
std::vector<robot::RobotDescription> descriptions;
const armem::wm::CoreSegment& coreSegment =
memory.getCoreSegment(properties.coreClassSegmentName);
for (const auto& [providerName, providerSegment] : coreSegment.providerSegments())
std::vector<robot::RobotDescription> descriptions;
coreSegment.forEachEntity([&descriptions](const wm::Entity & entity)
{
for (const auto& [name, entity] : providerSegment.entities())
if (not entity.empty())
{
if (entity.empty())
{
ARMARX_WARNING << "No entity found";
continue;
}
const auto entitySnapshots = simox::alg::get_values(entity.history());
const armem::wm::EntityInstance& instance = entitySnapshots.front().getInstance(0);
const auto robotDescription = convertRobotDescription(instance);
const auto robotDescription = convertRobotDescription(entity.getFirstSnapshot().getInstance(0));
if (robotDescription)
{
descriptions.push_back(*robotDescription);
}
}
}
});
return descriptions;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment