27 uint32_t i, n = (uint32_t)m_properties.size();
31 for (i = 0; i < n; i++)
34 out << m_properties[i].name.c_str();
37 isNull = !m_properties[i].value;
40 if (!isNull)
out << *m_properties[i].value;
43 out << m_properties[i].ID;
62 m_properties.resize(n);
63 for (i = 0; i < n; i++)
66 in >> m_properties[i].name;
72 m_properties[i].value.reset();
74 in >> m_properties[i].value;
77 in >> m_properties[i].ID;
100 m_properties.clear();
108 const char* propertyName,
const int64_t& hypothesis_ID)
const 110 std::vector<TPropertyValueIDTriplet>::const_iterator it;
111 for (it = m_properties.begin(); it != m_properties.end(); ++it)
113 it->ID == hypothesis_ID)
116 for (it = m_properties.begin(); it != m_properties.end(); ++it)
117 if (!
os::_strcmpi(propertyName, it->name.c_str()) && it->ID == 0)
128 const char* propertyName)
const 130 for (
const auto& m_propertie : m_properties)
132 if (!
os::_strcmpi(propertyName, m_propertie.name.c_str()))
133 return m_propertie.value;
144 const int64_t& hypothesis_ID)
148 for (
auto& m_propertie : m_properties)
150 if (m_propertie.ID == hypothesis_ID &&
155 m_propertie.value.reset(dynamic_cast<CSerializable*>(obj->clone()));
165 newPair.
name = std::string(propertyName);
167 newPair.
ID = hypothesis_ID;
168 m_properties.push_back(newPair);
171 printf(
"Exception while setting annotation '%s'", propertyName););
179 const int64_t& hypothesis_ID)
183 for (
auto& m_propertie : m_properties)
185 if (m_propertie.ID == hypothesis_ID &&
189 m_propertie.value = obj;
196 newPair.
name = std::string(propertyName);
198 newPair.
ID = hypothesis_ID;
199 m_properties.push_back(newPair);
202 printf(
"Exception while setting annotation '%s'", propertyName););
210 std::vector<std::string> ret;
212 for (
const auto& m_propertie : m_properties)
215 for (
auto& itS : ret)
217 if (itS == m_propertie.name)
223 if (isNew) ret.push_back(m_propertie.name);
233 const char* propertyName,
const int64_t& hypothesis_ID)
235 for (
auto it = m_properties.begin(); it != m_properties.end();)
237 it->ID == hypothesis_ID)
238 it = m_properties.erase(it);
248 for (
auto it = m_properties.begin(); it != m_properties.end();)
249 if (it->ID == hypothesis_ID)
250 it = m_properties.erase(it);
260 : m_properties(o.m_properties)
263 m_propertie.value.reset(
264 dynamic_cast<CSerializable*>(m_propertie.value->clone()));
273 if (
this == &o)
return *
this;
278 m_propertie.value.reset(
279 dynamic_cast<CSerializable*>(m_propertie.value->clone()));
void set(const char *propertyName, const CSerializable::Ptr &obj, const int64_t &hypothesis_ID)
Sets/change the value of the property (case insensitive) for the given hypothesis ID...
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
Classes related to the implementation of Hybrid Metric Topological (HMT) SLAM.
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
To be added to all CSerializable-classes implementation files.
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
#define MRPT_END_WITH_CLEAN_UP(stuff)
void removeAll(const int64_t &hypothesis_ID)
Remove all the properties for the given hypothesis.
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
CMHPropertiesValuesList()
Default constructor.
~CMHPropertiesValuesList() override
Destructor.
CSerializable::Ptr getAnyHypothesis(const char *propertyName) const
Returns the value of the property (case insensitive) for the first hypothesis ID found, or nullptr if it does not exist.
void clear()
Clears the list and frees all object's memory.
void remove(const char *propertyName, const int64_t &hypothesis_ID)
Remove a given property, if it exists.
Virtual base class for "archives": classes abstracting I/O streams.
mrpt::vision::TStereoCalibResults out
CMHPropertiesValuesList & operator=(const CMHPropertiesValuesList &o)
Copy operator.
Internal triplet for each property in utils::CMHPropertiesValuesList.
mrpt::serialization::CSerializable::Ptr value
The virtual base class which provides a unified interface for all persistent objects in MRPT...
An arbitrary list of "annotations", or named attributes, each being an instance of any CSerializable ...
void setMemoryReference(const char *propertyName, const CSerializable::Ptr &obj, const int64_t &hypothesis_ID)
Sets/change the value of the property (case insensitive) for the given hypothesis ID...
std::vector< std::string > getPropertyNames() const
Returns the name of all properties in the list.
CSerializable::Ptr get(const char *propertyName, const int64_t &hypothesis_ID) const
Returns the value of the property (case insensitive) for some given hypothesis ID, or a nullptr smart pointer if it does not exist.
void clear()
Clear the contents of this container.
std::vector< TPropertyValueIDTriplet > m_properties
int _strcmpi(const char *str1, const char *str2) noexcept
An OS-independent version of strcmpi.