carl  24.04
Computer ARithmetic Library
BitVector.cpp
Go to the documentation of this file.
1 #include "BitVector.h"
2 
3 namespace carl
4 {
5 
6 BitVector operator|(const BitVector& lhs, const BitVector& rhs)
7 {
8  BitVector res;
9  auto lhsIt = lhs.mBits.begin();
10  auto rhsIt = rhs.mBits.begin();
11 
12  auto lhsEnd = lhs.mBits.end();
13  auto rhsEnd = rhs.mBits.end();
14 
15  while( true)
16  {
17  if( lhsIt == lhsEnd)
18  {
19  res.mBits.insert( res.mBits.end(), rhsIt, rhsEnd);
20  break;
21  }
22 
23  if( rhsIt == rhsEnd)
24  {
25  res.mBits.insert( res.mBits.end(), lhsIt, lhsEnd);
26  break;
27  }
28 
29  res.mBits.push_back( *lhsIt | *rhsIt);
30  ++rhsIt;
31  ++lhsIt;
32  }
33 
34  return res;
35 }
36 
37 bool operator ==(const BitVector& lhs, const BitVector& rhs)
38 {
39  return(lhs.mBits == rhs.mBits);
40 }
41 
43 {
44  return(fi1.posInVec == fi2.posInVec && fi1.vecIter == fi2.vecIter);
45 }
46 
47 bool BitVector::subsetOf( const BitVector& superset)
48 {
49  std::vector<unsigned>::const_iterator sub = mBits.begin();
50  auto sup = superset.mBits.begin();
51 
52  if( sub == mBits.end())
53  {
54  return true;
55  }
56 
57  while( sup != superset.mBits.end())
58  {
59  if((( *sub) & ~( *sup)) != 0)
60  {
61  return false;
62  }
63 
64  ++sup;
65  ++sub;
66  if( sub == mBits.end())
67  {
68  return true;
69  }
70  }
71  while( sub != mBits.end())
72  {
73  if( *sub != 0) return false;
74  }
75  return true;
76 }
77 }
carl is the main namespace for the library.
BitVector operator|(const BitVector &lhs, const BitVector &rhs)
Definition: BitVector.cpp:6
bool operator==(const BasicConstraint< P > &lhs, const BasicConstraint< P > &rhs)
bool subsetOf(const BitVector &superset)
Definition: BitVector.cpp:47
std::vector< unsigned > mBits
Definition: BitVector.h:191
std::vector< unsigned >::const_iterator vecIter
Definition: BitVector.h:142