1 #ifndef OSMIUM_BUILDER_BUILDER_HPP 2 #define OSMIUM_BUILDER_BUILDER_HPP 43 #include <type_traits> 74 m_item_offset(buffer.written()) {
109 }
else if (m_parent) {
123 uint32_t
size() const noexcept {
129 std::copy_n(reinterpret_cast<const unsigned char*>(item), item->
padded_size(), target);
137 template <
typename T>
140 return reinterpret_cast<T*
>(m_buffer.
reserve_space(
sizeof(T)));
154 std::copy_n(reinterpret_cast<const unsigned char*>(data), length, target);
165 return append(str, static_cast<osmium::memory::item_size_type>(std::strlen(str) + 1));
185 template <
typename TItem>
192 Builder(buffer, parent, sizeof(TItem)) {
193 new (&
item()) TItem();
197 return static_cast<TItem&
>(
item());
207 object().set_user_size(length + 1);
218 add_user(user, static_cast_with_assert<string_size_type>(std::strlen(user)));
227 add_user(user.data(), static_cast_with_assert<string_size_type>(user.size()));
236 #endif // OSMIUM_BUILDER_BUILDER_HPP osmium::memory::Item & item() const
Definition: builder.hpp:84
Builder * m_parent
Definition: builder.hpp:60
Builder(osmium::memory::Buffer &buffer, Builder *parent, osmium::memory::item_size_type size)
Definition: builder.hpp:71
bool is_aligned() const noexcept
Definition: buffer.hpp:260
osmium::memory::Buffer & buffer() noexcept
Return the buffer this builder is using.
Definition: builder.hpp:179
osmium::memory::item_size_type append_zero()
Definition: builder.hpp:173
ObjectBuilder(osmium::memory::Buffer &buffer, Builder *parent=nullptr)
Definition: builder.hpp:191
void add_user(const char *user, const string_size_type length)
Definition: builder.hpp:206
constexpr item_size_type align_bytes
Definition: item.hpp:53
item_size_type padded_size() const
Definition: item.hpp:151
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
Item & add_size(const item_size_type size) noexcept
Definition: item.hpp:112
T * reserve_space_for()
Definition: builder.hpp:138
unsigned char * data() const noexcept
Definition: buffer.hpp:224
osmium::memory::item_size_type append(const char *str)
Definition: builder.hpp:164
uint16_t string_size_type
Definition: types.hpp:59
unsigned char * reserve_space(const size_t size)
Definition: buffer.hpp:417
void add_user(const std::string &user)
Definition: builder.hpp:226
item_size_type byte_size() const noexcept
Definition: item.hpp:147
void add_user(TBuilder &builder, const TArgs &...args)
Definition: attr.hpp:584
osmium::memory::Buffer & m_buffer
Definition: builder.hpp:59
Definition: buffer.hpp:97
size_t m_item_offset
Definition: builder.hpp:61
Definition: builder.hpp:186
osmium::memory::item_size_type append(const char *data, const osmium::memory::item_size_type length)
Definition: builder.hpp:152
Builder(const Builder &)=delete
uint32_t size() const noexcept
Definition: builder.hpp:123
void add_size(uint32_t size)
Definition: builder.hpp:116
uint32_t item_size_type
Definition: item.hpp:50
void add_item(const osmium::memory::Item *item)
Definition: builder.hpp:127
node, way, relation, or area object
Definition: entity_bits.hpp:69
TItem & object() noexcept
Definition: builder.hpp:196
void add_user(const char *user)
Definition: builder.hpp:217
Definition: builder.hpp:57
Builder & operator=(const Builder &)=delete
void add_padding(bool self=false)
Definition: builder.hpp:103