/************************************************************************
 * AUTHOR: NiuJiuRu
 * FILENAME: swchar.h
 * DESCRIPTION: 字符操作扩展函数
 * NOTE:
 * HISTORY:
 * 1, [2010-08-17] created by NiuJiuRu
 ***********************************************************************/
#ifndef __SWCHAR_H__
#define __SWCHAR_H__

// 判断字符c是否为"a-z"或"A-Z"的英文字符
#ifndef xisalpha
#define xisalpha(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
#endif

// 判断字符c是否为"a-z"的小写英文字符
#ifndef xislower
#define xislower(c) ((c) >= 'a' && (c) <= 'z')
#endif

// 判断字符c是否为"A-Z"的大写英文字符
#ifndef xisupper
#define xisupper(c) ((c) >= 'A' && (c) <= 'Z')
#endif

// 判断字符c是否为"0-9"的数字字符
#ifndef xisdigit
#define xisdigit(c) ((c) >= '0' && (c) <= '9')
#endif

// 判断字符c是否为"0-9"或"a-f"或"A-F"的16进制数字字符
#ifndef xisxdigit
#define xisxdigit(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'a' && (c) <= 'f') || ((c) >='A' && (c) <= 'F'))
#endif

// 判断字符c是否是控制字符(0x00-0x1F、0x7F)
#ifndef xiscntrl
#define xiscntrl(c) (((c) >= 0x00 && (c) <= 0x1F) || (c) == 0x7F)
#endif

// 判断字符c是否为标点符号或特殊符号
#ifndef xispunct
#define xispunct ispunct
#endif

// 判断字符c是否是空白字符(0x09-0x0D、0x20)
#ifndef xisspace
#define xisspace(c) (((c) >= 0x09 && (c) <= 0x0D) || (c) == 0x20)
#endif

#ifdef __cplusplus
extern "C"
{
#endif

/* 在一个char内, 根据外部输入的位置信息(0 <= pos <= 7), 得到它所对应的二进制位的值 */
char sw_char_getBit(char c, int pos);

/* 在一个char内, 根据外部输入的位置信息(0 <= pos <= 7), 设置它所对应的二进制位的值 */
bool sw_char_setBit(char *c, int pos, char bit);

/* 在一个char数组内, 根据外部输入的位置信息(pos >= 0), 得到它所对应的二进制位的值 */
char sw_chararry_getBit(const char *buf, int bufSize, int pos);

/* 在一个char数组内, 根据外部输入的位置信息(pos >= 0), 设置它所对应的二进制位的值 */
bool sw_chararry_setBit(char *buf, int bufSize, int pos, char bit);

#ifdef __cplusplus
}
#endif

#endif /* __SWCHAR_H__ */
