ed
world_model.h
Go to the documentation of this file.
1 #ifndef ED_WORLD_MODEL_H_
2 #define ED_WORLD_MODEL_H_
3 
4 #include "ed/types.h"
5 #include "ed/time.h"
6 
7 #include <geolib/datatypes.h>
8 
9 #include <map>
10 #include <queue>
11 #include <vector>
12 
13 namespace ed
14 {
15 
16 class PropertyKeyDB;
17 class PropertyKeyDBEntry;
18 
19 // ----------------------------------------------------------------------------------------------------
20 
22 {
23 
24 public:
25 
26  class EntityIterator : public std::iterator<std::forward_iterator_tag, EntityConstPtr>
27  {
28 
29  public:
30 
32  {
33  // Skip possible zero-entities (deleted entities) at the beginning
34  while(it_ != it_end_ && !(*it_))
35  ++it_;
36  }
37 
38  EntityIterator(const EntityIterator& it) : it_(it.it_) {}
39 
41 
43  {
44  // Increase iterator and skip possible zero-entities (deleted entities)
45  do { ++it_; if (it_ == it_end_) break; } while (!(*it_));
46  return *this;
47  }
48 
49  EntityIterator operator++(int) { EntityIterator tmp(*this); operator++(); return tmp; }
50 
51  bool operator==(const EntityIterator& rhs) { return it_ == rhs.it_; }
52 
53  bool operator!=(const EntityIterator& rhs) { return it_ != rhs.it_; }
54 
55  const EntityConstPtr& operator*() { return *it_; }
56 
57  private:
58 
61 
62  };
63 
65 
66  WorldModel(const PropertyKeyDB* prop_key_db = nullptr);
67 
68  inline const_iterator begin() const { return const_iterator(entities_); }
69 
70  inline const_iterator end() const { return const_iterator(entities_.end()); }
71 
72  void setEntity(const UUID& id, const EntityConstPtr& e);
73 
74  void removeEntity(const UUID& id);
75 
77  {
78  Idx idx;
79  if (findEntityIdx(id, idx))
80  return entities_[idx];
81  else
82  return EntityConstPtr();
83  }
84 
85  size_t numEntities() const { return entity_map_.size(); }
86 
87  void update(const UpdateRequest& req);
88 
89  void setRelation(Idx parent, Idx child, const RelationConstPtr& r);
90 
91  bool findEntityIdx(const UUID& id, Idx& idx) const;
92 
93  bool calculateTransform(const UUID& source, const UUID& target, const Time& time, geo::Pose3D& tf) const;
94 
96  const std::vector<EntityConstPtr>& entities() const { return entities_; }
97 
100 
101  unsigned long revision() const { return revision_; }
102 
104 
105  [[deprecated("Use entity_visual_revisions(), entity_collision_revisions() or entity_volumes_revisions() instead.")]]
107 
109 
111 
113 
114  const PropertyKeyDBEntry* getPropertyInfo(const std::string& name) const;
115 
116 private:
117 
118  unsigned long revision_;
119 
121 
123 
125 
127 
129 
131 
133 
135 
137 
138  Idx addRelation(const RelationConstPtr& r);
139 
140  EntityPtr getOrAddEntity(const UUID& id, std::map<UUID, EntityPtr>& new_entities);
141 
142  Idx addNewEntity(const EntityConstPtr& e);
143 
144 
145 };
146 
147 }
148 
149 #endif
datatypes.h
ed::WorldModel::getEntity
EntityConstPtr getEntity(const ed::UUID &id) const
Definition: world_model.h:76
ed::WorldModel::entity_volumes_revisions_
std::vector< unsigned long > entity_volumes_revisions_
Definition: world_model.h:130
ed::WorldModel
Definition: world_model.h:21
ed::WorldModel::EntityIterator::EntityIterator
EntityIterator(const std::vector< EntityConstPtr > &v)
Definition: world_model.h:31
ed::UpdateRequest
Definition: update_request.h:24
ed::WorldModel::WorldModel
WorldModel(const PropertyKeyDB *prop_key_db=nullptr)
Definition: world_model.cpp:17
std::string
ed::WorldModel::revision_
unsigned long revision_
Definition: world_model.h:118
ed::WorldModel::entity_volumes_revisions
const std::vector< unsigned long > & entity_volumes_revisions() const
Definition: world_model.h:112
types.h
ed::WorldModel::EntityIterator::operator*
const EntityConstPtr & operator*()
Definition: world_model.h:55
ed::WorldModel::entity_revisions_
std::vector< unsigned long > entity_revisions_
Definition: world_model.h:124
ed::WorldModel::addRelation
Idx addRelation(const RelationConstPtr &r)
Definition: world_model.cpp:364
ed::WorldModel::entities_
std::vector< EntityConstPtr > entities_
Definition: world_model.h:122
vector
ed::WorldModel::property_info_db_
const PropertyKeyDB * property_info_db_
Definition: world_model.h:136
std::iterator
ed::WorldModel::entity_visual_revisions_
std::vector< unsigned long > entity_visual_revisions_
Definition: world_model.h:126
geo::Transform3T
ed::Time
Definition: time.h:9
ed::WorldModel::getPropertyInfo
const PropertyKeyDBEntry * getPropertyInfo(const std::string &name) const
Definition: world_model.cpp:488
queue
ed::WorldModel::update
void update(const UpdateRequest &req)
Definition: world_model.cpp:23
ed::WorldModel::begin
const_iterator begin() const
Definition: world_model.h:68
ed::WorldModel::const_iterator
EntityIterator const_iterator
Definition: world_model.h:64
ed::WorldModel::EntityIterator::it_end_
std::vector< EntityConstPtr >::const_iterator it_end_
Definition: world_model.h:60
ed::EntityConstPtr
shared_ptr< const Entity > EntityConstPtr
Definition: types.h:37
ed::WorldModel::end
const_iterator end() const
Definition: world_model.h:70
ed::WorldModel::removeEntity
void removeEntity(const UUID &id)
Definition: world_model.cpp:388
ed::WorldModel::entity_collision_revisions_
std::vector< unsigned long > entity_collision_revisions_
Definition: world_model.h:128
ed::WorldModel::setRelation
void setRelation(Idx parent, Idx child, const RelationConstPtr &r)
Definition: world_model.cpp:325
ed::WorldModel::EntityIterator::EntityIterator
EntityIterator(const std::vector< EntityConstPtr >::const_iterator &it)
Definition: world_model.h:40
ed::WorldModel::entity_map_
std::map< UUID, Idx > entity_map_
Definition: world_model.h:120
ed::WorldModel::relations
const std::vector< RelationConstPtr > & relations() const
Warning: the return vector may return null-pointers.
Definition: world_model.h:99
ed::WorldModel::getOrAddEntity
EntityPtr getOrAddEntity(const UUID &id, std::map< UUID, EntityPtr > &new_entities)
Definition: world_model.cpp:405
time.h
ed::WorldModel::entity_revisions
const std::vector< unsigned long > & entity_revisions() const
Definition: world_model.h:103
ed::WorldModel::calculateTransform
bool calculateTransform(const UUID &source, const UUID &target, const Time &time, geo::Pose3D &tf) const
Definition: world_model.cpp:246
ed::WorldModel::EntityIterator::EntityIterator
EntityIterator(const EntityIterator &it)
Definition: world_model.h:38
ed::WorldModel::entity_empty_spots_
std::queue< Idx > entity_empty_spots_
Definition: world_model.h:132
ed::PropertyKeyDBEntry
Definition: property_key_db.h:13
ed::PropertyKeyDB
Definition: property_key_db.h:28
ed::UUID
Definition: uuid.h:10
map
ed::WorldModel::EntityIterator
Definition: world_model.h:26
ed::WorldModel::EntityIterator::operator++
EntityIterator & operator++()
Definition: world_model.h:42
ed::WorldModel::relations_
std::vector< RelationConstPtr > relations_
Definition: world_model.h:134
ed::WorldModel::numEntities
size_t numEntities() const
Definition: world_model.h:85
ed::WorldModel::EntityIterator::operator!=
bool operator!=(const EntityIterator &rhs)
Definition: world_model.h:53
ed::WorldModel::entity_collision_revisions
const std::vector< unsigned long > & entity_collision_revisions() const
Definition: world_model.h:110
ed::WorldModel::EntityIterator::operator++
EntityIterator operator++(int)
Definition: world_model.h:49
ed::WorldModel::EntityIterator::operator==
bool operator==(const EntityIterator &rhs)
Definition: world_model.h:51
ed::WorldModel::entities
const std::vector< EntityConstPtr > & entities() const
Warning: the return vector may return null-pointers.
Definition: world_model.h:96
ed::WorldModel::findEntityIdx
bool findEntityIdx(const UUID &id, Idx &idx) const
Definition: world_model.cpp:444
ed::WorldModel::entity_shape_revisions
const std::vector< unsigned long > & entity_shape_revisions() const
Definition: world_model.h:106
ed
Definition: convex_hull.h:8
ed::RelationConstPtr
shared_ptr< const Relation > RelationConstPtr
Definition: types.h:73
std::vector::end
T end(T... args)
ed::WorldModel::setEntity
void setEntity(const UUID &id, const EntityConstPtr &e)
Definition: world_model.cpp:373
ed::WorldModel::EntityIterator::it_
std::vector< EntityConstPtr >::const_iterator it_
Definition: world_model.h:59
ed::WorldModel::entity_visual_revisions
const std::vector< unsigned long > & entity_visual_revisions() const
Definition: world_model.h:108
ed::WorldModel::revision
unsigned long revision() const
Definition: world_model.h:101
ed::Idx
uint64_t Idx
Definition: types.h:21
ed::EntityPtr
shared_ptr< Entity > EntityPtr
Definition: types.h:35
ed::WorldModel::addNewEntity
Idx addNewEntity(const EntityConstPtr &e)
Definition: world_model.cpp:463