19 object_handle(std::unique_ptr<T> obj) :
20 object(obj.release()),
21 deleter([](
void* ptr) { std::default_delete<T>()(
static_cast<T*>(ptr)); })
31 std::function<
void(
void*)> deleter;
36 ObjectContainer() =
default;
46 bool empty()
const {
return m_container.empty(); }
48 std::size_t size()
const {
return m_container.size(); }
50 void clear() { m_container.clear(); }
55 m_container.erase(std::type_index(
typeid(T)));
62 auto found = m_container.find(std::type_index(
typeid(T)));
63 if (found != m_container.end()) {
64 result =
static_cast<T*>(found->second.object);
72 const T* result =
nullptr;
73 auto found = m_container.find(std::type_index(
typeid(T)));
74 if (found != m_container.end()) {
75 result =
static_cast<
const T*>(found->second.object);
81 bool insert(std::unique_ptr<T> obj)
83 static_assert(std::is_object<T>() && !std::is_const<T>(),
84 "Only non-const objects are supported by ObjectContainer");
85 return m_container.emplace(std::type_index(
typeid(T)), std::move(obj)).second;
91 static_assert(std::is_default_constructible<T>(),
92 "Only default constructible types are accessible through ObjectContainer::get");
93 T* result = find<T>();
95 std::unique_ptr<T> obj {
new T() };
97 if (!insert(std::move(obj)))
105 container_type m_container;
void update_pdr(std::size_t packet_size, double beta=0.5)
bool update_position_vector(const LongPositionVector &pv)
bool has_position_vector() const
const LongPositionVector & get_position_vector() const
bool is_neighbour() const
bool set_position_vector(const LongPositionVector &pv)
void set_neighbour(bool flag, Clock::duration expiry)
void set_neighbour(bool flag)