mdc.h

  1. #ifndef __zlog_mdc_h
  2. #define __zlog_mdc_h
  3.  
  4. #include "zc_defs.h"
  5.  
  6. typedef struct zlog_mdc_s zlog_mdc_t;
  7. struct zlog_mdc_s{
  8. zc_hashtable_t *tab;
  9. };
  10.  
  11. zlog_mdc_t *zlog_mdc_new(void);
  12. void zlog_mdc_del(zlog_mdc_t *a_mdc);
  13. void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag);
  14.  
  15. void zlog_mdc_clean(zlog_mdc_t *a_mdc);
  16. int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value);
  17. char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key);
  18. void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key);
  19.  
  20. typedef struct zlog_mdc_kv_s{
  21. char key[MAXLEN_PATH + ];
  22. char value[MAXLEN_PATH + ];
  23. size_t value_len;
  24. }zlog_mdc_kv_t;
  25.  
  26. zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key);
  27.  
  28. #endif

mdc.c

  1. /**
  2. * 文件作用
  3. */
  4.  
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <errno.h>
  8.  
  9. #include "mdc.h"
  10. #include "zc_defs.h"
  11.  
  12. void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag){
  13. zc_assert(a_mdc,);
  14.  
  15. zc_hashtable_entry_t *a_entry;
  16. zlog_mdc_kv_t *a_mdc_kv;
  17.  
  18. zc_hashtable_foreach(a_mdc->tab, a_entry){
  19. a_mdc_kv = a_entry->value;
  20. zc_profile(flag, "---mdc_kv[%p][%s]-[%s]---",
  21. a_mdc_kv,
  22. a_mdc_kv->key,
  23. a_mdc_kv->value
  24. );
  25. }
  26. return;
  27. }
  28.  
  29. //-------------------------------------------------------------------------
  30. void zlog_mdc_del(zlog_mdc_t *a_mdc){
  31. zc_assert(a_mdc,);
  32. if(a_mdc->tab){
  33. zc_hashtable_del(a_mdc->tab);
  34. }
  35. free(a_mdc);
  36. zc_debug("zlog_mdc_del[%p]", a_mdc);
  37. return;
  38. }
  39.  
  40. static void zlog_mdc_kv_del(zlog_mdc_kv_t *a_mdc_kv){
  41. free(a_mdc_kv);
  42. zc_debug("zlog_mdc_kv_del[%p]", a_mdc_kv);
  43. return;
  44. }
  45.  
  46. /**
  47. * struct zlog_mdc_kv_s{
  48. * char key[MAXLEN_PATH + 1];
  49. * char value[MAXLEN_PATH + 1];
  50. * size_t value_len;
  51. * }
  52. */
  53. static zlog_mdc_kv_t *zlog_mdc_kv_new(const char *key, const char *value){
  54. zlog_mdc_kv_t *a_mdc_kv;
  55.  
  56. a_mdc_kv = (zlog_mdc_kv_t *)calloc(, sizeof(zlog_mdc_kv_t));
  57. if(!a_mdc_kv){
  58. zc_error("calloc fail, errno[%d]", errno);
  59. return NULL;
  60. }
  61.  
  62. snprintf(a_mdc_kv->key, sizeof(a_mdc_kv->key), "%s", key);
  63. a_mdc_kv->value_len = snprintf(a_mdc_kv->value, sizeof(a_mdc_kv->value), "%s", value);
  64. return a_mdc_kv;
  65. }
  66.  
  67. /**
  68. * struct zlog_mdc_s{
  69. * zc_hashtable_t *tab;
  70. * }
  71. */
  72. zlog_mdc_t *zlog_mdc_new(void){
  73. zlog_mdc_t *a_mdc;
  74.  
  75. a_mdc = calloc(, sizeof(zlog_mdc_t));
  76. if(!a_mdc){
  77. zc_error("calloc fail, errno[%d]", errno);
  78. return NULL;
  79. }
  80.  
  81. a_mdc->tab = zc_hashtable_new(
  82. ,
  83. zc_hashtable_str_hash,
  84. zc_hashtable_str_equal,
  85. NULL,
  86. (zc_hashtable_del_fn) zlog_mdc_kv_del
  87. );
  88. if(!a_mdc->tab){
  89. zc_error("zc_hashtable_new_fail");
  90. goto err;
  91. }
  92.  
  93. return a_mdc;
  94. err:
  95. zlog_mdc_del(a_mdc);
  96. return NULL;
  97. }
  98.  
  99. int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value){
  100. zlog_mdc_kv_t *a_mdc_kv;
  101.  
  102. a_mdc_kv = zlog_mdc_kv_new(key, value);
  103. if(!a_mdc_kv){
  104. zc_error("zlog_new_kv_new failed");
  105. return -;
  106. }
  107.  
  108. if(zc_hashtable_put(a_mdc->tab, a_mdc_kv->key, a_mdc_kv)){
  109. zc_error("zc_hashtable_put fail");
  110. zlog_mdc_kv_del(a_mdc_kv);
  111. return -;
  112. }
  113.  
  114. return ;
  115. }
  116.  
  117. char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key){
  118. zlog_mdc_kv_t *a_mdc_kv;
  119.  
  120. a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
  121. if(!a_mdc_kv){
  122. zc_error("zc_hashtable_get fail");
  123. return NULL;
  124. }else{
  125. return a_mdc_kv->value;
  126. }
  127. }
  128.  
  129. zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key){
  130. zlog_mdc_kv_t *a_mdc_kv;
  131.  
  132. a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
  133. if(!a_mdc_kv){
  134. zc_error("zc_hashtable_get fail");
  135. return NULL;
  136. }else{
  137. return a_mdc_kv;
  138. }
  139. }
  140.  
  141. void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key){
  142. zc_hashtable_remove(a_mdc->tab, key);
  143. return;
  144. }
  145.  
  146. void zlog_mdc_clean(zlog_mdc_t *a_mdc){
  147. zc_hashtable_clean(a_mdc->tab);
  148. return;
  149. }

