22 static bool GetBit(
const int& BitN,
const uchar& Val);
31 typedef unsigned short int TB2;
44 static int GetL2(
const TB2& Val);
128 const int& FlagN1,
const int& FlagN2=-1,
const int& FlagN3=-1,
129 const int& FlagN4=-1,
const int& FlagN5=-1,
const int& FlagN6=-1,
130 const int& FlagN7=-1,
const int& FlagN8=-1,
const int& FlagN9=-1);
132 B4V(4, 4){
Incl(FSet1);
Incl(FSet2);}
138 if (
this!=&FSet){B4V=FSet.
B4V;}
return *
this;}
144 B4V[0]=0; B4V[1]=0; B4V[2]=0; B4V[3]=0;}
147 (
uint(B4V[0])==0)&&(
uint(B4V[1])==0)&&
148 (
uint(B4V[2])==0)&&(
uint(B4V[3])==0);}
150 Assert((0<=FlagN)&&(FlagN<Bits));
154 B4V[0]|=FSet.
B4V[0]; B4V[1]|=FSet.
B4V[1];
155 B4V[2]|=FSet.
B4V[2]; B4V[3]|=FSet.
B4V[3];}
156 bool In(
const int& FlagN)
const {
157 Assert((0<=FlagN)&&(FlagN<Bits));
186 Assert((0<=MnBitN)&&(MnBitN<Bits));
187 return (B1>>MnBitN)==(BSet.
B1>>MnBitN);}
191 Assert((0<=BitN)&&(BitN<Bits));
194 Assert((0<=BitN)&&(BitN<Bits));
196 bool In(
const int& BitN)
const {
197 Assert((0<=BitN)&&(BitN<Bits));
199 void SetBit(
const int& BitN,
const bool& Bool){
200 if (Bool)
Incl(BitN);
else Excl(BitN);}
202 Assert((0<=BitN)&&(BitN<Bits));
210 void PutInt(
const int& MnBitN,
const int& MxBitN,
const int& Val){
211 Assert((0<=MnBitN)&&(MnBitN<=MxBitN)&&(MxBitN<Bits));
214 int GetInt(
const int& MnBitN,
const int& MxBitN)
const {
215 Assert((0<=MnBitN)&&(MnBitN<=MxBitN)&&(MxBitN<Bits));
229 return TB8Set(LBSet)&=RBSet;}
231 return TB8Set(LBSet)|=RBSet;}
233 return TB8Set(LBSet)^=RBSet;}
258 Assert((0<=MnBitN)&&(MnBitN<Bits));
259 return (B4>>MnBitN)==(BSet.
B4>>MnBitN);}
263 Assert((0<=BitN)&&(BitN<Bits));
266 Assert((0<=BitN)&&(BitN<Bits));
268 bool In(
const int& BitN)
const {
269 Assert((0<=BitN)&&(BitN<Bits));
271 void SetBit(
const int& BitN,
const bool& Bool){
272 if (Bool)
Incl(BitN);
else Excl(BitN);}
274 Assert((0<=BitN)&&(BitN<Bits));
284 void PutInt(
const int& MnBitN,
const int& MxBitN,
const int& Val){
285 Assert((0<=MnBitN)&&(MnBitN<=MxBitN)&&(MxBitN<Bits));
288 int GetInt(
const int& MnBitN,
const int& MxBitN)
const {
289 Assert((0<=MnBitN)&&(MnBitN<=MxBitN)&&(MxBitN<Bits));
318 void SetLastB4(){B4T[B4s-1]&=LastB4Mask;}
320 TBSet(): B4s(0), Bits(0), LastB4Mask(0), B4T(NULL){}
324 B4s(0), Bits(0), LastB4Mask(0), B4T(NULL){Gen(_Bits);}
338 bool operator==(
const TBSet& BSet)
const;
340 void Gen(
const int& _Bits);
345 Assert((0<=BitN)&&(BitN<Bits));
349 Assert((0<=BitN)&&(BitN<Bits));
352 bool In(
const int& BitN)
const {
353 Assert((0<=BitN)&&(BitN<Bits));
356 void SetBit(
const int& BitN,
const bool& Bool){
357 if (Bool){Incl(BitN);}
else {Excl(BitN);}}
359 Assert((0<=BitN)&&(BitN<Bits));
363 SetBit(BitN, !GetBit(BitN));}
368 Assert(Bits>=64);
uint64 Val; memcpy(&Val, B4T, 8);
return Val;}
372 for (
int B4N=0; B4N<B4s; B4N++){B4T[B4N]=~B4T[B4N];}
return *
this;}
375 for (
int B4N=0; B4N<B4s; B4N++){B4T[B4N]&=BSet.
B4T[B4N];}
return *
this;}
378 for (
int B4N=0; B4N<B4s; B4N++){B4T[B4N]|=BSet.
B4T[B4N];}
return *
this;}
380 Incl(BitN);
return *
this;}
383 for (
int B4N=0; B4N<B4s; B4N++){B4T[B4N]^=BSet.
B4T[B4N];}
return *
this;}
386 return ~
TBSet(BSet);}
388 return TBSet(LBSet)&=RBSet;}
390 return TBSet(LBSet)|=RBSet;}
392 return TBSet(LBSet)^=RBSet;}
395 return TBSet(LBSet)&=BitN;}
397 return TBSet(LBSet)|=BitN;}
399 return TBSet(LBSet)^=BitN;}
TB32Set & operator<<=(const int &ShiftBits)
bool operator<(const TB32Set &BSet) const
TB8Set & operator|=(const TB8Set &BSet)
TBSet & operator|=(const int &BitN)
TB8Set(const TB8Set &B8Set)
void SwitchBit(const int &BitN)
static uint GetP2(const int &P2Exp)
void SetBit(const int &BitN, const bool &Bool)
TB32Set & operator&=(const TB32Set &BSet)
bool IsPrefix(const TB8Set &BSet, const int &MnBitN) const
TFSet & operator|(const TFSet &FSet)
void SetBit(const int &BitN, const bool &Bool)
friend TBSet operator|(const TBSet &LBSet, const int &BitN)
TB2Def & operator=(const TB2Def &)
friend TB32Set operator&(const TB32Set &LBSet, const TB32Set &RBSet)
TB8Set & operator=(const TB8Set &BSet)
friend TB8Set operator^(const TB8Set &LBSet, const TB8Set &RBSet)
bool IsPrefix(const TB32Set &BSet, const int &MnBitN) const
void SetBit(const int &BitN, const bool &Bool)
bool GetBit(const int &BitN) const
void Incl(const int &FlagN)
friend TBSet operator|(const TBSet &LBSet, const TBSet &RBSet)
TB32Set & operator|=(const TB32Set &BSet)
static int GetL2(const uint &Val)
void PutInt(const int &MnBitN, const int &MxBitN, const int &Val)
TBSet & operator&=(const TBSet &BSet)
void SwitchBit(const int &BitN)
int GetInt(const int &MnBitN, const int &MxBitN) const
bool In(const int &BitN) const
TFSet(const TFSet &FSet1, const TFSet &FSet2)
static int GetL2(const TB2 &Val)
friend TB32Set operator^(const TB32Set &LBSet, const TB32Set &RBSet)
friend TBSet operator~(const TBSet &BSet)
TB32Set & operator^=(const TB32Set &BSet)
TB8Set & operator^=(const TB8Set &BSet)
void Save(TSOut &SOut) const
void Save(TSOut &SOut) const
void Excl(const int &BitN)
bool operator<(const TB8Set &BSet) const
void Save(TSOut &SOut) const
void Incl(const int &BitN)
#define ClassTPV(TNm, PNm, TNmV)
int GetInt(const int &MnBitN, const int &MxBitN) const
friend TB8Set operator|(const TB8Set &LBSet, const TB8Set &RBSet)
TFSet & operator=(const TFSet &FSet)
bool GetBit(const int &BitN) const
static uint GetP2(const int &P2Exp)
friend TBSet operator^(const TBSet &LBSet, const TBSet &RBSet)
void PutInt(const int &MnBitN, const int &MxBitN, const int &Val)
static int GetB1Bits(const TB1 &B1)
static bool GetBit(const int &BitN, const uchar &Val)
unsigned long long uint64
TB8Set & operator=(const uchar &_B1)
bool operator==(const TB32Set &BSet) const
static int GetL2(const uchar &Val)
void * LoadNewBf(const int &BfL)
TB32Set & operator>>=(const int &ShiftBits)
bool operator==(const TFSet &FSet) const
TB8Set & operator>>=(const int &ShiftBits)
TB8Set & operator|=(const int &BitN)
friend TB32Set operator|(const TB32Set &LBSet, const TB32Set &RBSet)
friend TB8Set operator&(const TB8Set &LBSet, const TB8Set &RBSet)
bool In(const int &BitN) const
TB8Set & operator&=(const TB8Set &BSet)
void Incl(const int &BitN)
friend TBSet operator&(const TBSet &LBSet, const int &BitN)
TBSet & operator|=(const TBSet &BSet)
TB32Set & operator=(const TB32Set &BSet)
TB1Def & operator=(const TB1Def &)
void SaveBf(const void *Bf, const TSize &BfL)
static int GetB4Bits(const TB4 &B4)
static const TB4Def B4Def
void Save(const bool &Bool)
static PBSet New(const int &Bits)
TB32Set(const TB32Set &B32Set)
static const TFSet EmptyFSet
static int GetB2Bits(const TB2 &B2)
void Incl(const TFSet &FSet)
bool In(const int &BitN) const
bool GetBit(const int &BitN) const
friend TB8Set operator~(const TB8Set &BSet)
void Save(TSOut &SOut) const
static const TB1Def B1Def
void LoadBf(const void *Bf, const TSize &BfL)
friend TB32Set operator~(const TB32Set &BSet)
void Incl(const int &BitN)
static PBSet Load(TSIn &SIn)
TBSet & operator^=(const TBSet &BSet)
bool operator==(const TB8Set &BSet) const
void Excl(const int &BitN)
void Save(TSOut &SOut) const
friend TBSet operator^(const TBSet &LBSet, const int &BitN)
void Excl(const int &BitN)
TFSet & operator|(const int &FlagN)
static uint GetP2(const int &P2Exp)
friend TBSet operator&(const TBSet &LBSet, const TBSet &RBSet)
TB8Set & operator<<=(const int &ShiftBits)
TB4Def & operator=(const TB4Def &)
static const TB2Def B2Def
bool In(const int &FlagN) const