#ifndef	ACL_LOADCFG_INCLUDE_H
#define	ACL_LOADCFG_INCLUDE_H

# ifdef	__cplusplus
extern "C" {
# endif

#include "acl_define.h"
#include "acl_array.h"

typedef struct ACL_CFG_PARSER ACL_CFG_PARSER;

typedef struct ACL_CFG_LINE {
	char **value;	/* store the separated values of the line */
	char *pdata;	/* point to the beginning of the line data */
	int   ncount;	/* how many values in this line data,
			 * if ncount == 0, then this is an
			 * invalid line, but still be stored
			 * here in pdata.
			 */
	int   line_number;	/* 该行在配置文件中的行号 */
} ACL_CFG_LINE;

typedef struct ACL_CFG_FN {
	const char  *name;
	int   (*func)(const ACL_CFG_LINE *);
} ACL_CFG_FN;

typedef void (*ACL_CFG_WALK_FN)(void *arg);

ACL_API ACL_CFG_PARSER *acl_cfg_parser_load(const char *pathname, const char *delimiter);
ACL_API void acl_cfg_parser_free(ACL_CFG_PARSER *parser);
ACL_API void acl_cfg_parser_walk(ACL_CFG_PARSER *parser, ACL_CFG_WALK_FN walk_fn);
ACL_API int acl_cfg_line_replace(ACL_CFG_LINE *cfg_line, const char **value, int from, int to);
ACL_API ACL_CFG_LINE *acl_cfg_parser_index(const ACL_CFG_PARSER *parser, int idx);
ACL_API int acl_cfg_parser_size(const ACL_CFG_PARSER *parser);
ACL_API int acl_cfg_parser_dump(const ACL_CFG_PARSER *parser, const char *pathname, const char *delimiter);
ACL_API int acl_cfg_parser_append(ACL_CFG_PARSER *parser, ACL_CFG_LINE *cfg_line);
ACL_API int acl_cfg_parser_delete(ACL_CFG_PARSER *parser, const char *name);
ACL_API ACL_CFG_LINE *acl_cfg_line_new(const char **value, int ncount);

# ifdef	__cplusplus
}
# endif

#endif

