Skip to content

Commit

Permalink
move datasource::geometry_t into separate header and rename -> dataso…
Browse files Browse the repository at this point in the history
…urce_geometry_t to avoid cyclic dependencies issue

to_ds_type - return actual datasource_geometry_t (remove optional)
update across datasources
experssions - revert to using
  • Loading branch information
artemp committed Mar 24, 2015
1 parent 163da95 commit 1cf0a89
Show file tree
Hide file tree
Showing 39 changed files with 159 additions and 131 deletions.
10 changes: 5 additions & 5 deletions bindings/python/mapnik_datasource.cpp
Expand Up @@ -177,11 +177,11 @@ void export_datasource()
.value("Raster",mapnik::datasource::Raster)
;

enum_<mapnik::datasource::geometry_t>("DataGeometryType")
.value("Point",mapnik::datasource::Point)
.value("LineString",mapnik::datasource::LineString)
.value("Polygon",mapnik::datasource::Polygon)
.value("Collection",mapnik::datasource::Collection)
enum_<mapnik::datasource_geometry_t>("DataGeometryType")
.value("Point",mapnik::datasource_geometry_t::Point)
.value("LineString",mapnik::datasource_geometry_t::LineString)
.value("Polygon",mapnik::datasource_geometry_t::Polygon)
.value("Collection",mapnik::datasource_geometry_t::Collection)
;

