in lib/parson.c [522:551]
static size_t json_object_get_cell_ix(const JSON_Object *object, const char *key, size_t key_len, unsigned long hash, parson_bool_t *out_found) {
size_t cell_ix = hash & (object->cell_capacity - 1);
size_t cell = 0;
size_t ix = 0;
unsigned int i = 0;
unsigned long hash_to_check = 0;
const char *key_to_check = NULL;
size_t key_to_check_len = 0;
*out_found = PARSON_FALSE;
for (i = 0; i < object->cell_capacity; i++) {
ix = (cell_ix + i) & (object->cell_capacity - 1);
cell = object->cells[ix];
if (cell == OBJECT_INVALID_IX) {
return ix;
}
hash_to_check = object->hashes[cell];
if (hash != hash_to_check) {
continue;
}
key_to_check = object->names[cell];
key_to_check_len = strlen(key_to_check);
if (key_to_check_len == key_len && strncmp(key, key_to_check, key_len) == 0) {
*out_found = PARSON_TRUE;
return ix;
}
}
return OBJECT_INVALID_IX;
}