zoukankan      html  css  js  c++  java
  • zlog学习笔记(mdc)

    mdc.h

    #ifndef __zlog_mdc_h
    #define __zlog_mdc_h
    
    #include "zc_defs.h"
    
    typedef struct zlog_mdc_s zlog_mdc_t;
    struct zlog_mdc_s{
            zc_hashtable_t *tab;
    };
    
    zlog_mdc_t *zlog_mdc_new(void);
    void zlog_mdc_del(zlog_mdc_t *a_mdc);
    void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag);
    
    void zlog_mdc_clean(zlog_mdc_t *a_mdc);
    int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value);
    char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key);
    void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key);
    
    typedef struct zlog_mdc_kv_s{
            char key[MAXLEN_PATH + 1];
            char value[MAXLEN_PATH + 1];
            size_t value_len;
    }zlog_mdc_kv_t;
    
    zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key);
    
    #endif
    View Code

    mdc.c

    /**
     * 文件作用
     */
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    
    #include "mdc.h"
    #include "zc_defs.h"
    
    void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag){
            zc_assert(a_mdc,);
    
            zc_hashtable_entry_t *a_entry;
            zlog_mdc_kv_t *a_mdc_kv;
    
            zc_hashtable_foreach(a_mdc->tab, a_entry){
                    a_mdc_kv = a_entry->value;
                    zc_profile(flag, "---mdc_kv[%p][%s]-[%s]---",
                                    a_mdc_kv,
                                    a_mdc_kv->key,
                                    a_mdc_kv->value
                    );
            }
            return;
    }
    
    //-------------------------------------------------------------------------
    void zlog_mdc_del(zlog_mdc_t *a_mdc){
            zc_assert(a_mdc,);
            if(a_mdc->tab){
                    zc_hashtable_del(a_mdc->tab);
            }
            free(a_mdc);
            zc_debug("zlog_mdc_del[%p]", a_mdc);
            return;
    }
    
    static void zlog_mdc_kv_del(zlog_mdc_kv_t *a_mdc_kv){
            free(a_mdc_kv);
            zc_debug("zlog_mdc_kv_del[%p]", a_mdc_kv);
            return;
    } 
    
    /**
     *      struct zlog_mdc_kv_s{
     *              char key[MAXLEN_PATH + 1];
     *              char value[MAXLEN_PATH + 1];
     *              size_t value_len;
     *      }
     */
    static zlog_mdc_kv_t *zlog_mdc_kv_new(const char *key, const char *value){
            zlog_mdc_kv_t *a_mdc_kv;
    
            a_mdc_kv = (zlog_mdc_kv_t *)calloc(1, sizeof(zlog_mdc_kv_t));
            if(!a_mdc_kv){
                    zc_error("calloc fail, errno[%d]", errno);
                    return NULL;
            }
    
            snprintf(a_mdc_kv->key, sizeof(a_mdc_kv->key), "%s", key);
            a_mdc_kv->value_len = snprintf(a_mdc_kv->value, sizeof(a_mdc_kv->value), "%s", value);
            return a_mdc_kv;
    }
    
    
    /**
     * struct zlog_mdc_s{
     *              zc_hashtable_t *tab;
     * }
     */
    zlog_mdc_t *zlog_mdc_new(void){
            zlog_mdc_t *a_mdc;
    
            a_mdc = calloc(1, sizeof(zlog_mdc_t));
            if(!a_mdc){
                    zc_error("calloc fail, errno[%d]", errno);
                    return NULL;
            }
    
            a_mdc->tab = zc_hashtable_new(
                    20,
                    zc_hashtable_str_hash,
                    zc_hashtable_str_equal,
                    NULL,
                    (zc_hashtable_del_fn) zlog_mdc_kv_del
            );
            if(!a_mdc->tab){
                    zc_error("zc_hashtable_new_fail");
                    goto err;
            }
    
            return a_mdc;
    err:
            zlog_mdc_del(a_mdc);
            return NULL;
    }
    
    int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value){
            zlog_mdc_kv_t *a_mdc_kv;
    
            a_mdc_kv = zlog_mdc_kv_new(key, value);
            if(!a_mdc_kv){
                    zc_error("zlog_new_kv_new failed");
                    return -1;
            }
    
            if(zc_hashtable_put(a_mdc->tab, a_mdc_kv->key, a_mdc_kv)){
                    zc_error("zc_hashtable_put fail");
                    zlog_mdc_kv_del(a_mdc_kv);
                    return -1;
            }
    
            return 0;
    }
    
    char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key){
            zlog_mdc_kv_t *a_mdc_kv;
    
            a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
            if(!a_mdc_kv){
                    zc_error("zc_hashtable_get fail");
                    return NULL;
            }else{
                    return a_mdc_kv->value;
            }
    }
    
    zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key){
            zlog_mdc_kv_t *a_mdc_kv;
    
            a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
            if(!a_mdc_kv){
                    zc_error("zc_hashtable_get fail");
                    return NULL;
            }else{
                    return a_mdc_kv;
            }
    }
    
    void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key){
            zc_hashtable_remove(a_mdc->tab, key);
            return;
    }
    
    void zlog_mdc_clean(zlog_mdc_t *a_mdc){
            zc_hashtable_clean(a_mdc->tab);
            return;
    }
    View Code

    test_mdc.c

    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    
    #include "zc_defs.h"
    #include "zc_hashtable.h"
    #include "mdc.h"
    
    #include "zc_profile.c"
    
    #include "mdc.c"
    #include "zc_hashtable.c"
    
    int main(){
            zlog_mdc_t *a_mdc;
            a_mdc = zlog_mdc_new();
            if(!a_mdc){
                    fprintf(stderr, "%s", "zlog_mdc_new fail");
                    return -1;
            }
    
            zlog_mdc_put(a_mdc, "name", "jimmy");
            char *name = zlog_mdc_get(a_mdc, "name");
            printf("name = %s
    ", name);
    
            time_t tt;
            struct tm timer;
            char time_str[20];
            time(&tt);
            localtime_r(&tt, &timer);
            strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", &timer);
            zlog_mdc_put(a_mdc, "time", time_str);
            char *ps = zlog_mdc_get(a_mdc, "time");
            printf("time = %s
    ", ps);
    
            zlog_mdc_profile(a_mdc, ZC_DEBUG);
            zlog_mdc_clean(a_mdc);
            zlog_mdc_profile(a_mdc, ZC_DEBUG);
    
            zlog_mdc_del(a_mdc);
    }
  • 相关阅读:
    公司真题-字节跳动
    全素组探求
    枚举
    求n个整数的最大公约数
    Ajax技术
    读文本文件
    JSTL标签库
    URL跟URi的区别
    常用的JSTL标签
    EL表达语言
  • 原文地址:https://www.cnblogs.com/bai-jimmy/p/5410084.html
Copyright © 2011-2022 走看看