mdc.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. * This file is part of the zlog Library.
  3. *
  4. * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com>
  5. *
  6. * Licensed under the LGPL v2.1, see the file COPYING in base directory.
  7. */
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <errno.h>
  11. #include "mdc.h"
  12. #include "zc_defs.h"
  13. void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag)
  14. {
  15. zc_hashtable_entry_t *a_entry;
  16. zlog_mdc_kv_t *a_mdc_kv;
  17. zc_assert(a_mdc,);
  18. zc_profile(flag, "---mdc[%p]---", a_mdc);
  19. zc_hashtable_foreach(a_mdc->tab, a_entry) {
  20. a_mdc_kv = a_entry->value;
  21. zc_profile(flag, "----mdc_kv[%p][%s]-[%s]----",
  22. a_mdc_kv,
  23. a_mdc_kv->key, a_mdc_kv->value);
  24. }
  25. return;
  26. }
  27. /*******************************************************************************/
  28. void zlog_mdc_del(zlog_mdc_t * a_mdc)
  29. {
  30. zc_assert(a_mdc,);
  31. if (a_mdc->tab) zc_hashtable_del(a_mdc->tab);
  32. zc_debug("zlog_mdc_del[%p]", a_mdc);
  33. free(a_mdc);
  34. return;
  35. }
  36. static void zlog_mdc_kv_del(zlog_mdc_kv_t * a_mdc_kv)
  37. {
  38. zc_debug("zlog_mdc_kv_del[%p]", a_mdc_kv);
  39. free(a_mdc_kv);
  40. }
  41. static zlog_mdc_kv_t *zlog_mdc_kv_new(const char *key, const char *value)
  42. {
  43. zlog_mdc_kv_t *a_mdc_kv;
  44. a_mdc_kv = calloc(1, sizeof(zlog_mdc_kv_t));
  45. if (!a_mdc_kv) {
  46. zc_error("calloc fail, errno[%d]", errno);
  47. return NULL;
  48. }
  49. snprintf(a_mdc_kv->key, sizeof(a_mdc_kv->key), "%s", key);
  50. a_mdc_kv->value_len = snprintf(a_mdc_kv->value, sizeof(a_mdc_kv->value), "%s", value);
  51. return a_mdc_kv;
  52. }
  53. zlog_mdc_t *zlog_mdc_new(void)
  54. {
  55. zlog_mdc_t *a_mdc;
  56. a_mdc = calloc(1, sizeof(zlog_mdc_t));
  57. if (!a_mdc) {
  58. zc_error("calloc fail, errno[%d]", errno);
  59. return NULL;
  60. }
  61. a_mdc->tab = zc_hashtable_new(20,
  62. zc_hashtable_str_hash,
  63. zc_hashtable_str_equal, NULL,
  64. (zc_hashtable_del_fn) zlog_mdc_kv_del);
  65. if (!a_mdc->tab) {
  66. zc_error("zc_hashtable_new fail");
  67. goto err;
  68. }
  69. //zlog_mdc_profile(a_mdc, ZC_DEBUG);
  70. return a_mdc;
  71. err:
  72. zlog_mdc_del(a_mdc);
  73. return NULL;
  74. }
  75. /*******************************************************************************/
  76. int zlog_mdc_put(zlog_mdc_t * a_mdc, const char *key, const char *value)
  77. {
  78. zlog_mdc_kv_t *a_mdc_kv;
  79. a_mdc_kv = zlog_mdc_kv_new(key, value);
  80. if (!a_mdc_kv) {
  81. zc_error("zlog_mdc_kv_new failed");
  82. return -1;
  83. }
  84. if (zc_hashtable_put(a_mdc->tab, a_mdc_kv->key, a_mdc_kv)) {
  85. zc_error("zc_hashtable_put fail");
  86. zlog_mdc_kv_del(a_mdc_kv);
  87. return -1;
  88. }
  89. return 0;
  90. }
  91. void zlog_mdc_clean(zlog_mdc_t * a_mdc)
  92. {
  93. zc_hashtable_clean(a_mdc->tab);
  94. return;
  95. }
  96. char *zlog_mdc_get(zlog_mdc_t * a_mdc, const char *key)
  97. {
  98. zlog_mdc_kv_t *a_mdc_kv;
  99. a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
  100. if (!a_mdc_kv) {
  101. zc_error("zc_hashtable_get fail");
  102. return NULL;
  103. } else {
  104. return a_mdc_kv->value;
  105. }
  106. }
  107. zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t * a_mdc, const char *key)
  108. {
  109. zlog_mdc_kv_t *a_mdc_kv;
  110. a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
  111. if (!a_mdc_kv) {
  112. zc_error("zc_hashtable_get fail");
  113. return NULL;
  114. } else {
  115. return a_mdc_kv;
  116. }
  117. }
  118. void zlog_mdc_remove(zlog_mdc_t * a_mdc, const char *key)
  119. {
  120. zc_hashtable_remove(a_mdc->tab, key);
  121. return;
  122. }