in h3_iterators.c [250:287]
void iterStepChild(IterCellsChildren *it) {
// once h == H3_NULL, the iterator returns an infinite sequence of H3_NULL
if (it->h == H3_NULL) return;
int childRes = H3_GET_RESOLUTION(it->h);
_incrementResDigit(it, childRes);
for (int i = childRes; i >= it->_parentRes; i--) {
if (i == it->_parentRes) {
// if we're modifying the parent resolution digit, then we're done
*it = _null_iter();
return;
}
// PENTAGON_SKIPPED_DIGIT == 1
if (i == it->_skipDigit &&
_getResDigit(it, i) == PENTAGON_SKIPPED_DIGIT) {
// Then we are iterating through the children of a pentagon cell.
// All children of a pentagon have the property that the first
// nonzero digit between the parent and child resolutions is
// not 1.
// I.e., we never see a sequence like 00001.
// Thus, we skip the `1` in this digit.
_incrementResDigit(it, i);
it->_skipDigit -= 1;
return;
}
// INVALID_DIGIT == 7
if (_getResDigit(it, i) == INVALID_DIGIT) {
_incrementResDigit(
it, i); // zeros out it[i] and increments it[i-1] by 1
} else {
break;
}
}
}