class_<datasource,std::shared_ptr<datasource>,
Expand Down
10 changes: 5 additions & 5 deletions bindings/python/mapnik_python.cpp
Expand Up @@ -196,7 +196,7 @@ struct agg_renderer_visitor_1
{
agg_renderer_visitor_1(mapnik::Map const& m, double scale_factor, unsigned offset_x, unsigned offset_y)
: m_(m), scale_factor_(scale_factor), offset_x_(offset_x), offset_y_(offset_y) {}

template <typename T>
void operator() (T & pixmap)
{
Expand All @@ -222,7 +222,7 @@ struct agg_renderer_visitor_2
agg_renderer_visitor_2(mapnik::Map const &m, std::shared_ptr<mapnik::label_collision_detector4> detector,
double scale_factor, unsigned offset_x, unsigned offset_y)
: m_(m), detector_(detector), scale_factor_(scale_factor), offset_x_(offset_x), offset_y_(offset_y) {}

template <typename T>
void operator() (T & pixmap)
{
Expand All @@ -249,7 +249,7 @@ struct agg_renderer_visitor_3
agg_renderer_visitor_3(mapnik::Map const& m, mapnik::request const& req, mapnik::attributes const& vars,
double scale_factor, unsigned offset_x, unsigned offset_y)
: m_(m), req_(req), vars_(vars), scale_factor_(scale_factor), offset_x_(offset_x), offset_y_(offset_y) {}

template <typename T>
void operator() (T & pixmap)
{
Expand Down Expand Up @@ -279,7 +279,7 @@ struct agg_renderer_visitor_4
mapnik::layer const& layer, std::set<std::string>& names)
: m_(m), scale_factor_(scale_factor), offset_x_(offset_x), offset_y_(offset_y),
layer_(layer), names_(names) {}

template <typename T>
void operator() (T & pixmap)
{
Expand Down Expand Up @@ -1056,7 +1056,7 @@ BOOST_PYTHON_MODULE(_mapnik)
python_optional<mapnik::color>();
python_optional<mapnik::box2d<double> >();
python_optional<mapnik::composite_mode_e>();
python_optional<mapnik::datasource::geometry_t>();
python_optional<mapnik::datasource_geometry_t>();
python_optional<std::string>();
python_optional<unsigned>();
python_optional<double>();
Expand Down
4 changes: 2 additions & 2 deletions include/mapnik/attribute.hpp
Expand Up @@ -26,7 +26,7 @@
// mapnik
#include <mapnik/value_types.hpp>
#include <mapnik/value.hpp>
#include <mapnik/geometry_type.hpp>
#include <mapnik/util/geometry_to_ds_type.hpp>
// stl
#include <string>
#include <unordered_map>
Expand All @@ -53,7 +53,7 @@ struct geometry_type_attribute
template <typename V, typename F>
V value(F const& f) const
{
return static_cast<mapnik::value_integer>(new_geometry::geometry_type(f.get_geometry()));
return static_cast<mapnik::value_integer>(util::to_ds_type(f.get_geometry()));
}
};

Expand Down
11 changes: 2 additions & 9 deletions include/mapnik/datasource.hpp
Expand Up @@ -32,6 +32,7 @@
#include <mapnik/feature_layer_desc.hpp>
#include <mapnik/util/noncopyable.hpp>
#include <mapnik/feature_style_processor_context.hpp>
#include <mapnik/datasource_geometry_type.hpp>

// stl
#include <map>
Expand Down Expand Up @@ -68,14 +69,6 @@ class MAPNIK_DECL datasource : private util::noncopyable
Raster
};

enum geometry_t : std::uint8_t {
Unknown = 0,
Point = 1,
LineString = 2,
Polygon = 3,
Collection = 4
};

datasource (parameters const& params)
: params_(params) {}

Expand Down Expand Up @@ -112,7 +105,7 @@ class MAPNIK_DECL datasource : private util::noncopyable
// default implementation without context use features method
return features(q);
}
virtual boost::optional<geometry_t> get_geometry_type() const = 0;
virtual boost::optional<datasource_geometry_t> get_geometry_type() const = 0;
virtual featureset_ptr features(query const& q) const = 0;
virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const = 0;
virtual box2d<double> envelope() const = 0;
Expand Down
39 changes: 39 additions & 0 deletions include/mapnik/datasource_geometry_type.hpp
@@ -0,0 +1,39 @@
/*****************************************************************************
*
* This file is part of Mapnik (c++ mapping toolkit)
*
* Copyright (C) 2015 Artem Pavlenko
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*****************************************************************************/

#ifndef MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP
#define MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP

namespace mapnik {

enum datasource_geometry_t : std::uint8_t {
Unknown = 0,
Point = 1,
LineString = 2,
Polygon = 3,
Collection = 4
};

}


#endif // MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP
14 changes: 5 additions & 9 deletions include/mapnik/expression_grammar.hpp
Expand Up @@ -29,7 +29,7 @@
#include <mapnik/unicode.hpp>
#include <mapnik/expression_node.hpp>
#include <mapnik/function_call.hpp>
#include <mapnik/geometry_types.hpp>
//#include <mapnik/datasource.hpp>
// boost
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
Expand Down Expand Up @@ -114,14 +114,10 @@ struct geometry_types : qi::symbols<char, mapnik::value_integer>
geometry_types()
{
add
("unknown", static_cast<mapnik::value_integer>(new_geometry::geometry_types::Unknown))
("point", static_cast<mapnik::value_integer>(new_geometry::geometry_types::Point))
("linestring", static_cast<mapnik::value_integer>(new_geometry::geometry_types::LineString))
("polygon",static_cast<mapnik::value_integer>(new_geometry::geometry_types::Polygon))
("multipoint",static_cast<mapnik::value_integer>(new_geometry::geometry_types::MultiPoint))
("multilinestring",static_cast<mapnik::value_integer>(new_geometry::geometry_types::MultiLineString))
("multipolygon",static_cast<mapnik::value_integer>(new_geometry::geometry_types::MultiPolygon))
("geometrycollection",static_cast<mapnik::value_integer>(new_geometry::geometry_types::GeometryCollection))
("point", 1)
("linestring", 2)
("polygon",3)
("collection",4)
;
}
};
Expand Down
2 changes: 1 addition & 1 deletion include/mapnik/memory_datasource.hpp
Expand Up @@ -43,7 +43,7 @@ class MAPNIK_DECL memory_datasource : public datasource
virtual featureset_ptr features(query const& q) const;
virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
virtual box2d<double> envelope() const;
virtual boost::optional<geometry_t> get_geometry_type() const;
virtual boost::optional<datasource_geometry_t> get_geometry_type() const;
virtual layer_descriptor get_descriptor() const;
//
void push(feature_ptr feature);
Expand Down
44 changes: 22 additions & 22 deletions include/mapnik/util/geometry_to_ds_type.hpp
Expand Up @@ -20,13 +20,13 @@
*
*****************************************************************************/

