// IndexQuery queries the index for intersections with geom. func (this *Geos) IndexQuery(index *Index, geom *Geom) []IndexGeom { index.mu.Lock() defer index.mu.Unlock() var num C.uint32_t r := C.IndexQuery(this.v, index.v, geom.v, &num) if r == nil { return nil } hits := (*[2 << 16]C.uint32_t)(unsafe.Pointer(r))[:num] defer C.free(unsafe.Pointer(r)) var geoms []IndexGeom for _, idx := range hits { geoms = append(geoms, index.geoms[idx]) } return geoms }
// IndexQuery queries the index for intersections with geom. func (this *Geos) IndexQuery(index *Index, geom *Geom) []int { index.mu.Lock() defer index.mu.Unlock() var num C.uint32_t r := C.IndexQuery(this.v, index.v, geom.v, &num) if r == nil { return nil } hits := (*[2 << 16]C.uint32_t)(unsafe.Pointer(r))[:num] defer C.free(unsafe.Pointer(r)) indices := make([]int, len(hits)) for i := range hits { indices[i] = int(hits[i]) } return indices }