OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bitset.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef ctrlplane_bitset_h
6 #define ctrlplane_bitset_h
7 
8 #include <inttypes.h>
9 #include <string>
10 #include <vector>
11 
12 //
13 // BitSet automatically resizes the bit set when needed and allows for
14 // logical operations between bitsets of different sizes. Implemented
15 // using a vector of uint64_t as the underlying storage.
16 //
17 class BitSet {
18 public:
19  static const size_t npos = static_cast<size_t>(-1);
20 
21  BitSet &set(size_t pos);
22  BitSet &reset(size_t pos);
23  bool test(size_t pos) const;
24  void clear();
25  bool empty() const;
26  bool none() const;
27  bool any() const;
28  size_t size() const;
29  size_t count() const;
30  size_t find_first() const;
31  size_t find_next(size_t pos) const;
32  size_t find_last() const;
33  size_t find_first_clear() const;
34  size_t find_next_clear(size_t pos) const;
35 
36  bool intersects(const BitSet &rhs) const;
37  bool operator==(const BitSet &rhs) const;
38  bool operator!=(const BitSet &rhs) const;
39  BitSet operator&(const BitSet &rhs) const;
40  BitSet operator|(const BitSet &rhs) const;
41  BitSet &operator&=(const BitSet &rhs);
42  BitSet &operator|=(const BitSet &rhs);
43 
44  void Set(const BitSet &rhs);
45  void Reset(const BitSet &rhs);
46  void BuildComplement(const BitSet &lhs, const BitSet &rhs);
47  void BuildIntersection(const BitSet &lhs, const BitSet &rhs);
48  bool Contains(const BitSet &rhs) const;
49  std::string ToString() const;
50  void FromString(std::string str);
51  std::string ToNumberedString() const;
52 
53 private:
54  friend class BitSetTest;
55 
56  void compact();
57  void check_invariants();
58 
59  std::vector<uint64_t> blocks_;
60 };
61 
62 #endif
void compact()
Definition: bitset.cc:209
void FromString(std::string str)
Definition: bitset.cc:572
bool test(size_t pos) const
Definition: bitset.cc:146
BitSet & reset(size_t pos)
Definition: bitset.cc:136
std::string ToString() const
Definition: bitset.cc:551
void Reset(const BitSet &rhs)
Definition: bitset.cc:470
friend class BitSetTest
Definition: bitset.h:54
size_t count() const
Definition: bitset.cc:194
std::vector< uint64_t > blocks_
Definition: bitset.h:59
BitSet operator|(const BitSet &rhs) const
Definition: bitset.cc:399
void BuildIntersection(const BitSet &lhs, const BitSet &rhs)
Definition: bitset.cc:509
bool Contains(const BitSet &rhs) const
Definition: bitset.cc:536
bool empty() const
Definition: bitset.cc:165
bool operator==(const BitSet &rhs) const
Definition: bitset.cc:369
size_t find_first_clear() const
Definition: bitset.cc:307
BitSet operator&(const BitSet &rhs) const
Definition: bitset.cc:389
static const size_t npos
Definition: bitset.h:19
void check_invariants()
Definition: bitset.cc:232
void clear()
Definition: bitset.cc:158
size_t size() const
Definition: bitset.cc:187
size_t find_last() const
Definition: bitset.cc:288
BitSet & operator|=(const BitSet &rhs)
Definition: bitset.cc:449
size_t find_next_clear(size_t pos) const
Definition: bitset.cc:324
void Set(const BitSet &rhs)
Definition: bitset.cc:462
Definition: bitset.h:17
BitSet & set(size_t pos)
Definition: bitset.cc:125
bool operator!=(const BitSet &rhs) const
Definition: bitset.cc:382
bool any() const
Definition: bitset.cc:179
bool none() const
Definition: bitset.cc:172
size_t find_first() const
Definition: bitset.cc:242
void BuildComplement(const BitSet &lhs, const BitSet &rhs)
Definition: bitset.cc:486
bool intersects(const BitSet &rhs) const
Definition: bitset.cc:354
size_t find_next(size_t pos) const
Definition: bitset.cc:255
std::string ToNumberedString() const
Definition: bitset.cc:593
BitSet & operator&=(const BitSet &rhs)
Definition: bitset.cc:430