ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/utils/BitSet.hpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/utils/BitSet.hpp (file contents):
Revision 1970 by tim, Fri Feb 4 05:42:30 2005 UTC vs.
Revision 2037 by tim, Wed Feb 16 19:36:30 2005 UTC

# Line 42 | Line 42
42   #ifndef UTILS_BITSET_HPP
43   #define UTILS_BITSET_HPP
44  
45 < #include <functional>
45 > #include <iostream>
46   #include <vector>
47   namespace oopse {
48  
# Line 55 | Line 55 | class BitSet {
55          /** */
56          BitSet() {}
57          /** */
58 <        BitSet(int nbits) {  bitset_.resize(nbits);  }
58 >        BitSet(int nbits) : bitset_(nbits) {clearAll(); }
59  
60          /** Returns the number of bits set to true in this BitSet.  */
61          int countBits();
# Line 80 | Line 80 | class BitSet {
80  
81          /** Returns true if no bits are set to true */
82          bool none();
83 +
84 +        int firstOffBit() { return !bitset_[0] ? 0 : nextOffBit(0); }
85          
86          /** Returns the index of the first bit that is set to false that occurs on or after the specified starting index.*/
87 <        int nextOffBit(int fromIndex);
88 <        
87 >        int nextOffBit(int fromIndex) const;
88 >
89 >        int firstOnBit() { return bitset_[0] ? 0 : nextOnBit(0); }
90 >        
91          /** Returns the index of the first bit that is set to true that occurs on or after the specified starting index. */
92 <        int nextOnBit(int fromIndex);
92 >        int nextOnBit(int fromIndex) const;
93          
94          /** Performs a logical AND of this target bit set with the argument bit set. */
95          void andOperator (const BitSet& bs);
# Line 118 | Line 122 | class BitSet {
122          BitSet& operator&= (const BitSet &bs) {  andOperator (bs); return *this; }
123          BitSet& operator|= (const BitSet &bs) { orOperator (bs); return *this; }
124          BitSet& operator^= (const BitSet &bs) { xorOperator (bs); return *this; }
125 <        bool operator[] (int bitIndex) {  return bitset_[bitIndex];  }
126 <
125 >        BitSet& operator-= (const BitSet &bs) {
126 >            BitSet tmp = *this ^ bs;
127 >            *this &= tmp;
128 >            return *this;
129 >        }
130 >        
131 >        bool operator[] (int bitIndex)  const {  return bitset_[bitIndex];  }
132          friend BitSet operator| (const BitSet& bs1, const BitSet& bs2);
133          friend BitSet operator& (const BitSet& bs1, const BitSet& bs2);
134          friend BitSet operator^ (const BitSet& bs1, const BitSet& bs2);
135 +        friend BitSet operator- (const BitSet& bs1, const BitSet& bs2);
136 +        
137          friend bool operator== (const BitSet & bs1, const BitSet &bs2);
138  
139          friend std::istream& operator>> ( std::istream&, const BitSet& bs);
# Line 139 | Line 150 | template<typename T>
150          std::vector<char> bitset_;
151   };
152  
142 template<typename T>
143 struct logical_xor :public std::binary_function<T, T, bool> {
144    double operator()(T x, T y) { return x ^ y; }
145 };
153  
154   }
155   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines