메뉴 건너뛰기


Developer > Application

C,C++ Hash (wget 1.10.2 에서 추출함)

2013.11.27 02:22

푸우 조회 수:11806


wget 1.10.2 소스에서 추출한 hash.c입니다.
wget내에 있던 거라 사용하려면 약간의 변경이 필요합니다.
변경하기 싫다면 STANDALONE 정의하세요.
 
용도로는 메모리 DB로 사용할 수 있는데 이때 hash table을 이용하는 것 입니다.
 
주요 API는 다음과 같습니다.
 
 
     hash_table_new       -- creates the table.
     hash_table_destroy   -- destroys the table.
     hash_table_put       -- establishes or updates key->value mapping.
     hash_table_get       -- retrieves value of key.
     hash_table_get_pair  -- get key/value pair for key.
     hash_table_contains  -- test whether the table contains key.
     hash_table_remove    -- remove the key->value mapping for key.
     hash_table_map       -- iterate through table mappings.
     hash_table_clear     -- clear hash table contents.
     hash_table_count     -- return the number of entries in the table.
 
 
다음은 사용예입니다.
#include <stdio.h>
#include "hash.h"
 
int mapfun(void *key, void *val, void *arg)
{
  printf("MAP: %s:%s:%s\n", key, val, arg);
  return 0;
}

int main(int argc, char *argv[])
{
  struct hash_table *ht;
  char *key, *val;
  int ret;
  
  ht=make_string_hash_table(0);
  
  hash_table_put(ht, "a""1");
  hash_table_put(ht, "b""2");
  hash_table_put(ht, "c""3");
  hash_table_put(ht, "d""4");
  printf("============\n");
  hash_table_map(ht, mapfun, NULL);
  printf("============\n");
  //hash_table_clear(ht);
  printf("COUNT: %d\n", hash_table_count(ht));
  val=hash_table_get(ht, "c");
  printf("OUT: %s\n", val);
  hash_table_get_pair(ht, "d"&key, &val);
  printf("%s: %s\n", key, val);
  ret=hash_table_contains(ht, "b");
  printf("RET: %d\n", ret);
  ret=hash_table_contains(ht, "k");
  printf("RET: %d\n", ret);
  
  hash_table_remove(ht, "a");
  val=hash_table_get(ht, "a");
  printf("OUT: %s\n", val);
  hash_table_destroy(ht);
  
  return 0;
}


소스 출처 : http://www.gnu.org/software/wget/