operations.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 
5 #include "wm/memory_definitions.h"
6 
7 /*
8  * Functions performing some "advanced" operations on the memory
9  * data structure, which are using their public API but should not
10  * be part of it.
11  */
12 
13 namespace armarx::armem
14 {
15 
16  std::vector<aron::data::DictPtr> getAronData(const wm::EntitySnapshot& snapshot);
17 
18 
19  EntityUpdate toEntityUpdate(const wm::EntitySnapshot& snapshot);
20 
21  template <class ContainerT>
22  Commit
23  toCommit(const ContainerT& container)
24  {
25  Commit commit;
26  container.forEachSnapshot(
27  [&commit](const wm::EntitySnapshot& snapshot)
28  {
29  commit.add(toEntityUpdate(snapshot));
30  return true;
31  });
32  return commit;
33  }
34 
35  template <class ContainerT>
36  const typename ContainerT::EntityInstanceT*
37  findFirstInstance(const ContainerT& container)
38  {
39  const typename ContainerT::EntityInstanceT* instance = nullptr;
40  container.forEachInstance(
41  [&instance](const wm::EntityInstance& i)
42  {
43  instance = &i;
44  return false;
45  });
46  return instance;
47  }
48 
49  template <class ContainerT>
50  std::vector<MemoryID>
51  getEntityIDs(const ContainerT& container)
52  {
53  std::vector<armem::MemoryID> entityIDs;
54 
55  container.forEachEntity([&entityIDs](const auto& entity)
56  { entityIDs.push_back(entity.id()); });
57 
58  return entityIDs;
59  }
60 
61  std::string print(const wm::Memory& data, int maxDepth = -1, int depth = 0);
62  std::string print(const wm::CoreSegment& data, int maxDepth = -1, int depth = 0);
63  std::string print(const wm::ProviderSegment& data, int maxDepth = -1, int depth = 0);
64  std::string print(const wm::Entity& data, int maxDepth = -1, int depth = 0);
65  std::string print(const wm::EntitySnapshot& data, int maxDepth = -1, int depth = 0);
66  std::string print(const wm::EntityInstance& data, int maxDepth = -1, int depth = 0);
67 
68 } // namespace armarx::armem
armarx::armem::Commit
A bundle of updates to be sent to the memory.
Definition: Commit.h:84
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem
Definition: LegacyRobotStateMemoryAdapter.cpp:32
armarx::armem::server::wm::Entity
Definition: memory_definitions.h:27
armarx::armem::findFirstInstance
const ContainerT::EntityInstanceT * findFirstInstance(const ContainerT &container)
Definition: operations.h:37
armarx::armem::server::wm::Memory
Definition: memory_definitions.h:122
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::toEntityUpdate
EntityUpdate toEntityUpdate(const wm::EntitySnapshot &snapshot)
Definition: operations.cpp:24
armarx::armem::wm::EntitySnapshot
Client-side working memory entity snapshot.
Definition: memory_definitions.h:80
armarx::armem::server::wm::ProviderSegment
Definition: memory_definitions.h:52
armarx::armem::server::wm::CoreSegment
base::CoreSegmentBase
Definition: memory_definitions.h:75
armarx::armem::server::wm::EntitySnapshot
armem::wm::EntitySnapshot EntitySnapshot
Definition: forward_declarations.h:66
armarx::armem::Commit::add
EntityUpdate & add()
Definition: Commit.cpp:80
armarx::armem::getEntityIDs
std::vector< MemoryID > getEntityIDs(const ContainerT &container)
Definition: operations.h:51
armarx::armem::print
std::string print(const wm::Memory &data, int maxDepth=-1, int depth=0)
Definition: operations.cpp:72
armarx::armem::getAronData
std::vector< aron::data::DictPtr > getAronData(const wm::EntitySnapshot &snapshot)
Definition: operations.cpp:11
armarx::armem::toCommit
Commit toCommit(const ContainerT &container)
Definition: operations.h:23