00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef FXCHARSET_H
00025
#define FXCHARSET_H
00026
00027
namespace FX {
00028
00029
00030 class FXAPI FXCharset {
00031
private:
00032 FXuint s[8];
00033
private:
00034 FXCharset(FXuint a,FXuint b,FXuint c,FXuint d,FXuint e,FXuint f,FXuint g,FXuint h){
00035 s[0]=a;s[1]=b;s[2]=c;s[3]=d;s[4]=e;s[5]=f;s[6]=g;s[7]=h;
00036 }
00037 public:
00038
00039
00040 FXCharset(){clear();}
00041
00042
00043 FXCharset(
const FXCharset& a){
00044 s[0]=a.s[0];s[1]=a.s[1];s[2]=a.s[2];s[3]=a.s[3];s[4]=a.s[4];s[5]=a.s[5];s[6]=a.s[6];s[7]=a.s[7];
00045 }
00046
00047
00048 FXCharset(FXchar ch){
00049 clear(); s[((FXuchar)ch)>>5] |= (1<<(ch&31));
00050 }
00051
00052
00053 FXCharset(
const FXString& characters);
00054
00055
00056 operator FXString();
00057
00058
00059 FXbool has(FXchar ch)
const {
00060
return (s[((FXuchar)ch)>>5] & (1<<(ch&31)))!=0;
00061 }
00062
00063
00064 FXCharset& clear(){
00065 s[0]=s[1]=s[2]=s[3]=s[4]=s[5]=s[6]=s[7]=0;
00066
return *
this;
00067 }
00068
00069
00070 FXCharset& operator=(FXchar ch){
00071 clear(); s[((FXuchar)ch)>>5] |= (1<<(ch&31));
00072
return *
this;
00073 }
00074
00075
00076 FXCharset& operator+=(FXchar ch){
00077 s[((FXuchar)ch)>>5] |= (1<<(ch&31));
00078
return *
this;
00079 }
00080
00081
00082 FXCharset& operator-=(FXchar ch){
00083 s[((FXuchar)ch)>>5] &= ~(1<<(ch&31));
00084
return *
this;
00085 }
00086
00087
00088 FXCharset& operator=(
const FXString& characters);
00089
00090
00091 FXCharset& operator+=(
const FXString& characters);
00092
00093
00094 FXCharset& operator-=(
const FXString& characters);
00095
00096
00097 FXCharset& operator=(
const FXCharset& a){
00098 s[0]=a.s[0];s[1]=a.s[1];s[2]=a.s[2];s[3]=a.s[3];s[4]=a.s[4];s[5]=a.s[5];s[6]=a.s[6];s[7]=a.s[7];
00099
return *
this;
00100 }
00101
00102
00103 FXCharset& operator+=(
const FXCharset& a){
00104 s[0]|=a.s[0];s[1]|=a.s[1];s[2]|=a.s[2];s[3]|=a.s[3];s[4]|=a.s[4];s[5]|=a.s[5];s[6]|=a.s[6];s[7]|=a.s[7];
00105
return *
this;
00106 }
00107
00108
00109 FXCharset& operator-=(
const FXCharset& a){
00110 s[0]&=~a.s[0];s[1]&=~a.s[1];s[2]&=~a.s[2];s[3]&=~a.s[3];s[4]&=~a.s[4];s[5]&=~a.s[5];s[6]&=~a.s[6];s[7]&=~a.s[7];
00111
return *
this;
00112 }
00113
00114
00115 FXCharset& operator*=(
const FXCharset& a){
00116 s[0]&=a.s[0];s[1]&=a.s[1];s[2]&=a.s[2];s[3]&=a.s[3];s[4]&=a.s[4];s[5]&=a.s[5];s[6]&=a.s[6];s[7]&=a.s[7];
00117
return *
this;
00118 }
00119
00120
00121
friend FXAPI FXCharset operator-(
const FXCharset& a){
00122
return FXCharset(~a.s[0],~a.s[1],~a.s[2],~a.s[3],~a.s[4],~a.s[5],~a.s[6],~a.s[7]);
00123 }
00124
00125
00126
friend FXAPI FXCharset operator+(
const FXCharset& a,
const FXCharset& b){
00127
return FXCharset(a.s[0]|b.s[0],a.s[1]|b.s[1],a.s[2]|b.s[2],a.s[3]|b.s[3],a.s[4]|b.s[4],a.s[5]|b.s[5],a.s[6]|b.s[6],a.s[7]|b.s[7]);
00128 }
00129
00130
00131
friend FXAPI FXCharset operator-(
const FXCharset& a,
const FXCharset& b){
00132
return FXCharset(a.s[0]&~b.s[0],a.s[1]&~b.s[1],a.s[2]&~b.s[2],a.s[3]&~b.s[3],a.s[4]&~b.s[4],a.s[5]&~b.s[5],a.s[6]&~b.s[6],a.s[7]&~b.s[7]);
00133 }
00134
00135
00136
friend FXAPI FXCharset operator*(
const FXCharset& a,
const FXCharset& b){
00137
return FXCharset(a.s[0]&b.s[0],a.s[1]&b.s[1],a.s[2]&b.s[2],a.s[3]&b.s[3],a.s[4]&b.s[4],a.s[5]&b.s[5],a.s[6]&b.s[6],a.s[7]&b.s[7]);
00138 }
00139
00140
00141
friend FXAPI
int operator==(
const FXCharset& a,
const FXCharset& b){
00142
return a.s[0]==b.s[0] && a.s[1]==b.s[1] && a.s[2]==b.s[2] && a.s[3]==b.s[3] && a.s[4]==b.s[4] && a.s[5]==b.s[5] && a.s[6]==b.s[6] && a.s[7]==b.s[7];
00143 }
00144
00145
friend FXAPI
int operator!=(
const FXCharset& a,
const FXCharset& b){
00146
return a.s[0]!=b.s[0] || a.s[1]!=b.s[1] || a.s[2]!=b.s[2] || a.s[3]!=b.s[3] || a.s[4]!=b.s[4] || a.s[5]!=b.s[5] || a.s[6]!=b.s[6] || a.s[7]!=b.s[7];
00147 }
00148
00149
00150
friend FXAPI FXStream& operator<<(FXStream& store,
const FXCharset& cs);
00151
00152
00153
friend FXAPI FXStream& operator>>(FXStream& store,FXCharset& cs);
00154
00155 };
00156
00157 }
00158
00159
#endif