1 #ifndef OSMIUM_OSM_CRC_HPP
2 #define OSMIUM_OSM_CRC_HPP
58 # if defined(__GNUC__) || defined(__clang__)
59 return __builtin_bswap16(value);
61 return (value >> 8) | (value << 8);
66 # if defined(__GNUC__) || defined(__clang__)
67 return __builtin_bswap32(value);
69 return (value >> 24) |
70 ((value >> 8) & 0x0000FF00) |
71 ((value << 8) & 0x00FF0000) |
77 # if defined(__GNUC__) || defined(__clang__)
78 return __builtin_bswap64(value);
82 return (val1 << 32) | val2;
88 template <
typename TCRC>
104 m_crc.process_byte(value);
108 m_crc.process_byte(value);
112 #if __BYTE_ORDER == __LITTLE_ENDIAN
113 m_crc.process_bytes(&value,
sizeof(uint16_t));
116 m_crc.process_bytes(&v,
sizeof(uint16_t));
121 #if __BYTE_ORDER == __LITTLE_ENDIAN
122 m_crc.process_bytes(&value,
sizeof(uint32_t));
125 m_crc.process_bytes(&v,
sizeof(uint32_t));
130 #if __BYTE_ORDER == __LITTLE_ENDIAN
131 m_crc.process_bytes(&value,
sizeof(uint64_t));
134 m_crc.process_bytes(&v,
sizeof(uint64_t));
140 m_crc.process_byte(*str++);
164 for (
const NodeRef& node_ref : node_refs) {
170 for (
const Tag& tag : tags) {
192 update(
object.timestamp());
199 update(static_cast<const osmium::OSMObject&>(node));
204 update(static_cast<const osmium::OSMObject&>(way));
209 update(static_cast<const osmium::OSMObject&>(relation));
214 update(static_cast<const osmium::OSMObject&>(area));
215 for (
const auto& subitem : area) {
218 update(static_cast<const osmium::NodeRefList&>(subitem));
224 for (
const auto& comment : discussion) {
249 #endif // OSMIUM_OSM_CRC
WayNodeList & nodes()
Definition: way.hpp:76
void update(const osmium::Relation &relation)
Definition: crc.hpp:208
void update_int8(const uint8_t value)
Definition: crc.hpp:107
Definition: changeset.hpp:130
void update_int16(const uint16_t value)
Definition: crc.hpp:111
void update(const osmium::Way &way)
Definition: crc.hpp:203
num_comments_type num_comments() const noexcept
Get the number of comments in this changeset.
Definition: changeset.hpp:327
osmium::Box & bounds() noexcept
Definition: changeset.hpp:347
RelationMemberList & members()
Definition: relation.hpp:177
void update(const osmium::Changeset &changeset)
Definition: crc.hpp:232
void update_int64(const uint64_t value)
Definition: crc.hpp:129
user_id_type uid() const noexcept
Get user id.
Definition: changeset.hpp:221
const TagList & tags() const
Get the list of tags.
Definition: changeset.hpp:366
constexpr Location top_right() const noexcept
Definition: box.hpp:177
Definition: relation.hpp:165
void update(const Timestamp ×tamp)
Definition: crc.hpp:144
const char * user() const
Get user name.
Definition: changeset.hpp:361
changeset_id_type id() const noexcept
Get ID of this changeset.
Definition: changeset.hpp:195
Definition: relation.hpp:148
void update(const osmium::OSMObject &object)
Definition: crc.hpp:188
void update(const TagList &tags)
Definition: crc.hpp:169
TCRC m_crc
Definition: crc.hpp:91
const TCRC & operator()() const noexcept
Definition: crc.hpp:99
void update(const osmium::RelationMember &member)
Definition: crc.hpp:176
osmium::Timestamp closed_at() const noexcept
Definition: changeset.hpp:274
TCRC & operator()() noexcept
Definition: crc.hpp:95
constexpr osmium::object_id_type ref() const noexcept
Definition: node_ref.hpp:65
Definition: relation.hpp:54
Namespace for everything in the Osmium library.
Definition: assembler.hpp:73
num_changes_type num_changes() const noexcept
Get the number of changes in this changeset.
Definition: changeset.hpp:311
void update(const osmium::Area &area)
Definition: crc.hpp:213
void update(const osmium::Box &box)
Definition: crc.hpp:153
void update(const osmium::Location &location)
Definition: crc.hpp:148
Definition: timestamp.hpp:115
constexpr int32_t y() const noexcept
Definition: location.hpp:342
void update(const NodeRef &node_ref)
Definition: crc.hpp:158
item_type type() const noexcept
Definition: relation.hpp:126
uint32_t byte_swap_32(uint32_t value) noexcept
Definition: crc.hpp:65
void update_bool(const bool value)
Definition: crc.hpp:103
osmium::Timestamp created_at() const noexcept
Get timestamp when this changeset was created.
Definition: changeset.hpp:264
Definition: location.hpp:256
osmium::Location & location() noexcept
Definition: node_ref.hpp:79
object_id_type ref() const noexcept
Definition: relation.hpp:108
osmium::Location location() const noexcept
Definition: node.hpp:61
const char * role() const noexcept
Definition: relation.hpp:134
uint64_t byte_swap_64(uint64_t value) noexcept
Definition: crc.hpp:76
constexpr Location bottom_left() const noexcept
Definition: box.hpp:163
ChangesetDiscussion & discussion()
Definition: changeset.hpp:420
Definition: node_ref_list.hpp:51
An OSM Changeset, a group of changes made by a single user over a short period of time...
Definition: changeset.hpp:156
void update(const osmium::Node &node)
Definition: crc.hpp:198
void update_int32(const uint32_t value)
Definition: crc.hpp:120
constexpr int32_t x() const noexcept
Definition: location.hpp:338
void update(const osmium::ChangesetDiscussion &discussion)
Definition: crc.hpp:223
void update(const osmium::RelationMemberList &members)
Definition: crc.hpp:182
Definition: node_ref.hpp:50
void update_string(const char *str)
Definition: crc.hpp:138
uint16_t byte_swap_16(uint16_t value) noexcept
Definition: crc.hpp:57
void update(const NodeRefList &node_refs)
Definition: crc.hpp:163
Definition: object.hpp:58