Skip to content

Commit bd169da

Browse files
committed
actually prepare deserialization
1 parent 3868eed commit bd169da

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/spatial/geometry/geometry_serialization.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,13 @@ void Prepare<sgl::prepared_geometry>(sgl::prepared_geometry &type, ArenaAllocato
166166
}
167167

168168
template <class GEOM_TYPE = sgl::geometry>
169-
static void DeserializeInternal(sgl::geometry &result, ArenaAllocator &arena, const char *buffer, size_t buffer_size) {
169+
static void DeserializeInternal(GEOM_TYPE &result, ArenaAllocator &arena, const char *buffer, size_t buffer_size) {
170170
BinaryReader reader(buffer, buffer_size);
171171

172172
uint32_t stack[32];
173173
uint32_t depth = 0;
174174

175-
auto geom = &result;
175+
sgl::geometry *geom = &result;
176176

177177
while (true) {
178178
const auto le = reader.Read<uint8_t>() == 1;
@@ -213,8 +213,8 @@ static void DeserializeInternal(sgl::geometry &result, ArenaAllocator &arena, co
213213
break;
214214
}
215215
for (uint32_t i = 0; i < ring_count; i++) {
216-
auto ring_mem = arena.AllocateAligned(sizeof(sgl::geometry));
217-
const auto ring = new (ring_mem) sgl::geometry(sgl::geometry_type::LINESTRING, has_z, has_m);
216+
auto ring_mem = arena.AllocateAligned(sizeof(GEOM_TYPE));
217+
const auto ring = new (ring_mem) GEOM_TYPE(sgl::geometry_type::LINESTRING, has_z, has_m);
218218

219219
const auto vert_count = reader.Read<uint32_t>();
220220
const auto vert_array = reader.Reserve(vert_count * ring->get_vertex_width());
@@ -241,8 +241,8 @@ static void DeserializeInternal(sgl::geometry &result, ArenaAllocator &arena, co
241241
stack[depth++] = part_count;
242242

243243
// Make a new part
244-
const auto part_mem = arena.AllocateAligned(sizeof(sgl::geometry));
245-
const auto part_ptr = new (part_mem) sgl::geometry(sgl::geometry_type::INVALID, has_z, has_m);
244+
const auto part_mem = arena.AllocateAligned(sizeof(GEOM_TYPE));
245+
const auto part_ptr = new (part_mem) GEOM_TYPE(sgl::geometry_type::INVALID, has_z, has_m);
246246

247247
geom->append_part(part_ptr);
248248
geom = part_ptr;
@@ -265,8 +265,8 @@ static void DeserializeInternal(sgl::geometry &result, ArenaAllocator &arena, co
265265

266266
stack[depth - 1]--;
267267
if (stack[depth - 1] > 0) {
268-
const auto part_mem = arena.AllocateAligned(sizeof(sgl::geometry));
269-
const auto part_ptr = new (part_mem) sgl::geometry(sgl::geometry_type::INVALID, has_z, has_m);
268+
const auto part_mem = arena.AllocateAligned(sizeof(GEOM_TYPE));
269+
const auto part_ptr = new (part_mem) GEOM_TYPE(sgl::geometry_type::INVALID, has_z, has_m);
270270

271271
parent->append_part(part_ptr);
272272

@@ -281,12 +281,12 @@ static void DeserializeInternal(sgl::geometry &result, ArenaAllocator &arena, co
281281
}
282282

283283
void Serde::Deserialize(sgl::geometry &result, ArenaAllocator &arena, const char *buffer, size_t buffer_size) {
284-
DeserializeInternal(result, arena, buffer, buffer_size);
284+
DeserializeInternal<sgl::geometry>(result, arena, buffer, buffer_size);
285285
}
286286

287287
void Serde::DeserializePrepared(sgl::prepared_geometry &result, ArenaAllocator &arena, const char *buffer,
288288
size_t buffer_size) {
289-
DeserializeInternal(result, arena, buffer, buffer_size);
289+
DeserializeInternal<sgl::prepared_geometry>(result, arena, buffer, buffer_size);
290290
}
291291

292292
uint32_t Serde::TryGetBounds(const string_t &blob, Box2D<float> &bbox) {

0 commit comments

Comments
 (0)