#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 aSet;

     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