@@ -209,37 +209,48 @@ class make_ewkb_visitor_t
209209
210210 std::string operator ()(geom::point_t const &geom) const
211211 {
212+ constexpr std::size_t SIZE_POINT_HEADER_WITH_SRID = 1UL + 4UL + 4UL ;
213+ constexpr std::size_t SIZE_POINT =
214+ SIZE_POINT_HEADER_WITH_SRID + SIZE_COORDINATE_PAIR;
215+
212216 std::string data;
213217
214218 if (m_ensure_multi) {
215219 write_header (&data, wkb_multi_point, m_srid);
216220 write_length (&data, 1 );
217221 write_point (&data, geom);
218222 } else {
219- // 9 byte header plus one set of coordinates
220- constexpr std::size_t SIZE = 9 + 2 * 8 ;
221- data.reserve (SIZE);
223+ data.reserve (SIZE_POINT);
222224 write_point (&data, geom, m_srid);
223- assert (data.size () == SIZE );
225+ assert (data.size () == SIZE_POINT );
224226 }
225227
226228 return data;
227229 }
228230
229231 std::string operator ()(geom::linestring_t const &geom) const
230232 {
233+ constexpr std::size_t SIZE_HEADER_WITH_COUNT = 1UL + 4UL + 4UL ;
234+ constexpr std::size_t SIZE_HEADER_WITH_COUNT_AND_SRID =
235+ SIZE_HEADER_WITH_COUNT + 4UL ;
236+
231237 std::string data;
232238
239+ std::size_t const coords_size = geom.size () * SIZE_COORDINATE_PAIR;
240+
233241 if (m_ensure_multi) {
234- // Two 13 bytes headers plus n sets of coordinates
235- data. reserve ( 2UL * 13UL + geom. size () * ( 2UL * 8UL ) );
242+ data. reserve (SIZE_HEADER_WITH_COUNT_AND_SRID +
243+ SIZE_HEADER_WITH_COUNT + coords_size );
236244 write_header (&data, wkb_multi_line, m_srid);
237245 write_length (&data, 1 );
238246 write_linestring (&data, geom);
247+ assert (data.size () == SIZE_HEADER_WITH_COUNT_AND_SRID +
248+ SIZE_HEADER_WITH_COUNT + coords_size);
239249 } else {
240- // 13 byte header plus n sets of coordinates
241- data.reserve (13UL + geom.size () * (2UL * 8UL ));
250+ data.reserve (SIZE_HEADER_WITH_COUNT_AND_SRID + coords_size);
242251 write_linestring (&data, geom, m_srid);
252+ assert (data.size () ==
253+ SIZE_HEADER_WITH_COUNT_AND_SRID + coords_size);
243254 }
244255
245256 return data;
@@ -289,6 +300,8 @@ class make_ewkb_visitor_t
289300 }
290301
291302private:
303+ static constexpr std::size_t SIZE_COORDINATE_PAIR = 2UL * sizeof (double );
304+
292305 uint32_t m_srid;
293306 bool m_ensure_multi;
294307
0 commit comments