in h3_algos.c [221:253]
H3Error H3_EXPORT(gridDiskDistances)(H3Index origin, int k, H3Index *out,
int *distances) {
// Optimistically try the faster gridDiskUnsafe algorithm first
const H3Error failed =
H3_EXPORT(gridDiskDistancesUnsafe)(origin, k, out, distances);
if (failed) {
int64_t maxIdx;
H3Error err = H3_EXPORT(maxGridDiskSize)(k, &maxIdx);
if (err) {
return err;
}
// Fast algo failed, fall back to slower, correct algo
// and also wipe out array because contents untrustworthy
memset(out, 0, maxIdx * sizeof(H3Index));
if (distances == NULL) {
distances = H3_MEMORY(calloc)(maxIdx, sizeof(int));
if (!distances) {
return E_MEMORY_ALLOC;
}
H3Error result = _gridDiskDistancesInternal(origin, k, out,
distances, maxIdx, 0);
H3_MEMORY(free)(distances);
return result;
} else {
memset(distances, 0, maxIdx * sizeof(int));
return _gridDiskDistancesInternal(origin, k, out, distances, maxIdx,
0);
}
} else {
return E_SUCCESS;
}
}