1 #ifndef OSMIUM_OSM_OBJECT_HPP 2 #define OSMIUM_OSM_OBJECT_HPP 56 template <
typename TDerived,
typename T>
57 class OSMObjectBuilder;
65 template <
typename TDerived,
typename T>
172 m_deleted = !visible;
183 if (!std::strcmp(
"true", visible)) {
185 }
else if (!std::strcmp(
"false", visible)) {
188 throw std::invalid_argument(
"Unknown value for visible attribute (allowed is 'true' or 'false')");
228 m_changeset = changeset;
263 m_uid = uid < 0 ? 0 : static_cast<user_id_type>(uid);
293 m_timestamp = timestamp;
304 m_timestamp = detail::parse_timestamp(timestamp);
305 if (timestamp[20] !=
'\0') {
306 throw std::invalid_argument{
"can not parse timestamp"};
312 const char*
user() const noexcept {
313 return reinterpret_cast<const char*
>(data() + sizeof_object());
318 return osmium::detail::subitem_of_type<const TagList>(cbegin(), cend());
327 const char*
get_value_by_key(
const char* key,
const char* default_value =
nullptr) const noexcept {
328 return tags().get_value_by_key(key, default_value);
339 if (!std::strcmp(attr,
"id")) {
341 }
else if (!std::strcmp(attr,
"version")) {
343 }
else if (!std::strcmp(attr,
"changeset")) {
344 set_changeset(value);
345 }
else if (!std::strcmp(attr,
"timestamp")) {
346 set_timestamp(value);
347 }
else if (!std::strcmp(attr,
"uid")) {
349 }
else if (!std::strcmp(attr,
"visible")) {
360 return iterator(subitems_position());
388 template <
typename T>
398 template <
typename T>
403 template <
typename T>
406 template <
typename T>
409 template <
typename T>
414 template <
typename T>
419 template <
typename T>
424 template <
typename T>
429 template <
typename T>
434 template <
typename T>
446 return lhs.type() == rhs.type() &&
447 lhs.id() == rhs.id() &&
448 lhs.version() == rhs.version();
452 return ! (lhs == rhs);
470 return const_tie(lhs.type(), lhs.positive_id(), lhs.id() < 0, lhs.version(), lhs.timestamp()) <
471 const_tie(rhs.type(), rhs.positive_id(), rhs.id() < 0, rhs.version(), rhs.timestamp());
479 return ! (rhs < lhs);
483 return ! (lhs < rhs);
488 #endif // OSMIUM_OSM_OBJECT_HPP uint32_t object_version_type
Type for OSM object version number.
Definition: types.hpp:47
uint32_t user_id_type
Type for OSM user IDs.
Definition: types.hpp:49
Definition: osm_object_builder.hpp:376
object_id_type m_id
Definition: object.hpp:68
osmium::memory::ItemIteratorRange< T > subitems()
Definition: object.hpp:389
t_const_iterator< T > end() const
Definition: object.hpp:435
Definition: collection.hpp:47
unsigned char * user_position() noexcept
Definition: object.hpp:79
const TagList & tags() const
Get the list of tags for this object.
Definition: object.hpp:317
type
Definition: entity_bits.hpp:63
Definition: item_iterator.hpp:248
bool operator<=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:449
OSMObject & set_timestamp(const osmium::Timestamp ×tamp) noexcept
Definition: object.hpp:292
uint32_t item_size_type
Definition: item.hpp:59
OSMObject(osmium::memory::item_size_type size, osmium::item_type type)
Definition: object.hpp:101
Definition: item_iterator.hpp:132
string_size_type user_size() const noexcept
Definition: object.hpp:87
constexpr bool operator==(const Box &lhs, const Box &rhs) noexcept
Definition: box.hpp:221
item_type
Definition: item_type.hpp:43
osmium::memory::ItemIteratorRange< const T > subitems() const
Definition: object.hpp:399
uint16_t string_size_type
Definition: types.hpp:59
uint64_t unsigned_object_id_type
Type for OSM object (node, way, or relation) IDs where we only allow positive IDs.
Definition: types.hpp:46
size_t sizeof_object() const noexcept
Definition: object.hpp:75
std::tuple< const Ts &... > const_tie(const Ts &... args) noexcept
Definition: misc.hpp:46
OSMObject & set_id(object_id_type id) noexcept
Definition: object.hpp:132
OSMEntity is the abstract base class for the OSMObject and Changeset classes.
Definition: entity.hpp:64
OSMObject & set_changeset(const char *changeset)
Definition: object.hpp:237
constexpr std::size_t padded_length(std::size_t length) noexcept
Definition: item.hpp:64
const_iterator cbegin() const
Definition: object.hpp:367
osmium::Timestamp m_timestamp
Definition: object.hpp:71
object_version_type string_to_object_version(const char *input)
Definition: types_from_string.hpp:130
bool user_is_anonymous() const noexcept
Is this user anonymous?
Definition: object.hpp:277
iterator end()
Definition: object.hpp:363
OSMObject & set_visible(const char *visible)
Definition: object.hpp:182
OSMObject & set_uid_from_signed(signed_user_id_type uid) noexcept
Definition: object.hpp:262
bool operator<(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:441
object_id_type string_to_object_id(const char *input)
Definition: types_from_string.hpp:60
t_const_iterator< T > begin() const
Definition: object.hpp:430
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
changeset_id_type m_changeset
Definition: object.hpp:73
int32_t signed_user_id_type
Type for signed OSM user IDs.
Definition: types.hpp:50
Definition: timestamp.hpp:115
uint32_t changeset_id_type
Type for OSM changeset IDs.
Definition: types.hpp:48
int64_t object_id_type
Type for OSM object (node, way, or relation) IDs.
Definition: types.hpp:45
changeset_id_type string_to_changeset_id(const char *input)
Definition: types_from_string.hpp:144
const_iterator cend() const
Definition: object.hpp:371
user_id_type uid() const noexcept
Get user id of this object.
Definition: object.hpp:242
t_iterator< T > begin()
Definition: object.hpp:410
changeset_id_type changeset() const noexcept
Get changeset id of this object.
Definition: object.hpp:218
OSMObject & set_changeset(changeset_id_type changeset) noexcept
Definition: object.hpp:227
OSMObject & set_uid(const char *uid)
Definition: object.hpp:272
Definition: location.hpp:266
OSMObject & set_id(const char *id)
Definition: object.hpp:142
bool deleted() const noexcept
Is this object marked as deleted?
Definition: object.hpp:147
bool operator>=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:453
object_id_type id() const noexcept
Get ID of this object.
Definition: object.hpp:118
OSMObject & set_version(object_version_type version) noexcept
Definition: object.hpp:203
signed_user_id_type string_to_user_id(const char *input)
Definition: types_from_string.hpp:158
OSMObject & set_attribute(const char *attr, const char *value)
Definition: object.hpp:338
object_version_type version() const noexcept
Get version of this object.
Definition: object.hpp:194
bool operator>(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:445
t_const_iterator< T > cend() const
Definition: object.hpp:425
OSMObject & set_visible(bool visible) noexcept
Definition: object.hpp:171
uint32_t size() const noexcept
Definition: builder.hpp:141
bool visible() const noexcept
Is this object marked visible (ie not deleted)?
Definition: object.hpp:152
t_const_iterator< T > cbegin() const
Definition: object.hpp:420
unsigned char * subitems_position()
Definition: object.hpp:91
t_iterator< T > end()
Definition: object.hpp:415
user_id_type m_uid
Definition: object.hpp:72
unsigned_object_id_type positive_id() const noexcept
Get absolute value of the ID of this object.
Definition: object.hpp:123
OSMObject & set_deleted(bool deleted) noexcept
Definition: object.hpp:161
const unsigned char * subitems_position() const
Definition: object.hpp:95
void set_user_size(string_size_type size)
Definition: object.hpp:111
const_iterator end() const
Definition: object.hpp:379
const char * get_value_by_key(const char *key, const char *default_value=nullptr) const noexcept
Definition: object.hpp:327
const unsigned char * user_position() const noexcept
Definition: object.hpp:83
const char * user() const noexcept
Get user name for this object.
Definition: object.hpp:312
const_iterator begin() const
Definition: object.hpp:375
OSMObject & set_version(const char *version)
Definition: object.hpp:213
osmium::Timestamp timestamp() const noexcept
Get timestamp when this object last changed.
Definition: object.hpp:282
OSMObject & set_uid(user_id_type uid) noexcept
Definition: object.hpp:251
bool operator!=(const Changeset &lhs, const Changeset &rhs)
Definition: changeset.hpp:434
OSMObject & set_timestamp(const char *timestamp)
Definition: object.hpp:303
Definition: object.hpp:63
iterator begin()
Definition: object.hpp:359