Пример #1
0
T_KRData* kr_data_construct(T_KRParam *ptParam, T_KRModule *ptModule,
        KRGetTypeFunc pfGetType, KRGetValueFunc pfGetValue)
{
    T_KRData *ptData = kr_malloc(sizeof(T_KRData));
    if (ptData == NULL) {
        KR_LOG(KR_LOGERROR, "kr_malloc ptData Failed!");
        return NULL;
    }
    ptData->ptModule = ptModule;
    ptData->pfGetType = pfGetType;
    ptData->pfGetValue = pfGetValue;

    ptData->ptItemTable = kr_hashtable_new_full(
                              (KRHashFunc )kr_string_hash, \
                              (KREqualFunc )kr_string_equal,\
                              NULL, 
                             (KRDestroyNotify )kr_data_item_free);
    if (ptData->ptItemTable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_hashtable_new_full item table Failed!");
        return NULL;
    }

    //load data item according parameter
    if (kr_data_item_load(ptData, ptParam) != 0) {
        KR_LOG(KR_LOGERROR, "load item table error!");
        return NULL;
    }
    
    ptData->tConstructTime = kr_param_load_time(ptParam);
    
    return ptData;
}
Пример #2
0
T_KRHDITable *kr_hdi_table_construct(T_KRParamHDI *ptParamHDI, T_KRModule *ptModule)
{
    T_KRHDITable *ptHdiTable = kr_calloc(sizeof(T_KRHDITable));
    if (ptHdiTable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptHdiTable failed!");
        return NULL;
    }
    ptHdiTable->ptParamHDI = ptParamHDI;
    ptHdiTable->lHDICnt = ptParamHDI->lHDIDefCnt;
    ptHdiTable->ptHDITable = \
      kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_destruct);
    
    int i = 0;
    T_KRHDI *ptHDI = NULL;
    for (i=0; i<ptParamHDI->lHDIDefCnt; ++i) {
        ptHDI = kr_hdi_construct(&ptParamHDI->stParamHDIDef[i], ptModule);
        if (ptHDI == NULL) {
            KR_LOG(KR_LOGERROR, "kr_hdi_construct [%d] failed!", i);
            kr_hashtable_destroy(ptHdiTable->ptHDITable);
            kr_free(ptHdiTable);
            return NULL;
        }
        kr_hashtable_insert(ptHdiTable->ptHDITable, &ptHDI->lHDIId, ptHDI);
    }
    ptHdiTable->tConstructTime = ptParamHDI->tLastLoadTime;
    
    return ptHdiTable;    
}
Пример #3
0
T_KRHDITable *kr_hdi_table_construct(T_KRShmHDI *shm_hdi, T_KRModule *datamodule)
{
    T_KRHDITable *krhditable = kr_calloc(sizeof(T_KRHDITable));
    if (krhditable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc krhditable failed!");
        return NULL;
    }
    krhditable->ptShmHDIs = shm_hdi;
    krhditable->lHDICnt = shm_hdi->lHDIDefCnt;
    krhditable->ptHDITable = \
      kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_destruct);
    
    int i = 0;
    T_KRHDI *krhdi = NULL;
    for (i=0; i<shm_hdi->lHDIDefCnt; ++i) {
        krhdi = kr_hdi_construct(&shm_hdi->stShmHDIDef[i], datamodule);
        if (krhdi == NULL) {
            KR_LOG(KR_LOGERROR, "kr_hdi_construct [%d] failed!", i);
            kr_hashtable_destroy(krhditable->ptHDITable);
            kr_free(krhditable);
            return NULL;
        }
        kr_hashtable_insert(krhditable->ptHDITable, &krhdi->lHDIId, krhdi);
    }
    krhditable->tConstructTime = shm_hdi->tLastLoadTime;
    
    return krhditable;    
}
Пример #4
0
/*create a new set*/
T_KRHashSet *kr_hashset_create(char *name, E_KRType key_type)
{
    T_KRHashSet *krset = (T_KRHashSet *)kr_calloc(sizeof(T_KRHashSet));
    krset->name = (char *)kr_strdup(name);
    krset->type = key_type;
    KRHashFunc hash_func = kr_get_hash_func(key_type);
    KREqualFunc equal_func = kr_get_equal_func(key_type);
    krset->set = kr_hashtable_new_full(hash_func, equal_func, kr_free, NULL);
    
    return krset;
}
T_KRHdiCacheValue *kr_hdi_cache_get(T_KRCache *cache, void *key, long hid)
{
    T_KRHdiCacheValue *hdi_cache_val = NULL;
    T_KRHashTable *node = kr_cache_get(cache, key);
    if (node != NULL) {
        hdi_cache_val = kr_hashtable_lookup(node, &hid);
    } else {
        node = kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_cache_value_free);
        kr_cache_set(cache, key, node);
    }
    
    if (hdi_cache_val == NULL) {
        hdi_cache_val = kr_hdi_cache_value_new(hid);
        kr_hashtable_replace(node, &hdi_cache_val->lHDIId, hdi_cache_val);
    }

    return hdi_cache_val;
}