RequestedObjects.cpp
Go to the documentation of this file.
1 #include "RequestedObjects.h"
2 
6 
8 
9 namespace armarx::objpose
10 {
12  {
13  }
14 
15  void
16  RequestedObjects::requestObjects(const std::vector<armarx::data::ObjectID>& objectIDs,
17  long relativeTimeOutMS)
18  {
19  requestObjects(::armarx::fromIce(objectIDs), relativeTimeOutMS);
20  }
21 
22  void
23  RequestedObjects::requestObjects(const std::vector<armarx::ObjectID>& objectIDs,
24  long relativeTimeOutMS)
25  {
26  requestObjects(objectIDs, IceUtil::Time::milliSeconds(relativeTimeOutMS));
27  }
28 
29  void
30  RequestedObjects::requestObjects(const std::vector<armarx::ObjectID>& objectIDs,
31  IceUtil::Time relativeTimeout)
32  {
33  ARMARX_INFO << VAROUT(relativeTimeout.toMilliSeconds());
34 
35  if (relativeTimeout.toMilliSeconds() < 0)
36  {
37  ARMARX_INFO << "Infite localization request for object ids :" << objectIDs;
38  for (const auto& id : objectIDs)
39  {
40  infiniteRequests.push_back(id);
41  }
42  }
43  else
44  {
45  ARMARX_INFO << "Localization request for " << relativeTimeout
46  << " for object ids :" << objectIDs;
47 
48  IceUtil::Time absoluteTimeout = TimeUtil::GetTime() + relativeTimeout;
49  Request req;
50  req.objectIDs = objectIDs;
51  currentRequests[absoluteTimeout].push_back(req);
52  }
53  }
54 
57  {
59  }
60 
63  {
64  // Remove requests with timeout.
65 
66  if (not currentRequests.empty())
67  {
68  ARMARX_INFO << currentRequests.begin()->first - now;
69  }
70 
71  while (not currentRequests.empty() and currentRequests.begin()->first <= now)
72  {
73  ARMARX_INFO << "No longer localizing objects: ";
74  for (const Request& request : currentRequests.begin()->second)
75  {
76  ARMARX_INFO << request.objectIDs;
77  }
78  currentRequests.erase(currentRequests.begin());
79  }
80 
81  std::set<armarx::ObjectID> current;
82  current.insert(infiniteRequests.begin(), infiniteRequests.end());
83 
84  // Process current requests.
85  for (const auto& [timeout, requests] : currentRequests)
86  {
87  ARMARX_CHECK_LESS(now, timeout);
88  for (const auto& request : requests)
89  {
90  current.insert(request.objectIDs.begin(), request.objectIDs.end());
91  }
92  }
93 
94  Update update;
95  update.current = {current.begin(), current.end()};
96 
97  // added = current - last
98  std::set_difference(update.current.begin(),
99  update.current.end(),
100  lastCurrent.begin(),
101  lastCurrent.end(),
102  std::inserter(update.added, update.added.begin()));
103  // removed = last - current
104  std::set_difference(lastCurrent.begin(),
105  lastCurrent.end(),
106  update.current.begin(),
107  update.current.end(),
108  std::inserter(update.removed, update.removed.begin()));
109 
110  this->lastCurrent = update.current;
111  return update;
112  }
113 
114 } // namespace armarx::objpose
armarx::objpose::RequestedObjects::requestObjects
void requestObjects(const std::vector< armarx::data::ObjectID > &objectIDs, long relativeTimeOutMS)
Definition: RequestedObjects.cpp:16
ice_conversions.h
ARMARX_CHECK_LESS
#define ARMARX_CHECK_LESS(lhs, rhs)
This macro evaluates whether lhs is less (<) than rhs and if it turns out to be false it will throw a...
Definition: ExpressionException.h:102
armarx::objpose::RequestedObjects::infiniteRequests
std::vector< armarx::ObjectID > infiniteRequests
Definition: RequestedObjects.h:50
armarx::objpose::RequestedObjects::currentRequests
std::map< IceUtil::Time, std::vector< Request > > currentRequests
Map from (absolute timeout) to (request)
Definition: RequestedObjects.h:49
armarx::objpose::RequestedObjects::Request::objectIDs
std::vector< armarx::ObjectID > objectIDs
Definition: RequestedObjects.h:21
armarx::objpose::RequestedObjects::updateRequestedObjects
Update updateRequestedObjects()
Definition: RequestedObjects.cpp:56
armarx::objpose::RequestedObjects::RequestedObjects
RequestedObjects()
Definition: RequestedObjects.cpp:11
armarx::objpose
Definition: objpose.h:6
armarx::objpose::RequestedObjects::Request
Definition: RequestedObjects.h:19
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
armarx::fromIce
void fromIce(const std::map< IceKeyT, IceValueT > &iceMap, boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
Definition: ice_conversions_boost_templates.h:27
armarx::TimeUtil::GetTime
static IceUtil::Time GetTime(TimeMode timeMode=TimeMode::VirtualTime)
Get the current time.
Definition: TimeUtil.cpp:42
ExpressionException.h
TimeUtil.h
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
VAROUT
#define VAROUT(x)
Definition: StringHelpers.h:198
armarx::objpose::RequestedObjects::Update
Definition: RequestedObjects.h:25
RequestedObjects.h
Logging.h