         mapnik::geometry::linear_ring<double> ring;         ring.reserve(end - start);         for (int j = start; j < end; ++j)         {             double x = record.read_double();             double y = record.read_double();             ring.emplace_back(x, y);         }         if (k == 0)         {             poly.push_back(std::move(ring));         }         else if (mapnik::util::is_clockwise(ring))         {             multi_poly.emplace_back(std::move(poly));             poly.clear();             poly.push_back(std::move(ring));         }         else         {             poly.push_back(std::move(ring));         }     }      if (multi_poly.size() > 0) // multi     {         multi_poly.emplace_back(std::move(poly));         geom = std::move(multi_poly);     }     else     {         geom = std::move(poly);     }     mapnik::geometry::correct(geom);     return geom; }  mapnik::geometry::geometry<double> shape_io::read_polygon_parts(shape_file::record_type & record, std::vector<std::pair<int,int>> const& parts) {     mapnik::geometry::geometry<double> geom; // default empty     int total_num_parts = record.read_ndr_integer();     mapnik::geometry::polygon<double> poly;     mapnik::geometry::multi_polygon<double> multi_poly;     