#ifndef ACL_STRINGOPS_INCLUDE_H
#define ACL_STRINGOPS_INCLUDE_H

#ifdef  __cplusplus
extern "C" {
#endif

#include "acl_define.h"

/**
 * 判断给定字符串是否全为数字
 * @param str {const char*} 字符串
 * @return {int} 0: 否; 1: 是
 */
ACL_API int acl_alldig(const char *str);

/**
 * 判断给定字符串是否为浮点数
 * @param str {const char*} 字符串
 * @return {int} 0: 否; 1: 是
 */
ACL_API int acl_is_double(const char *s);

/**
 * 将多个字符串拼接成一个字符串
 * @param arg0 {const char*} 第一个非空字符串
 * @param ... 后续的字符串集合，结束符是 NULL
 * @return {char*} 结果字符串，不为空, 该字符串需要调用 acl_myfree 释放
 */
ACL_API char *acl_concatenate(const char *arg0,...);

/**
 * 从一个全路径的文件名中取得文件名部分，如：
 * 从 "/tmp/test.txt" 或 "\\tmp\\test.txt" 中取得 test.txt
 * @param path {const char*} 带有路径的文件名，如："/tmp/test.txt"
 *  或 "\\tmp\\test.txt"
 * @return {const char*} 文件名，该返回值不需要释放，如果返回的地址
 *  为空串(即第一个字节为 '\0') 则说明所给路径不含文件名
 */
ACL_API const char *acl_safe_basename(const char *path);

/**
 * 将所给的字符串进行分隔，分别取出 name, value 地址, 输入字符串可以为
 * {sp}{name}{sp}={sp}{value}{sp}, 如果分析成功，则将结果分别进行存储,
 * 其中 {sp} 字符可以为: 空格, "\t", "\r", "\n"
 * @param buf {char*} 输入的字符串, 不能为空
 * @param name {char**} 存储结果的地址指针，不能为空
 * @param value {char**} 存储结果的地址指针，不能为空
 * @return {const char*} 出错原因，如果为空则表示解析成功，否则表示解析失败并返回
 *  失败原因
 */
ACL_API const char *acl_split_nameval(char *buf, char **name, char **value);

#ifdef  __cplusplus
}
#endif

#endif

