MODULE = Geo::Geos PACKAGE = Geo::Geos::Noding::Noder
PROTOTYPES: DISABLE
void Noder::computeNodes(Array segStrings) {
auto segments = Noder_payload::vector_t();
segments.reserve(segStrings.size());
for(auto it: segStrings) {
SegmentString& ss = xs::in<SegmentString&>(it);
segments.push_back(&ss);
}
auto payload = new Noder_payload();
payload->array_ref = xs::Ref::create(segStrings);
payload->segments = std::move(segments);
Object self{ST(0)};
self.payload_attach(payload, &payload_marker_Noder);
THIS->computeNodes(&payload->segments);
}
Sv Noder::getNodedSubstrings() {
auto items = THIS->getNodedSubstrings();
if (!items) XSRETURN_UNDEF;
else {
xs::Array result = xs::Array::create(items->size());
for(auto it: *items) {
result.push(xs::out<SegmentString*>(it));
}
delete items;
RETVAL = xs::Ref::create(result);
}
}
BOOT {
payload_marker_Noder.svt_free = payload_marker_Noder_free;
}