c語言 開源hash項目 —— uthash


 1 //------------------------------------------
 2 //      c語言 開源hash項目 —— uthash 
 3 //
 4 //
 5 //eg: 對 字符串進行查找和刪除 字符指針
 6 //   
 7 //    warning: uthash 對  字符指針和字符數組,
 8 //                        插入的函數是不一樣的,查找的函數是一致的
 9 //        對所有的類型,刪除的操作
10 //-------------------------------------------
11 
12 #include "gtest/gtest.h"
13 #include <iostream>
14 using namespace std;
15 
16 #include"uthash/uthash.h" 
17 
18 typedef struct {
19     int ikey;                    /* key */
20     char value[10];
21     UT_hash_handle hh;
22 }uthash_int;
23 
24 // 查找
25 uthash_int *find_uthash_int(uthash_int *g_users, int ikey)
26 {
27     uthash_int *s = NULL;
28     HASH_FIND_INT(g_users, &ikey, s);        // find int 
29     return s;
30 }
31 
32 // 插入
33 void add_uthash_int(uthash_int *g_users, int ikey, char *value_buf)
34 {
35     uthash_int *s = NULL;
36     HASH_FIND_INT(g_users, &ikey, s);  /* 插入前先查看key值是否已經在hash表g_users里面了 */
37     if (s == NULL) {
38         s = (uthash_int*)malloc(sizeof(uthash_int));
39         s->ikey = ikey;
40         HASH_ADD_INT(g_users, ikey, s);  /* 這里必須明確告訴插入函數,自己定義的hash結構體中鍵變量的名字 */
41     }
42     strcpy(s->value, value_buf);
43 }
44 
45 // 刪除
46 void delete_uthash_int(uthash_int *g_users, int ikey)
47 {
48     uthash_int *s = NULL;
49     HASH_FIND_INT(g_users, &ikey, s);
50     if (s == NULL) {
51         HASH_DEL(g_users, s); 
52         free(s);
53     }
54 }
55 
56 // clear 
57 void clear_uthash_int(uthash_int *g_users)
58 {
59     uthash_int *current_user = NULL;
60     uthash_int *tmp = NULL;
61     HASH_ITER(hh, g_users, current_user, tmp) {
62         HASH_DEL(g_users, current_user);
63         free(current_user);
64     }
65 }
66 
67 TEST(test, test_01)
68 {
69 
70 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM