|
|
|
@ -8,39 +8,7 @@ |
|
|
|
#define HASH_ENTRY_CHUNK_SIZE 128 |
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
|
void |
|
|
|
_updateHashSize(struct BIGPOINT_HASH * _this) |
|
|
|
{ |
|
|
|
if (_this->used == _this->size) { |
|
|
|
_this->size += HASH_ENTRY_CHUNK_SIZE; |
|
|
|
|
|
|
|
_this->keys = realloc(_this->keys, sizeof(char*) * _this->size); |
|
|
|
memset(_this->keys + (_this->used * sizeof(char*)), |
|
|
|
HASH_ENTRY_CHUNK_SIZE * sizeof(char*), |
|
|
|
0); |
|
|
|
|
|
|
|
_this->values = realloc( |
|
|
|
_this->values, |
|
|
|
sizeof(struct BIGPOINT_DYNTYPE *) * _this->size); |
|
|
|
memset(_this->values + (_this->used * sizeof(struct BIGPOINT_DYNTYPE *)), |
|
|
|
HASH_ENTRY_CHUNK_SIZE * sizeof(struct BIGPOINT_DYNTYPE *), |
|
|
|
0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static |
|
|
|
size_t |
|
|
|
_getHashIdx(struct BIGPOINT_HASH * _this, const char * key) |
|
|
|
{ |
|
|
|
size_t index; |
|
|
|
|
|
|
|
for (index = 0; |
|
|
|
index < _this->used && strcmp(_this->keys[index], key); |
|
|
|
index++); |
|
|
|
|
|
|
|
return index; |
|
|
|
} |
|
|
|
static void _updateHashSize(struct BIGPOINT_HASH * _this); |
|
|
|
|
|
|
|
static |
|
|
|
void |
|
|
|
@ -55,6 +23,15 @@ static |
|
|
|
void |
|
|
|
__jsonConst(struct BIGPOINT_HASH * _this, struct json_object * json) |
|
|
|
{ |
|
|
|
__construct(_this, NULL); |
|
|
|
|
|
|
|
if (json_type_object != json_object_get_type(json)) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
json_object_object_foreach(json, key, value) { |
|
|
|
bigpoint_hash_set(_this, key, newFromJson(BIGPOINT_DYNTYPE, value)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static |
|
|
|
@ -88,6 +65,40 @@ struct BIGPOINT_CCLASS _bigpoint_hash = { |
|
|
|
|
|
|
|
const struct BIGPOINT_CCLASS * const BIGPOINT_HASH = &_bigpoint_hash; |
|
|
|
|
|
|
|
static |
|
|
|
void |
|
|
|
_updateHashSize(struct BIGPOINT_HASH * _this) |
|
|
|
{ |
|
|
|
if (_this->used == _this->size) { |
|
|
|
_this->size += HASH_ENTRY_CHUNK_SIZE; |
|
|
|
|
|
|
|
_this->keys = realloc(_this->keys, sizeof(char*) * _this->size); |
|
|
|
memset(_this->keys + (_this->used * sizeof(char*)), |
|
|
|
HASH_ENTRY_CHUNK_SIZE * sizeof(char*), |
|
|
|
0); |
|
|
|
|
|
|
|
_this->values = realloc( |
|
|
|
_this->values, |
|
|
|
sizeof(struct BIGPOINT_DYNTYPE *) * _this->size); |
|
|
|
memset(_this->values + (_this->used * sizeof(struct BIGPOINT_DYNTYPE *)), |
|
|
|
HASH_ENTRY_CHUNK_SIZE * sizeof(struct BIGPOINT_DYNTYPE *), |
|
|
|
0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static |
|
|
|
size_t |
|
|
|
_getHashIdx(struct BIGPOINT_HASH * _this, const char * key) |
|
|
|
{ |
|
|
|
size_t index; |
|
|
|
|
|
|
|
for (index = 0; |
|
|
|
index < _this->used && strcmp(_this->keys[index], key); |
|
|
|
index++); |
|
|
|
|
|
|
|
return index; |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
bigpoint_hash_set(struct BIGPOINT_HASH * _this, |
|
|
|
const char * key, |
|
|
|
|