#ifndef	__GID_OPER_INCLUDE_H__
#define	__GID_OPER_INCLUDE_H__

#ifdef	__cplusplus
extern "C" {
#endif

#include "lib_acl.h"

#define	GID_OK			200	/* 正常 */
#define	GID_ERR_SID		500	/* 会话 ID 号不对 */
#define	GID_ERR_OVERRIDE	501	/* 达到最大分配值 */
#define	GID_ERR_SAVE		502	/* 存储至磁盘时出错 */

/**
 * 根据错误号获得字符串描述
 * @param errnum {int} 错误号
 * @return {const char*} 错误描述
 */
const char *gid_serror(int errnum);

/**
 * 获取下一个GID号
 * @param path {const char*} 文件存储路径
 * @param tag {const char*} ID标识号
 * @param step {unsigned int} 每次的步进值
 * @param errnum {int*} 若非空，则记录出错原因
 * @return {acl_int64}, 如果返回值 < 0，则表示分配失败，
 *  出错原因参考 errnum 的返回值
 */
acl_int64 gid_next(const char *path, const char *tag,
	unsigned int step, int *errnum);

/**
 * 初始化，程序启动后应调用此函数初始化内部库
 * @param fh_limit {int} 缓存的文件句柄的最大个数
 * @param sync_gid {int} 每产生一个新的 gid 后是否同时同步至磁盘
 * @param debug_section {int} 调用用的标签值
 */
void gid_init(int fh_limit, int sync_gid, int debug_section);

/**
 * 程序退出前必须调用此函数，以使内存中数据刷新至磁盘
 */
void gid_finish(void);

#ifdef	__cplusplus
}
#endif

#endif