test_mdc.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4.  
  5. #include "zc_defs.h"
  6. #include "zc_hashtable.h"
  7. #include "mdc.h"
  8.  
  9. #include "zc_profile.c"
  10.  
  11. #include "mdc.c"
  12. #include "zc_hashtable.c"
  13.  
  14. int main(){
  15. zlog_mdc_t *a_mdc;
  16. a_mdc = zlog_mdc_new();
  17. if(!a_mdc){
  18. fprintf(stderr, "%s", "zlog_mdc_new fail");
  19. return -;
  20. }
  21.  
  22. zlog_mdc_put(a_mdc, "name", "jimmy");
  23. char *name = zlog_mdc_get(a_mdc, "name");
  24. printf("name = %s\n", name);
  25.  
  26. time_t tt;
  27. struct tm timer;
  28. char time_str[];
  29. time(&tt);
  30. localtime_r(&tt, &timer);
  31. strftime(time_str, , "%Y-%m-%d %H:%M:%S", &timer);
  32. zlog_mdc_put(a_mdc, "time", time_str);
  33. char *ps = zlog_mdc_get(a_mdc, "time");
  34. printf("time = %s\n", ps);
  35.  
  36. zlog_mdc_profile(a_mdc, ZC_DEBUG);
  37. zlog_mdc_clean(a_mdc);
  38. zlog_mdc_profile(a_mdc, ZC_DEBUG);
  39.  
  40. zlog_mdc_del(a_mdc);
  41. }

zlog学习笔记(mdc)的更多相关文章

  1. zlog学习笔记(level_list)

    level_list.h /** * */ #ifndef __zlog_level_list_h #define __zlog_level_list_h zc_arraylist_t *zlog_l ...

  2. zlog学习笔记(level)

    level.h /** * */ #ifndef __zlog_level_h #define __zlog_level_h #include "stdio.h" #include ...

  3. zlog学习笔记(zc_hashtable)

    zc_hashtable.h /** * hashtable */ #ifndef __zc_hashtable_h #define __zc_hashtable_h typedef struct z ...

  4. zlog学习笔记(zc_arraylist)

    zc_arraylist.h /** * 实现类似列表的功能 * */ #ifndef __zc_arraylist_h #define __zc_arraylist_h #define ARRAY_ ...

  5. zlog学习笔记(zc_profile)

    zc_profile.h #ifndef __zlog_profile_h #define __zlog_profile_h #define EMPTY() #define zc_assert(exp ...

  6. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  7. 【Visual C++】游戏编程学习笔记之四:透明动画实现

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...

  8. 【Visual C++】游戏编程学习笔记之三:游戏循环的使用

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44208419 作者:Zee ...

  9. 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...

随机推荐

  1. 操作系统开发系列—12.f.在内核中添加中断处理 ●

    因为CPU只有一个,同一时刻要么是客户进程在运行,要么是操作系统在运行,如果实现进程,需要一种控制权转换机制,这种机制便是中断. 要做的工作有两项:设置8259A和建立IDT. /*========= ...

  2. iOS cookie问题

    获取cookie时汉字应转换为UTF8格式

  3. iOS关于CoreAnimation动画知识总结

    一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...

  4. 手机影音1--SplashActivity

    /** * 1.设置被启动的Activity为单例模式 */ public class SplashActivity extends Activity { /** * 是否已经启动主页面 */ pri ...

  5. iOS如何获取网络图片(三)有沙盒的

    沙盒 沙盒简介 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 Documents:苹果建议将程序中建立的或在程 ...

  6. c中的指针

    一. 指针前奏 1. 指针的重要性 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言. 2. 小需求 l void change(int  n)函数 ...

  7. OC 入门

    OC 入门 关键词正确写法: Xcode 错误的写法: xcode iPhone 错误的写法:IPhone iOS 错误的写法:IOS OC 全称: Objective-C 错误的写法:Object- ...

  8. 学习Coding-iOS开源项目日志(三)

    继续前两篇,接着本第三篇<学习Coding-iOS开源项目日志(三)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的 ...

  9. Oracle global database name与db link的纠缠关系

    ORACLE数据库中Global Database Name与DB LINKS的关系还真是有点纠缠不清,在说清楚这个关系前,我们先来了解一下Global Database Name的概念 Global ...

  10. mysql技巧之select count的比较

        在工作过程中,时不时会有开发咨询几种select count()的区别,我总会告诉他们使用select count(*) 就好.下文我会展示几种sql的执行计划来说明为啥是这样.   1.测试 ...