Beispiel #1
0
/*make a new hashset from multi_string*/
T_KRHashSet *kr_hashset_make(E_KRType key_type, char *multi_string)
{
    T_KRHashSet *krhashset = kr_hashset_create(multi_string, key_type);
    if (krhashset == NULL) {
        return NULL;
    }
    char *str = kr_strdup(multi_string);
    char *save_str = NULL;
    char *p = strtok_r(str, ",", &save_str);
    U_KRValue val;
    while(p)
    {
        switch(krhashset->type) 
        {
            case KR_TYPE_INT:
                val.i=atoi(p);
                kr_hashset_add(krhashset, &val.i);
                break;
            case KR_TYPE_DOUBLE:
                val.d=atof(p);
                kr_hashset_add(krhashset, &val.d);
                break;
            case KR_TYPE_STRING:
                p = p+1;
                p[strlen(p)-1] = '\0';
                val.s=p;
                kr_hashset_add(krhashset, val.s);
                break;
        }
        p=strtok_r(NULL, ",", &save_str);
    }
    kr_free(str);

    return krhashset;
}
Beispiel #2
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;
}
Beispiel #3
0
T_KRCalc *kr_calc_construct(E_KRCalcFormat format, char *calcstr)
{
    T_KRCalc *krcalc = (T_KRCalc *)kr_calloc(sizeof(T_KRCalc));
    krcalc->calc_format = format;
    krcalc->calc_string = kr_strdup(calcstr);
    
    krcalc->get_type_cb = kr_data_get_type;
    krcalc->get_value_cb = kr_data_get_value;
    
    if (kr_calc_parse(krcalc) != 0) {
        fprintf(stderr, "kr_calc_parse failed[%s]!\n", krcalc->err_msg);
        return NULL;
    }
    kr_calc_dump(krcalc, stdout);
    
    return krcalc;
}
Beispiel #4
0
static int kr_server_argument_parse(int argc, char *argv[])
{
    int opt;
    
    while ((opt = getopt(argc, argv, "c:h")) != -1)
    {
         switch(opt)
         {
             case 'c':
                 krserver.configfile = kr_strdup(optarg);
                 break;
             case 'h':
                 kr_server_usage();
                 break;
             default:
                 fprintf(stderr, "Unrecognized option: -%c.", optopt);
                 kr_server_usage();
                 return -1;
         }
    }
    
    return 0;
}
Beispiel #5
0
int main()
{
    void *pMalloc=NULL;
    size_t malloc_size = 100;
    
    pMalloc = kr_malloc(malloc_size);
    assert(pMalloc != NULL);
    
    pMalloc = kr_realloc(pMalloc, malloc_size*2);
    assert(pMalloc != NULL);
    
    kr_free(pMalloc);
    
    char *pStrDup = kr_strdup("Tiger");
    assert(pStrDup != NULL);
    printf("pStrDup=[%s]\n", pStrDup);
    kr_free(pStrDup);
    
    int i=0;
    char *paMalloc[100];
    for(i=0; i<100; i++) {
        paMalloc[i] = (char *)kr_malloc(malloc_size*i);
        assert(paMalloc[i] != NULL);
    }
    
    printf("used memory:[%u], fragmentation_ratio:[%f], rss:[%u]\n", \
           kr_malloc_used_memory(), 
           kr_malloc_get_fragmentation_ratio(), 
           kr_malloc_get_rss());
    
    for(i=0; i<100; i++) {
        kr_free(paMalloc[i]);
    }
    
    return 0;
}
Beispiel #6
0
int kr_sdi_aggr_func(T_KRSDI *krsdi, T_KRContext *krcontext)
{
    int iResult = -1;
    int iAbsLoc = -1;
    int iRelLoc = -1;
    
    T_KRListNode *node = krcontext->ptRecList->tail;
    while(node)
    {
        krcontext->ptRecord = (T_KRRecord *)kr_list_value(node);
        
        iAbsLoc++; /*绝对位置加一*/
                
        /*数据项绝对统计定位校验*/
        if (krsdi->ptShmSDIDef->caLocationProperty[0] == KR_LOC_ABSOLUTE) {     
            if (krsdi->ptShmSDIDef->lStatisticsLocation != iAbsLoc) {
                node = node->prev;
                continue;
            }
        }
        
        /*统计数据源校验*/
        if (((T_KRTable *)krcontext->ptRecord->ptTable)->iTableId != \
            krsdi->ptShmSDIDef->lStatisticsDatasrc) {
            node = node->prev;
            continue;
        }
        
        /*过滤器校验*/
        iResult = kr_calc_eval(krsdi->ptSDICalc, krcontext);
        if (iResult != 0) {
            KR_LOG(KR_LOGERROR, "kr_calc_eval [%ld] failed!", krsdi->lSDIId);
            return -1;
        } else if (krsdi->ptSDICalc->result_type != KR_TYPE_BOOL) {
            KR_LOG(KR_LOGERROR, "result_type of sdi_calc must be boolean!");
            return -1;
        } else if (krsdi->ptSDICalc->result_ind != KR_VALUE_SETED ||
                   !krsdi->ptSDICalc->result_value.b) {
            node = node->prev;
            continue;
        }
    
        iRelLoc++; /*相对位置加一*/
            
        /*数据项相对统计定位校验*/
        if (krsdi->ptShmSDIDef->caLocationProperty[0] == KR_LOC_RELATIVE) {     
            if (krsdi->ptShmSDIDef->lStatisticsLocation != iRelLoc) {
                node = node->prev;
                continue;
            }
        }
            
        /*获取数据项值*/
        void *val = kr_get_field_value(krcontext->ptRecord, \
                          krsdi->ptShmSDIDef->lStatisticsField);
        switch(krsdi->eValueType)
        {
            case KR_TYPE_INT:
                krsdi->uValue.i = *(int *)val;
                break;
            case KR_TYPE_LONG:
                krsdi->uValue.l = *(long *)val;
                break;
            case KR_TYPE_DOUBLE:
                krsdi->uValue.d = *(double *)val;
                break;
            case KR_TYPE_STRING:
                krsdi->uValue.s = kr_strdup(val);
                break;
            default:
                KR_LOG(KR_LOGERROR, "Bad FieldType [%c]!", krsdi->eValueType);
                return -1;
        }

        /*add this record to related*/
        kr_hashtable_insert(krsdi->ptRelated, \
                krcontext->ptRecord, krcontext->ptRecord);
    
        /* This is what the difference between SDI and DDI:
         * SDI only set once, while DDI still need to traversal all the list
         */
        krsdi->eValueInd = KR_VALUE_SETED;
        break;
        
        node = node->prev;
    }
    
    return 0;
}