#ifndef __vMUDflags__
#define __vMUDflags__
// Bit example
//enum aff_t { AFF_0,AFF_1,AFF_2,AFF_3,A
// FF_4,AFF_5,AFF_6 };
// << sets bits
// >> removes bits
// ^ toggles bits
template
class flagset
{
typedef flagset
typedef unsigned char uc;
friend class flagset
public:
flagset() { memset(set,0,INDEX+1); };
~flagset() {};
flagset(aSet &f) { *this = f; };
aSet &operator = (aSet&f) { if(this == &f) return *this; short i = 0; while(i <= INDEX) set[i] = f.set[i++]; };
aSet &operator << (bit_t bit) { Set(bit); return *this; };
aSet &operator << (aSet&f) { Set(f);return *this; };
aSet &operator >> (bit_t bit) { Rem(bit); return *this; };
aSet &operator >> (aSet&f) { Rem(f);return *this; };
aSet &operator ^ (bit_t bit) { Tog(bit); return *this; };
aSet &operator ^ (aSet&f) { Tog(f);return *this; };
bool operator == (bit_t bit) { return Has(bit); };
bool operator == (aSet&f) { return Has(f); };
bool operator != (bit_t bit) { return !Has(bit); };
bool operator != (aSet&f) { return !Has(f); };
//this is only a test function if you want to see it work ;p
//////////////////////////////////////////////////////////////
void print(void)
{
int i = 0;
do
{
for(int x = 0;x != 9;++x)
if(set[i] & (1< } while(++i <= INDEX); }; ////////////////////////////////////////////////////////////// protected: private: void Set(int bit) { set[bit/8] |= (1<<(bit%8)); }; void Rem(int bit) { set[bit/8] &= ~(1<<(bit%8)); }; void Tog(int bit) { set[bit/8] ^= (1<<(bit%8)); }; bool Has(int bit) { return (set[bit/8] & (1<<(bit%8))): }; void Set(aSet &f) { int i = 0; while(i <= INDEX) set[i] |= f.set[i++]; }; void Rem(aSet &f) { int i = 0; while(i <= INDEX) set[i] &= ~f.set[i++]; }; void Tog(aSet &f) { int i = 0; while(i <= INDEX) set[i] ^= f.set[i++]; }; bool Has(aSet &f) { int i = 0; while(i <= INDEX) if(!(set[i] & f.set[i++])) return false; return true; }; uc set[INDEX+1]; }; #endif