H3Error H3_EXPORT()

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;
}