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

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

/* 在一个char内, 根据外部输入的位置信息(0 <= pos <= 7), 设置它所对应的二进制位的值 */
bool sw_char_setBit(char *c, int pos, char bit)
{
	if(!c || (pos < 0 || pos > 7)) return false;
	
	if(bit == 0x00) *c &= ~(0x01 << pos);
	else if(bit == 0x01) *c |= (0x01 << pos);
	else return false;

	return true;
}

/* 在一个char数组内, 根据外部输入的位置信息(pos >= 0), 得到它所对应的二进制位的值 */
char sw_chararry_getBit(const char *buf, int bufSize, int pos)
{
	if(!buf || bufSize <= 0 || (pos < 0 || pos > bufSize*8-1)) return -1;
	
	return sw_char_getBit(buf[pos/8], pos%8);
}

/* 在一个char数组内, 根据外部输入的位置信息(pos >= 0), 设置它所对应的二进制位的值 */
bool sw_chararry_setBit(char *buf, int bufSize, int pos, char bit)
{
	if(!buf || bufSize <= 0 || (pos < 0 || pos > bufSize*8-1)) return false;
	
	return sw_char_setBit(&buf[pos/8], pos%8, bit);
}
