ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/FAS/src/bitvector.cpp
(Generate patch)

Comparing trunk/FAS/src/bitvector.cpp (file contents):
Revision 72 by tim, Wed Aug 14 16:55:47 2002 UTC vs.
Revision 74 by tim, Wed Aug 14 19:56:11 2002 UTC

# Line 18 | Line 18
18   *
19   ***********************************************************************/
20   #include "bitvector.h"
21 + /***********************************************************************
22 + * Class TBitVector
23 + ***********************************************************************/
24 + //
25 + void TBitVector::Resize(int newSize)
26 + {
27 +  if (newSize > Count())
28 +  {
29 +    this->insert(this->end(), newSize-Count(), false);
30 +  }
31 +  else if (newSize < Count())
32 +  {
33 +    this->erase(this->begin()+Count()-newSize, this->end());
34 +  }
35 +  else
36 +  {
37 +    return;
38 +  }
39 + }
40  
41 + bool TBitVector::IsEmpty()
42 + {
43 +  return (Count() == 0);
44 + }
45 +
46 + // bit operation
47 + void TBitVector::SetBitOn(int index)
48 + {
49 +  (*this)[index] = true;
50 + }
51 +
52 + void TBitVector::SetBitOff(int index)
53 + {
54 +  (*this)[index] = false;
55 + }
56 +
57 + void TBitVector::SetRangeOn(int begin, int end)
58 + {
59 +  for(int i=begin; i<end; i++)
60 +    SetBitOn(i);
61 + }
62 +
63 +
64 + void TBitVector::SetRangeOff(int begin, int end)
65 + {
66 +  for(int i=begin; i<end; i++)
67 +    SetBitOff(i);
68 + }
69 +
70 + void TBitVector::SetAllOn()
71 + {
72 +  SetRangeOn(0,Count());
73 + }
74 +
75 + void TBitVector::SetAllOff()
76 + {
77 +  SetRangeOff(0,Count());
78 + }
79 +
80 + //
81 + bool TBitVector::IsBitOn(int index)
82 + {
83 +  return (*this)[index];
84 + }
85 +
86 + // oveload operators
87 + TBitVector& TBitVector::operator =(const TBitVector &src)
88 + {
89 +  int i;
90 +  if (Count() < src.size())
91 +  {
92 +    Resize(src.size());
93 +  }
94 +
95 +  for (i=0; i<src.size(); i++)
96 +  {
97 +    (*this)[i] = src[i];
98 +  }
99 +
100 +  for (; i<Count();i++)
101 +  {
102 +    (*this)[i] = false;
103 +  }
104 +
105 +  return *this;
106 + }
107 +
108 + TBitVector& TBitVector::operator &=(const TBitVector &src)
109 + {
110 +  int i;
111 +  if (Count() < src.size())
112 +  {
113 +    Resize(src.size());
114 +  }
115 +
116 +  for (i=0; i<src.size(); i++)
117 +  {
118 +    (*this)[i] = (*this)[i] & src[i];
119 +  }
120 +
121 +  for (; i<Count();i++)
122 +  {
123 +    (*this)[i] = false;
124 +  }
125 +
126 +  return *this;
127 + }
128 +
129 + TBitVector& TBitVector::operator |=(const TBitVector &src)
130 + {
131 +  int i;
132 +  if (Count() < src.size())
133 +  {
134 +    Resize(src.size());
135 +  }
136 +
137 +  for (i=0; i<src.size(); i++)
138 +  {
139 +    (*this)[i] = (*this)[i] | src[i];
140 +  }
141 +
142 +  return *this;
143 +
144 + }
145 +
146 + TBitVector& TBitVector::operator ^=(const TBitVector &src)
147 + {
148 +  int i;
149 +  if (Count() < src.size())
150 +  {
151 +    Resize(src.size());
152 +  }
153 +
154 +  for (i=0; i<src.size(); i++)
155 +  {
156 +    (*this)[i] = (*this)[i] ^ src[i];
157 +  }
158 +
159 +  return *this;
160 + }
161 +
162 + TBitVector& TBitVector::operator -=(const TBitVector &src)
163 + {
164 +  TBitVector tmp_bv;
165 +
166 +  tmp_bv = (*this) ^ src;
167 +  *this &= tmp_bv;
168 +  return *this;
169 + }
170 +
171 + TBitVector& TBitVector::operator |=(const int i)
172 + {
173 +  SetBitOn(i);
174 + }
175 +
176 + /*----------------------------------------------------------------------------*/
177 + void TBitVector::FromIntVec(vector<int> &intVec)
178 + {
179 +  int max;
180 +  vector<int>::iterator i;
181 +
182 +
183 +  for(i=intVec.begin(); i<intVec.end(); i++)
184 +  {
185 +    if (*i > max)
186 +      max = *i;
187 +  }
188 +
189 +  Resize(max);
190 +  SetAllOff();
191 +
192 +  for(i=intVec.begin(); i<intVec.end(); i++)
193 +  {
194 +    SetBitOn(*i);
195 +  }
196 +
197 + }
198 +
199 + void TBitVector::ToIntvec(vector<int> &intVec)
200 + {
201 +  intVec.clear();
202 +
203 +  for(int i=0; i<Count(); i++)
204 +  {
205 +    if ((*this)[i])
206 +      intVec.push_back(i);
207 +  }
208 + }
209 +
210 + /***********************************************************************
211 + * friend function of TBitVector
212 + ***********************************************************************/
213 + TBitVector operator &(const TBitVector& bv1, const TBitVector& bv2)
214 + {
215 +  TBitVector tmp_bv;
216 +
217 +  tmp_bv = bv1;
218 +  tmp_bv &= bv2;
219 +
220 +  return tmp_bv;
221 + }
222 +
223 + TBitVector operator |(const TBitVector& bv1, const TBitVector& bv2)
224 + {
225 +  TBitVector tmp_bv;
226 +
227 +  tmp_bv = bv1;
228 +  tmp_bv |= bv2;
229 +
230 +  return tmp_bv;
231 + }
232 +
233 + TBitVector operator ^(const TBitVector& bv1, const TBitVector& bv2)
234 + {
235 +  TBitVector tmp_bv;
236 +
237 +  tmp_bv = bv1;
238 +  tmp_bv ^= bv2;
239 +
240 +  return tmp_bv;
241 + }
242 +
243 + TBitVector operator -(const TBitVector& bv1, const TBitVector& bv2)
244 + {
245 +  TBitVector tmp_bv;
246 +
247 +  tmp_bv = bv1 ^ bv2;
248 +  tmp_bv &= bv1;
249 +
250 +  return tmp_bv;
251 +
252 + }
253 +
254 + bool operator ==(const TBitVector& bv1, const TBitVector& bv2)
255 + {
256 +
257 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines