in h3_polyfill.c [290:318]
static H3Index nextCell(H3Index cell) {
int res = H3_GET_RESOLUTION(cell);
while (true) {
// If this is a base cell, set to next base cell (or H3_NULL if done)
if (res == 0) {
return baseCellNumToCell(H3_GET_BASE_CELL(cell) + 1);
}
// Faster cellToParent when we know the resolution is valid
// and we're only moving up one level
H3Index parent = cell;
H3_SET_RESOLUTION(parent, res - 1);
H3_SET_INDEX_DIGIT(parent, res, H3_DIGIT_MASK);
// If not the last sibling of parent, return next sibling
Direction digit = H3_GET_INDEX_DIGIT(cell, res);
if (digit < INVALID_DIGIT - 1) {
H3_SET_INDEX_DIGIT(cell, res,
digit + ((H3_EXPORT(isPentagon)(parent) &&
digit == CENTER_DIGIT)
? 2 // Skip missing pentagon child
: 1));
return cell;
}
// Move up to the parent for the next loop iteration
res--;
cell = parent;
}
}