// Generated by using Rcpp::compileAttributes() -> do not edit by hand
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

#include <Rcpp.h>

using namespace Rcpp;

#ifdef RCPP_USE_GLOBAL_ROSTREAM
Rcpp::Rostream<true>&  Rcpp::Rcout = Rcpp::Rcpp_cout_get();
Rcpp::Rostream<false>& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
#endif

// CPL_geodetic_area
Rcpp::NumericVector CPL_geodetic_area(Rcpp::List sfc, double semi_major, double inv_flattening);
RcppExport SEXP _lwgeom_CPL_geodetic_area(SEXP sfcSEXP, SEXP semi_majorSEXP, SEXP inv_flatteningSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< double >::type semi_major(semi_majorSEXP);
    Rcpp::traits::input_parameter< double >::type inv_flattening(inv_flatteningSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_area(sfc, semi_major, inv_flattening));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geodetic_length
Rcpp::NumericVector CPL_geodetic_length(Rcpp::List sfc, double semi_major, double inv_flattening);
RcppExport SEXP _lwgeom_CPL_geodetic_length(SEXP sfcSEXP, SEXP semi_majorSEXP, SEXP inv_flatteningSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< double >::type semi_major(semi_majorSEXP);
    Rcpp::traits::input_parameter< double >::type inv_flattening(inv_flatteningSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_length(sfc, semi_major, inv_flattening));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geodetic_azimuth
Rcpp::NumericVector CPL_geodetic_azimuth(Rcpp::List sfc, double semi_major, double inv_flattening, Nullable<Rcpp::List> sfc2_);
RcppExport SEXP _lwgeom_CPL_geodetic_azimuth(SEXP sfcSEXP, SEXP semi_majorSEXP, SEXP inv_flatteningSEXP, SEXP sfc2_SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< double >::type semi_major(semi_majorSEXP);
    Rcpp::traits::input_parameter< double >::type inv_flattening(inv_flatteningSEXP);
    Rcpp::traits::input_parameter< Nullable<Rcpp::List> >::type sfc2_(sfc2_SEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_azimuth(sfc, semi_major, inv_flattening, sfc2_));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geodetic_segmentize
Rcpp::List CPL_geodetic_segmentize(Rcpp::List sfc, double max_seg_length);
RcppExport SEXP _lwgeom_CPL_geodetic_segmentize(SEXP sfcSEXP, SEXP max_seg_lengthSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< double >::type max_seg_length(max_seg_lengthSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_segmentize(sfc, max_seg_length));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geodetic_covers
Rcpp::List CPL_geodetic_covers(Rcpp::List sfc1, Rcpp::List sfc2);
RcppExport SEXP _lwgeom_CPL_geodetic_covers(SEXP sfc1SEXP, SEXP sfc2SEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc1(sfc1SEXP);
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc2(sfc2SEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_covers(sfc1, sfc2));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geodetic_distance
Rcpp::List CPL_geodetic_distance(Rcpp::List sfc1, Rcpp::List sfc2, double semi_major, double inv_flattening, double tolerance, bool sparse, double semi_minor);
RcppExport SEXP _lwgeom_CPL_geodetic_distance(SEXP sfc1SEXP, SEXP sfc2SEXP, SEXP semi_majorSEXP, SEXP inv_flatteningSEXP, SEXP toleranceSEXP, SEXP sparseSEXP, SEXP semi_minorSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc1(sfc1SEXP);
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc2(sfc2SEXP);
    Rcpp::traits::input_parameter< double >::type semi_major(semi_majorSEXP);
    Rcpp::traits::input_parameter< double >::type inv_flattening(inv_flatteningSEXP);
    Rcpp::traits::input_parameter< double >::type tolerance(toleranceSEXP);
    Rcpp::traits::input_parameter< bool >::type sparse(sparseSEXP);
    Rcpp::traits::input_parameter< double >::type semi_minor(semi_minorSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geodetic_distance(sfc1, sfc2, semi_major, inv_flattening, tolerance, sparse, semi_minor));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geos_version
std::string CPL_geos_version(bool b);
RcppExport SEXP _lwgeom_CPL_geos_version(SEXP bSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< bool >::type b(bSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geos_version(b));
    return rcpp_result_gen;
END_RCPP
}
// CPL_init_lwgeom
Rcpp::List CPL_init_lwgeom(Rcpp::List l);
RcppExport SEXP _lwgeom_CPL_init_lwgeom(SEXP lSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type l(lSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_init_lwgeom(l));
    return rcpp_result_gen;
END_RCPP
}
// CPL_lwgeom_version
Rcpp::CharacterVector CPL_lwgeom_version(bool b);
RcppExport SEXP _lwgeom_CPL_lwgeom_version(SEXP bSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< bool >::type b(bSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_lwgeom_version(b));
    return rcpp_result_gen;
END_RCPP
}
// CPL_sfc_from_twkb
Rcpp::List CPL_sfc_from_twkb(Rcpp::List twkb);
RcppExport SEXP _lwgeom_CPL_sfc_from_twkb(SEXP twkbSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type twkb(twkbSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_sfc_from_twkb(twkb));
    return rcpp_result_gen;
END_RCPP
}
// CPL_make_valid
Rcpp::List CPL_make_valid(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_make_valid(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_make_valid(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_split
Rcpp::List CPL_split(Rcpp::List sfc, Rcpp::List blade);
RcppExport SEXP _lwgeom_CPL_split(SEXP sfcSEXP, SEXP bladeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< Rcpp::List >::type blade(bladeSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_split(sfc, blade));
    return rcpp_result_gen;
END_RCPP
}
// CPL_wrap_x
Rcpp::List CPL_wrap_x(Rcpp::List sfc, Rcpp::NumericVector wrap, Rcpp::NumericVector move);
RcppExport SEXP _lwgeom_CPL_wrap_x(SEXP sfcSEXP, SEXP wrapSEXP, SEXP moveSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type wrap(wrapSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type move(moveSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_wrap_x(sfc, wrap, move));
    return rcpp_result_gen;
END_RCPP
}
// CPL_geohash
Rcpp::CharacterVector CPL_geohash(Rcpp::List sfc, int prec);
RcppExport SEXP _lwgeom_CPL_geohash(SEXP sfcSEXP, SEXP precSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< int >::type prec(precSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_geohash(sfc, prec));
    return rcpp_result_gen;
END_RCPP
}
// CPL_bbox_from_geohash
Rcpp::NumericVector CPL_bbox_from_geohash(Rcpp::CharacterVector h, int prec);
RcppExport SEXP _lwgeom_CPL_bbox_from_geohash(SEXP hSEXP, SEXP precSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type h(hSEXP);
    Rcpp::traits::input_parameter< int >::type prec(precSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_bbox_from_geohash(h, prec));
    return rcpp_result_gen;
END_RCPP
}
// CPL_lwgeom_transform
Rcpp::List CPL_lwgeom_transform(Rcpp::List sfc, Rcpp::CharacterVector p4s);
RcppExport SEXP _lwgeom_CPL_lwgeom_transform(SEXP sfcSEXP, SEXP p4sSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< Rcpp::CharacterVector >::type p4s(p4sSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_lwgeom_transform(sfc, p4s));
    return rcpp_result_gen;
END_RCPP
}
// CPL_minimum_bounding_circle
Rcpp::List CPL_minimum_bounding_circle(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_minimum_bounding_circle(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_minimum_bounding_circle(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_subdivide
Rcpp::List CPL_subdivide(Rcpp::List sfc, int max_vertices);
RcppExport SEXP _lwgeom_CPL_subdivide(SEXP sfcSEXP, SEXP max_verticesSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< int >::type max_vertices(max_verticesSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_subdivide(sfc, max_vertices));
    return rcpp_result_gen;
END_RCPP
}
// CPL_snap_to_grid
Rcpp::List CPL_snap_to_grid(Rcpp::List sfc, Rcpp::NumericVector origin, Rcpp::NumericVector size);
RcppExport SEXP _lwgeom_CPL_snap_to_grid(SEXP sfcSEXP, SEXP originSEXP, SEXP sizeSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type origin(originSEXP);
    Rcpp::traits::input_parameter< Rcpp::NumericVector >::type size(sizeSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_snap_to_grid(sfc, origin, size));
    return rcpp_result_gen;
END_RCPP
}
// CPL_perimeter
Rcpp::NumericVector CPL_perimeter(Rcpp::List sfc, bool do2d);
RcppExport SEXP _lwgeom_CPL_perimeter(SEXP sfcSEXP, SEXP do2dSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< bool >::type do2d(do2dSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_perimeter(sfc, do2d));
    return rcpp_result_gen;
END_RCPP
}
// CPL_is_polygon_cw
Rcpp::LogicalVector CPL_is_polygon_cw(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_is_polygon_cw(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_is_polygon_cw(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_force_polygon_cw
Rcpp::List CPL_force_polygon_cw(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_force_polygon_cw(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_force_polygon_cw(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_startpoint
Rcpp::NumericMatrix CPL_startpoint(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_startpoint(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_startpoint(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_endpoint
Rcpp::NumericMatrix CPL_endpoint(Rcpp::List sfc);
RcppExport SEXP _lwgeom_CPL_endpoint(SEXP sfcSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_endpoint(sfc));
    return rcpp_result_gen;
END_RCPP
}
// CPL_sfc_to_wkt
Rcpp::CharacterVector CPL_sfc_to_wkt(Rcpp::List sfc, Rcpp::IntegerVector precision);
RcppExport SEXP _lwgeom_CPL_sfc_to_wkt(SEXP sfcSEXP, SEXP precisionSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type precision(precisionSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_sfc_to_wkt(sfc, precision));
    return rcpp_result_gen;
END_RCPP
}
// CPL_proj_version
std::string CPL_proj_version(bool b);
RcppExport SEXP _lwgeom_CPL_proj_version(SEXP bSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< bool >::type b(bSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_proj_version(b));
    return rcpp_result_gen;
END_RCPP
}
// CPL_use_proj4_init_rules
Rcpp::LogicalVector CPL_use_proj4_init_rules(Rcpp::IntegerVector v);
RcppExport SEXP _lwgeom_CPL_use_proj4_init_rules(SEXP vSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::IntegerVector >::type v(vSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_use_proj4_init_rules(v));
    return rcpp_result_gen;
END_RCPP
}
// CPL_set_data_dir
Rcpp::LogicalVector CPL_set_data_dir(std::string data_dir);
RcppExport SEXP _lwgeom_CPL_set_data_dir(SEXP data_dirSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::string >::type data_dir(data_dirSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_set_data_dir(data_dir));
    return rcpp_result_gen;
END_RCPP
}
// CPL_linesubstring
Rcpp::List CPL_linesubstring(Rcpp::List sfc, double from, double to, double tolerance);
RcppExport SEXP _lwgeom_CPL_linesubstring(SEXP sfcSEXP, SEXP fromSEXP, SEXP toSEXP, SEXP toleranceSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< Rcpp::List >::type sfc(sfcSEXP);
    Rcpp::traits::input_parameter< double >::type from(fromSEXP);
    Rcpp::traits::input_parameter< double >::type to(toSEXP);
    Rcpp::traits::input_parameter< double >::type tolerance(toleranceSEXP);
    rcpp_result_gen = Rcpp::wrap(CPL_linesubstring(sfc, from, to, tolerance));
    return rcpp_result_gen;
END_RCPP
}

static const R_CallMethodDef CallEntries[] = {
    {"_lwgeom_CPL_geodetic_area", (DL_FUNC) &_lwgeom_CPL_geodetic_area, 3},
    {"_lwgeom_CPL_geodetic_length", (DL_FUNC) &_lwgeom_CPL_geodetic_length, 3},
    {"_lwgeom_CPL_geodetic_azimuth", (DL_FUNC) &_lwgeom_CPL_geodetic_azimuth, 4},
    {"_lwgeom_CPL_geodetic_segmentize", (DL_FUNC) &_lwgeom_CPL_geodetic_segmentize, 2},
    {"_lwgeom_CPL_geodetic_covers", (DL_FUNC) &_lwgeom_CPL_geodetic_covers, 2},
    {"_lwgeom_CPL_geodetic_distance", (DL_FUNC) &_lwgeom_CPL_geodetic_distance, 7},
    {"_lwgeom_CPL_geos_version", (DL_FUNC) &_lwgeom_CPL_geos_version, 1},
    {"_lwgeom_CPL_init_lwgeom", (DL_FUNC) &_lwgeom_CPL_init_lwgeom, 1},
    {"_lwgeom_CPL_lwgeom_version", (DL_FUNC) &_lwgeom_CPL_lwgeom_version, 1},
    {"_lwgeom_CPL_sfc_from_twkb", (DL_FUNC) &_lwgeom_CPL_sfc_from_twkb, 1},
    {"_lwgeom_CPL_make_valid", (DL_FUNC) &_lwgeom_CPL_make_valid, 1},
    {"_lwgeom_CPL_split", (DL_FUNC) &_lwgeom_CPL_split, 2},
    {"_lwgeom_CPL_wrap_x", (DL_FUNC) &_lwgeom_CPL_wrap_x, 3},
    {"_lwgeom_CPL_geohash", (DL_FUNC) &_lwgeom_CPL_geohash, 2},
    {"_lwgeom_CPL_bbox_from_geohash", (DL_FUNC) &_lwgeom_CPL_bbox_from_geohash, 2},
    {"_lwgeom_CPL_lwgeom_transform", (DL_FUNC) &_lwgeom_CPL_lwgeom_transform, 2},
    {"_lwgeom_CPL_minimum_bounding_circle", (DL_FUNC) &_lwgeom_CPL_minimum_bounding_circle, 1},
    {"_lwgeom_CPL_subdivide", (DL_FUNC) &_lwgeom_CPL_subdivide, 2},
    {"_lwgeom_CPL_snap_to_grid", (DL_FUNC) &_lwgeom_CPL_snap_to_grid, 3},
    {"_lwgeom_CPL_perimeter", (DL_FUNC) &_lwgeom_CPL_perimeter, 2},
    {"_lwgeom_CPL_is_polygon_cw", (DL_FUNC) &_lwgeom_CPL_is_polygon_cw, 1},
    {"_lwgeom_CPL_force_polygon_cw", (DL_FUNC) &_lwgeom_CPL_force_polygon_cw, 1},
    {"_lwgeom_CPL_startpoint", (DL_FUNC) &_lwgeom_CPL_startpoint, 1},
    {"_lwgeom_CPL_endpoint", (DL_FUNC) &_lwgeom_CPL_endpoint, 1},
    {"_lwgeom_CPL_sfc_to_wkt", (DL_FUNC) &_lwgeom_CPL_sfc_to_wkt, 2},
    {"_lwgeom_CPL_proj_version", (DL_FUNC) &_lwgeom_CPL_proj_version, 1},
    {"_lwgeom_CPL_use_proj4_init_rules", (DL_FUNC) &_lwgeom_CPL_use_proj4_init_rules, 1},
    {"_lwgeom_CPL_set_data_dir", (DL_FUNC) &_lwgeom_CPL_set_data_dir, 1},
    {"_lwgeom_CPL_linesubstring", (DL_FUNC) &_lwgeom_CPL_linesubstring, 4},
    {NULL, NULL, 0}
};

RcppExport void R_init_lwgeom(DllInfo *dll) {
    R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
    R_useDynamicSymbols(dll, FALSE);
}
