Main Page | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

bitvector.H

Go to the documentation of this file.
00001 // bitvector.H
00002 
00003 #ifndef BITVECTOR_H
00004 #define BITVECTOR_H
00005 
00006 #include <stdio.h>
00007 
00008 class bitvector
00009 {
00010   unsigned *bits;
00011   int size, num;
00012 
00013   bitvector (void) { bits = NULL; size = num = 0; }
00014 public:
00015   bitvector (int s)
00016   {
00017     size = s;
00018     num = s / (sizeof (unsigned) * 8) + 1;
00019     bits = new unsigned [num];
00020     Clear();
00021   }
00022   bitvector (const bitvector &orig)
00023   {
00024     size = orig.size;
00025     num = orig.num;
00026     bits = new unsigned [orig.num];
00027     Clear();
00028     for (int i = 0; i < num; i++) bits[i] = orig.bits[i];
00029   }
00030   bitvector & operator = (const bitvector &orig)
00031   {
00032     if (this != &orig)
00033       {
00034         delete[] bits;
00035         size = orig.size;
00036         num = orig.num;
00037         bits = new unsigned [orig.num];
00038         Clear();
00039         for (int i = 0; i < num; i++) bits[i] = orig.bits[i];
00040       } // end if
00041     return *this;
00042   }
00043   ~bitvector() { delete[] bits; }
00044 
00045   int GetSize (void) { return size; }
00046 
00047   void Clear (void)
00048   {
00049     for (int i = 0; i < num; i++) bits[i] = 0;
00050   }
00051   void Unclear (void)
00052   {
00053     for (int i = 0; i < num; i++) bits[i] = ~0;
00054   }
00055   void Set (int b)
00056   {
00057     int n = b / (sizeof (unsigned) * 8);
00058     if (n >= num || b < 0)
00059       {
00060         fprintf (stderr, "bitvector error: bit %d out of range.\n", b);
00061         return;
00062       }
00063 
00064     int bit = b % (sizeof (unsigned) * 8);
00065     bits[n] |= (1 << bit);
00066     return;
00067   }
00068   void Reset (int b)
00069   {
00070     int n = b / (sizeof (unsigned) * 8);
00071     if (n >= num || b < 0)
00072       {
00073         fprintf (stderr, "bitvector error: bit %d out of range.\n", b);
00074         return;
00075       }
00076 
00077     int bit = b % (sizeof (unsigned) * 8);
00078     bits[n] &= ~(1 << bit);
00079     return;
00080   }
00081   int Read (int b)
00082   {
00083     int n = b / (sizeof (unsigned) * 8);
00084     if (n >= num || b < 0)
00085       {
00086         fprintf (stderr, "bitvector error: bit %d out of range.\n", b);
00087         return 2;
00088       }
00089 
00090     int bit = b % (sizeof (unsigned) * 8);
00091 
00092     int value = ((bits[n] & (1 << bit)) != 0);
00093     return value;
00094   }
00095 
00096   bitvector operator ~ (void)
00097   {
00098     bitvector temp (size);
00099     for (int i = 0; i < num; i++) temp.bits[i] = ~(bits[i]);
00100     return temp;
00101   }
00102   bitvector operator | (bitvector mask)
00103   {
00104     bitvector temp (size);
00105     if (size != mask.size)
00106       {
00107         fprintf (stderr, "bitvector error: mask size mismatch.\n");
00108         return temp;
00109       }
00110 
00111     for (int i = 0; i < num; i++) temp.bits[i] = bits[i] | mask.bits[i];
00112     return temp;
00113   }
00114   bitvector operator & (bitvector mask)
00115   {
00116     bitvector temp (size);
00117     if (size != mask.size)
00118       {
00119         fprintf (stderr, "bitvector error: mask size mismatch.\n");
00120         return temp;
00121       }
00122 
00123     for (int i = 0; i < num; i++) temp.bits[i] = bits[i] & mask.bits[i];
00124     return temp;
00125   }
00126   int operator == (bitvector other)
00127   {
00128     if (size != other.size)
00129       return 0;
00130 
00131     for (int i = 0; i < num; i++)
00132       if (bits[i] != other.bits[i]) return 0;
00133 
00134     return 1;
00135   }
00136   int operator != (bitvector other)
00137   {
00138     return (!(*this == other));
00139   }
00140   void Show (void)
00141   {
00142     cerr << "\n";
00143     for (int i = (size - 1); i >= 0; i--) {
00144       if (Read(i))
00145         cerr << "1";
00146       else
00147         cerr << "0";
00148     }
00149     cerr << "\n";
00150   }
00151 }; // end class bitvector
00152 
00153 //int operator == (class bitvector first, class bitvector second)
00154 //{
00155 //  return (first.operator ==(second));
00156 //}
00157 
00158 #endif

Generated on Mon Jul 21 20:24:01 2003 for TINKER LEGO DOC by doxygen 1.3.2