Last active
August 29, 2015 14:03
-
-
Save 1995eaton/62d10bac56d2bb512b53 to your computer and use it in GitHub Desktop.
Simple C++ bitset library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
class Bitset { | |
private: | |
char *data; | |
size_t b_size; | |
public: | |
Bitset(size_t s) : b_size(s), data(new char[b_size + 1]) { | |
this->reset(); | |
} | |
~Bitset() {} | |
size_t size(); | |
size_t count(); | |
bool test(size_t n); | |
bool none(); | |
bool any(); | |
void set(); | |
void set(size_t n); | |
void reset(); | |
void reset(size_t n); | |
void flip(size_t n); | |
char &operator [] (const size_t &n); | |
friend std::ostream &operator << (std::ostream &os, Bitset &b) { | |
os << b.data; | |
return os; | |
} | |
}; | |
size_t Bitset::count() { | |
size_t c = 0; | |
for (int i = 0; i < b_size; i++) { | |
c += (int) data[i]; | |
} | |
return c; | |
} | |
bool Bitset::test(size_t n) { | |
return data[n] == '1'; | |
} | |
bool Bitset::none() { | |
for (int i = 0; i < b_size; i++) { | |
if (data[i] == '1') { | |
return 0; | |
} | |
} | |
return 1; | |
} | |
bool Bitset::any() { | |
for (int i = 0; i < b_size; i++) { | |
if (data[i] == '1') { | |
return 1; | |
} | |
} | |
return 0; | |
} | |
size_t Bitset::size() { | |
return b_size; | |
} | |
void Bitset::set() { | |
std::fill(data, data + b_size, '1'); | |
} | |
void Bitset::set(size_t n) { | |
data[n] = '1'; | |
} | |
void Bitset::reset() { | |
std::fill(data, data + b_size, '0'); | |
} | |
void Bitset::reset(size_t n) { | |
data[n] = '0'; | |
} | |
void Bitset::flip(size_t n) { | |
data[n] = (data[n] == '0') ? '1' : '0'; | |
} | |
char &Bitset::operator [] (const size_t &n) { | |
return data[n]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment