Skip to content

Instantly share code, notes, and snippets.

@1995eaton
Last active August 29, 2015 14:03
Show Gist options
  • Save 1995eaton/62d10bac56d2bb512b53 to your computer and use it in GitHub Desktop.
Save 1995eaton/62d10bac56d2bb512b53 to your computer and use it in GitHub Desktop.
Simple C++ bitset library
#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