inline bool encode_geometry(mapnik::geometry::polygon<std::int64_t> const& poly,
                            vector_tile::Tile_Feature & current_feature,
                            int32_t & start_x,
                            int32_t & start_y)
{
    if (!encode_geometry(poly.exterior_ring, current_feature, start_x, start_y))
    {
        return false;
    }
    for (auto const& ring : poly.interior_rings)
    {
        encode_geometry(ring, current_feature, start_x, start_y);
    }
    return true;
}
 inline unsigned add_path(T const& path)
 {
     if (current_feature_)
     {
         return encode_geometry(path,
                                *current_feature_,
                                x_,
                                y_);
     }
     return 0;
 }
 inline unsigned add_path(T & path, unsigned tolerance, MAPNIK_GEOM_TYPE type)
 {
     if (current_feature_)
     {
         return encode_geometry(path,
                                static_cast<tile_GeomType>(type),
                                *current_feature_,
                                x_,
                                y_,
                                tolerance,
                                path_multiplier_);
     }
     return 0;
 }
inline bool encode_geometry(mapnik::geometry::multi_polygon<std::int64_t> const& geom,
                            vector_tile::Tile_Feature & current_feature,
                            int32_t & start_x,
                            int32_t & start_y)
{
    bool success = false;
    for (auto const& poly : geom)
    {
        if (encode_geometry(poly, current_feature, start_x, start_y))
        {
            success = true;
        }
    }
    return success;
}