#ifndef MAPNIK_GEOMETRY_TO_DS_TYPE
#define MAPNIK_GEOMETRY_TO_DS_TYPE
#ifndef MAPNIK_GEOMETRY_TO_DS_TYPE_HPP
#define MAPNIK_GEOMETRY_TO_DS_TYPE_HPP

// mapnik
#include <mapnik/global.hpp>
#include <mapnik/geometry_impl.hpp>
#include <mapnik/datasource.hpp>
#include <mapnik/datasource_geometry_type.hpp>
#include <mapnik/util/variant.hpp>
// boost
#include <boost/optional.hpp>
Expand All @@ -37,54 +37,54 @@ namespace detail {

struct datasource_geometry_type
{
mapnik::datasource::geometry_t operator () (mapnik::new_geometry::geometry_empty const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::geometry_empty const&) const
{
return mapnik::datasource::Unknown;
return mapnik::datasource_geometry_t::Unknown;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::point const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::point const&) const
{
return mapnik::datasource::Point;
return mapnik::datasource_geometry_t::Point;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::line_string const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::line_string const&) const
{
return mapnik::datasource::LineString;
return mapnik::datasource_geometry_t::LineString;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::polygon const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::polygon const&) const
{
return mapnik::datasource::Polygon;
return mapnik::datasource_geometry_t::Polygon;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::multi_point const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::multi_point const&) const
{
return mapnik::datasource::Point;
return mapnik::datasource_geometry_t::Point;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::multi_line_string const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::multi_line_string const&) const
{
return mapnik::datasource::LineString;
return mapnik::datasource_geometry_t::LineString;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::multi_polygon const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::multi_polygon const&) const
{
return mapnik::datasource::Polygon;
return mapnik::datasource_geometry_t::Polygon;
}

mapnik::datasource::geometry_t operator () (mapnik::new_geometry::geometry_collection const&) const
mapnik::datasource_geometry_t operator () (mapnik::new_geometry::geometry_collection const&) const
{
return mapnik::datasource::Collection;
return mapnik::datasource_geometry_t::Collection;
}
};
} // detail

static void to_ds_type(mapnik::new_geometry::geometry const& geom, boost::optional<mapnik::datasource::geometry_t> & result)
static inline mapnik::datasource_geometry_t to_ds_type(mapnik::new_geometry::geometry const& geom)
{
result = util::apply_visitor(detail::datasource_geometry_type(), geom);
return util::apply_visitor(detail::datasource_geometry_type(), geom);
}

}}


#endif // MAPNIK_GEOMETRY_TO_DS_TYPE
#endif // MAPNIK_GEOMETRY_TO_DS_TYPE_HPP
8 changes: 4 additions & 4 deletions plugins/input/csv/csv_datasource.cpp
Expand Up @@ -937,20 +937,20 @@ mapnik::layer_descriptor csv_datasource::get_descriptor() const
return desc_;
}

