
#ifndef DKUTIL_PARSER_CHAR_UTIL_HPP
#define DKUTIL_PARSER_CHAR_UTIL_HPP


#include <dkutil/dkutil_c.hpp>
#include <dkutil_c/dkcString.h>


namespace dkutil{

///lpが空白文字かどうかを調べる。@return 空白らしきものだったらtrue
inline bool isSpace(int lp){
	return (TRUE==dkcIsSpace((BYTE)lp));
	//return (lp=='\0' || lp==0x0a || lp==0x0d || lp==' ' || lp=='\t');
	//if(!(lp=='\0' || lp==0x0a || lp==0x0d || lp==' ' || lp=='\t')){	return false;}
	//return true;
}

///@return 可視できるASCII文字だったらTRUE
inline bool isVisible(BYTE v){
	return (v >= 0x21 && v <= 0x7E);
	//return !(0x21 > v && 0x7E < v);
	//if((0x21 > v && 0x7E < v)){	return false;}
	//return true;
}
/**
@param c1[in] SJISの1バイト目
@param c2[in] SJISの2バイト目
*/
///@return 全角スペースだったらTRUE
inline bool is2ByteSpace(BYTE c1,BYTE c2){
	return (129==c1 && 64==c2);
}

///@return cが数字の文字定数だとTRUE
inline bool isDigit(int c){
	//return (c >= '0' && c <= '9')
	return (0 != ::isdigit(c));
	//if(::isdigit(c)){return true;}
	//return false;
}
///@return cが数字の文字列定数または'-'だとTRUE
inline bool isSignedDigit(int c){
	return (isDigit(c) || c == '-');
}

///@reurn cがa-z A-Z だったらTRUE
inline bool isAlpha(int c){
	return (0 != ::isalpha(c));
	//if(::isalpha(c)){return true;}
	//return false;
}
///@return cに入れた値が16進文字のだったらTRUE（ASCII
inline bool isHex(int c){
	return (isDigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'));
	//if(isDigit(c)){	return true;}
	//if(('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')){	return true;}
	//return false;
}
/*!
@param s[in] 文字列
@param len[in] sの文字数
@note
lenが1未満だったらFALSEを返す。（なぜならオーバーアクセスしちゃうから^^；
*/
///@return 文字列の最初の二文字が 0x (C言語では16進数を表す)だったらTRUE
inline bool is0x(const char *s,size_t len){
	if(len <= 1) return false;
	return (s[0]=='0' && (s[1]=='x' /*|| s[1]=='X'*/));
	/*if(s[0]=='0' && s[1]=='x'){
		return true;
	}
	return false;*/
}
///atoiのunsigned版
/*inline UINT atoui(const char *s){
	return atoll(s);//面倒なので64ビットで･･･(ｵｨ
}*/

}//end of dkutil namespace




#endif//end of include once
