Geo-Geos
view release on metacpan or search on metacpan
#include "xs/geos/geos.h"
#include "panda/Geos/Helper.h"
#include "panda/Geos/tesselate.h"
#include "xsi/private_typemaps.h"
using xs::my_perl;
using xs::Sv;
using namespace geos::geom;
using namespace geos::geom::prep;
using namespace geos::algorithm;
using namespace geos::noding;
using namespace geos::noding::snapround;
using namespace geos::io;
using namespace geos::index::chain;
using namespace geos::index;
using namespace geos::precision;
using namespace geos::operation::buffer;
using namespace geos::operation::distance;
using namespace geos::operation::overlay;
using namespace geos::operation::valid;
using namespace geos::operation::relate;
using namespace geos::operation::linemerge;
using namespace geos::triangulate;
using namespace xs;
using namespace Geo::Geos;
using namespace panda;
struct IntersectionFinderAdder_payload {
using vector_t = std::vector<::geos::geom::Coordinate>;
xs::Object lineIntersector;
vector_t coords;
};
struct Noder_payload {
using vector_t = std::vector<::geos::noding::SegmentString*>;
xs::Ref array_ref;
vector_t segments;
};
struct MonotoneChain_payload {
std::unique_ptr<CoordinateSequence> seq;
};
struct SubItemVisitor: public geos::index::ItemVisitor {
xs::Sub sub;
Helper::lookup_map_t& lookup_map;
SubItemVisitor(Sub sub_, Helper::lookup_map_t& lookup_map_):sub{sub_}, lookup_map{lookup_map_} {};
void visitItem (void *data) {
SV* key = static_cast<SV*>(data);
HE* he = hv_fetch_ent(lookup_map, key, 0, 0);
if (!he) throw ("Cannot lookup key in map");
Scalar arg {HeVAL(he)};
sub(arg);
}
};
struct SVs_map_payload {
Helper::lookup_map_t map;
SVs_map_payload(): map{Hash::create()} {}
};
static xs::Sv::payload_marker_t payload_marker{};
static xs::Sv::payload_marker_t payload_marker_IntersectionFinderAdder{};
static xs::Sv::payload_marker_t payload_marker_Noder{};
static xs::Sv::payload_marker_t payload_marker_MonotoneChain{};
static xs::Sv::payload_marker_t payload_marker_SVs_map{};
static int payload_marker_IntersectionFinderAdder_free(pTHX_ SV*, MAGIC* mg) {
if (mg->mg_virtual == &payload_marker_IntersectionFinderAdder) {
auto* payload = static_cast<IntersectionFinderAdder_payload*>((void*)mg->mg_ptr);
delete payload;
}
return 0;
}
( run in 2.008 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )