in h3_h3Index.c [135:172]
H3Error H3_EXPORT(constructCell)(int res, int baseCellNumber, const int *digits,
H3Index *out) {
if (res < 0 || res > MAX_H3_RES) {
return E_RES_DOMAIN;
}
if (baseCellNumber < 0 || baseCellNumber >= NUM_BASE_CELLS) {
return E_BASE_CELL_DOMAIN;
}
H3Index h = H3_INIT;
H3_SET_MODE(h, H3_CELL_MODE);
H3_SET_RESOLUTION(h, res);
H3_SET_BASE_CELL(h, baseCellNumber);
bool isPentagon = isBaseCellPentagonArr[baseCellNumber];
for (int r = 1; r <= res; r++) {
int d = digits[r - 1];
if (d < CENTER_DIGIT || d >= INVALID_DIGIT) { // (d < 0 || d >= 7)
return E_DIGIT_DOMAIN;
}
if (isPentagon) {
// check for deleted subsequences of pentagons
if (d == CENTER_DIGIT) { // d == 0
// do nothing; still a pentagon
} else if (d == K_AXES_DIGIT) { // d == 1
return E_DELETED_DIGIT;
} else {
isPentagon = false;
}
}
H3_SET_INDEX_DIGIT(h, r, d);
}
*out = h;
return E_SUCCESS;
}