boost::optional<mapnik::datasource::geometry_t> csv_datasource::get_geometry_type() const
boost::optional<mapnik::datasource_geometry_t> csv_datasource::get_geometry_type() const
{
boost::optional<mapnik::datasource::geometry_t> result;
boost::optional<mapnik::datasource_geometry_t> result;
int multi_type = 0;
unsigned num_features = features_.size();
for (unsigned i = 0; i < num_features && i < 5; ++i)
{
mapnik::util::to_ds_type(features_[i]->get_geometry(),result);
result = mapnik::util::to_ds_type(features_[i]->get_geometry());
if (result)
{
int type = static_cast<int>(*result);
if (multi_type > 0 && multi_type != type)
{
result.reset(mapnik::datasource::Collection);
result.reset(mapnik::datasource_geometry_t::Collection);
return result;
}
multi_type = type;
Expand Down
2 changes: 1 addition & 1 deletion plugins/input/csv/csv_datasource.hpp
Expand Up @@ -52,7 +52,7 @@ class csv_datasource : public mapnik::datasource
mapnik::featureset_ptr features_at_point(mapnik::coord2d const& pt, double tol = 0) const;
mapnik::box2d<double> envelope() const;
mapnik::layer_descriptor get_descriptor() const;
boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
boost::optional<mapnik::datasource_geometry_t> get_geometry_type() const;
template <typename T>
void parse_csv(T & stream,
std::string const& escape,
Expand Down
4 changes: 2 additions & 2 deletions plugins/input/gdal/gdal_datasource.cpp
Expand Up @@ -201,9 +201,9 @@ box2d<double> gdal_datasource::envelope() const
return extent_;
}

boost::optional<mapnik::datasource::geometry_t> gdal_datasource::get_geometry_type() const
boost::optional<mapnik::datasource_geometry_t> gdal_datasource::get_geometry_type() const
{
return boost::optional<mapnik::datasource::geometry_t>();
return boost::optional<mapnik::datasource_geometry_t>();
}

layer_descriptor gdal_datasource::get_descriptor() const
Expand Down
2 changes: 1 addition & 1 deletion plugins/input/gdal/gdal_datasource.hpp
Expand Up @@ -52,7 +52,7 @@ class gdal_datasource : public mapnik::datasource
mapnik::featureset_ptr features(mapnik::query const& q) const;
mapnik::featureset_ptr features_at_point(mapnik::coord2d const& pt, double tol = 0) const;
mapnik::box2d<double> envelope() const;
boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
boost::optional<mapnik::datasource_geometry_t> get_geometry_type() const;
mapnik::layer_descriptor get_descriptor() const;
private:
GDALDataset* open_dataset() const;
Expand Down
12 changes: 6 additions & 6 deletions plugins/input/geojson/geojson_datasource.cpp
Expand Up @@ -302,22 +302,22 @@ mapnik::layer_descriptor geojson_datasource::get_descriptor() const
return desc_;
}

boost::optional<mapnik::datasource::geometry_t> geojson_datasource::get_geometry_type() const
boost::optional<mapnik::datasource_geometry_t> geojson_datasource::get_geometry_type() const
{
boost::optional<mapnik::datasource::geometry_t> result;
boost::optional<mapnik::datasource_geometry_t> result;
int multi_type = 0;
if (cache_features_)
{
unsigned num_features = features_.size();
for (unsigned i = 0; i < num_features && i < 5; ++i)
{
mapnik::util::to_ds_type(features_[i]->get_geometry(),result);
result = mapnik::util::to_ds_type(features_[i]->get_geometry());
if (result)
{
int type = static_cast<int>(*result);
if (multi_type > 0 && multi_type != type)
{
result.reset(mapnik::datasource::Collection);
result.reset(mapnik::datasource_geometry_t::Collection);
return result;
}
multi_type = type;
Expand Down Expand Up @@ -356,13 +356,13 @@ boost::optional<mapnik::datasource::geometry_t> geojson_datasource::get_geometry
{
throw std::runtime_error("Failed to parse geojson feature");
}
mapnik::util::to_ds_type(feature->get_geometry(),result);
result = mapnik::util::to_ds_type(feature->get_geometry());
if (result)
{
int type = static_cast<int>(*result);
if (multi_type > 0 && multi_type != type)
{
result.reset(mapnik::datasource::Collection);
result.reset(mapnik::datasource_geometry_t::Collection);
return result;
}
multi_type = type;
Expand Down
2 changes: 1 addition & 1 deletion plugins/input/geojson/geojson_datasource.hpp
Expand Up @@ -94,7 +94,7 @@ class geojson_datasource : public mapnik::datasource
mapnik::featureset_ptr features_at_point(mapnik::coord2d const& pt, double tol = 0) const;
mapnik::box2d<double> envelope() const;
mapnik::layer_descriptor get_descriptor() const;
boost::optional<mapnik::datasource::geometry_t> get_geometry_type() const;
boost::optional<mapnik::datasource_geometry_t> get_geometry_type() const;
template <typename Iterator>
void parse_geojson(Iterator start, Iterator end);
template <typename Iterator>
Expand Down
4 changes: 2 additions & 2 deletions plugins/input/occi/occi_datasource.cpp
Expand Up @@ -443,9 +443,9 @@ box2d<double> occi_datasource::envelope() const
}


boost::optional<mapnik::datasource::geometry_t> occi_datasource::get_geometry_type() const
boost::optional<mapnik::datasource_geometry_t> occi_datasource::get_geometry_type() const
{
return boost::optional<mapnik::datasource::geometry_t>();
return boost::optional<mapnik::datasource_geometry_t>();
}

layer_descriptor occi_datasource::get_descriptor() const
Expand Down

0 comments on commit 1cf0a89

Please sign in to comment.