hashmap的C语言实现

分享到:

源代码(适合Linux和Windows)包括:

    hashmap.c

    hashmap.h

MSVC测试文件:

    main.c

下面是源代码,最初来自github,我改写了几个地方,并重写了全部测试代码.没有内存泄露,请放心使用.

/**
 * hashmap.h
 */
#ifndef _HASHMAP_H_INCLUDED
#define _HASHMAP_H_INCLUDED
#define HMAP_E_OUTMEM   (-4)
/* Out of Memory */
#define HMAP_E_NOTFOUND (-3)
/* No such element */
#define HMAP_E_OVERFLOW (-2)
/* Hashmap is full */
#define HMAP_E_FAIL
(-1)
/* Hashmap api fail */
#define HMAP_S_OK
(0)
/* Success */
/**
 * void_ptr is a pointer. This allows you to put arbitrary structures in the hashmap.
 */
typedef void* void_ptr;
/**
 * hmap_t is a pointer to an internally maintained data structure.
 * Clients of this package do not need to know how hashmaps are
 * represented. They see and manipulate only hmap_t's.
 */
typedef void_ptr hmap_t;
/**
 * hmap_callback_func is a pointer to a function that can take two void_ptr arguments
 * and return an integer. Returns status code..
 */
typedef int (*hmap_callback_func)(void_ptr, void_ptr);
/**
 * Return an empty hashmap. Returns NULL if empty.
 */
extern hmap_t hashmap_create();
/**
 * Iteratively call fn with argument (value, arg) for each element data
 * in the hashmap. The function returns anything other than HMAP_S_OK
* the traversal is terminated. fn must not modify any hashmap functions.
 */
extern int hashmap_iterate(hmap_t in, hmap_callback_func fnIterValue, void_ptr arg);
/**
 * Add an element to the hashmap. Return HMAP_S_OK or HMAP_E_OUTMEM.
 */
extern int hashmap_put(hmap_t in, char* key, void_ptr elem);
/**
 * Get an element from the hashmap. Return HMAP_S_OK or HMAP_E_NOTFOUND.
 */
extern int hashmap_get(hmap_t in, char* key, void_ptr *elem);
/**
 * Remove an element from the hashmap. Return HMAP_S_OK or HMAP_E_NOTFOUND.
 */
extern int hashmap_remove(hmap_t in, char* key, void_ptr *outValue);
/**
 * Free the hashmap
 */
extern void hashmap_destroy(hmap_t in, hmap_callback_func fnFreeValue, void_ptr arg);
/**
 * Get the current size of a hashmap
 */
extern int hashmap_size(hmap_t in);
#endif /* _HASHMAP_H_INCLUDED */

昵    称:
验证码:

相关文档:

  • C++截图-二维码识别工具:BusyBoy.QReader
    实现截图和二维码识别的小工具 按下ctrl+alt+z截图 按下ctrl+alt+x识别二维码...
  • GObjects 预处理器:GOB
    GObject Builder (GOB) 是一个用来轻松创建 GObjects (glib objects) 的简单预处理器。它读取 C 代码中的类描述文件并生成 .c 和 .h 的文件。可以让...
  • C++指针的概念解读 超详细
    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,...
  • Trie树的C++实现
    Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。...
  • C++11语言扩展:常规特性
    本节内容:auto、decltype、基于范围的for语句、初始化列表、统一初始化语法和语义、右值引用和移动语义、Lambdas、noexcept防止抛出异常、...
  • C语言实现gsoap输出数据类型到XML的方法
    C语言实现gsoap输出数据类型到XML的方法...
  • 通用LINUX C类库 jzlibs
    通用LINUX C类库。 包含双向链表、单向链表、向量、哈希表、红黑树等经典数据结构及其算法...
  • C++的IO库 MeteoIO
    MeteoIO 是一个跨平台的 C++ 库,提供数据的格式化和协议无关的数据访问,提供安全可靠的I/O处理。...
  • 处理 WBXML 文档的C语言库 - WBXML Library (libwbxml)
    WBXML Library 是一个用来处理 WBXML(Wireless Binary XML) 文档的C语言库。包括一个WBXML解析器和编码器。...
  • C++获取时间的方法
    C++获取时间的方法...
  • Eclipse的C/C++开发环境 CDT
    Eclipse CDT 是 Eclipse 插件,它将把 Eclipse 转换为功能强大的 C/C++ IDE。它被设计为将 Java 开发人员喜爱的许多 Eclipse 优秀功能提供给 C/C++ 开...
  • C++ Resources Compiler - 生成 C++ 源码文件
    C++ Resources Compiler 是一个工具,用来生成一个 C++ 源码文件,包括相应的头文件,用以嵌入任意数据文件并提供一个 Resource 类用来访问这...
  • 纯C语言INI文件解析
    在一个跨平台( Android 、Windows、Linux )项目中配置文件用 INI 格式,自己写了个解析库,纯C语言的,简单好用。 可以解析 INI 格式...
  • C++格式化输出库 FastFormat
    FastFormat 是一个C/C++格式化输出的库,输入的参数是类型安全的/范型的/可扩展的。...
  • C++序列化框架:febird
    功能类似于 boost.serializaiton 或 google.protocolbuffer, 可以用在协议解析,大/小数据的序列化,有极高的性能(比boost.binary_archive快30~1000倍)...
  • C++11 多线程:数据保护
    在编写多线程程序时,多个线程同时访问某个共享资源,会导致同步的问题,这篇文章中我们将介绍 C++11 多线程编程中的数据保护。...
  • 用c语言实现的多平台开发库:TBOX
    TBOX是一个用c语言实现的多平台开发库,支持 windows、linux、mac、ios、android 以及其他嵌入式系统。...
  • C++异常处理
    C++异常处理...
  • C++多媒体处理库 libCVD
    libCVD 是一个高可移植和具备高性能的用于处理计算机视觉、图像、视频的C++库。其重点是提供简单高效的高质量的图形和视频处理方法...
  • C++ 插件框架:Pluma Framework
    Pluma 是一个开源的C++插件管理框架,以助于在应用程序中动态载入DLL而无需在意内部实现,它是轻量级、简化设计的。...