@@ -166,13 +166,13 @@ void Prepare<sgl::prepared_geometry>(sgl::prepared_geometry &type, ArenaAllocato
166166}
167167
168168template <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
283283void 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
287287void 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
292292uint32_t Serde::TryGetBounds (const string_t &blob, Box2D<float > &bbox) {
0 commit comments