summaryrefslogtreecommitdiff
path: root/lib/bitset.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bitset.h')
-rw-r--r--lib/bitset.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/bitset.h b/lib/bitset.h
new file mode 100644
index 0000000..40ee3ed
--- /dev/null
+++ b/lib/bitset.h
@@ -0,0 +1,45 @@
+#ifndef MYGRATE_BITSET_H
+#define MYGRATE_BITSET_H
+
+#include <cstddef>
+#include <cstdint>
+#include <span>
+
+namespace MyGrate {
+ class BitSet {
+ public:
+ class Iterator {
+ public:
+ using iterator_category = std::forward_iterator_tag;
+ using difference_type = int;
+ using value_type = bool;
+ using pointer = bool *;
+ using reference = bool;
+
+ explicit Iterator();
+ explicit Iterator(const std::byte *);
+
+ bool operator*() const;
+ bool operator!=(const Iterator &) const;
+ bool operator==(const Iterator &) const;
+
+ Iterator & operator++();
+ Iterator operator++(int);
+
+ private:
+ const std::byte * b;
+ std::byte m {1};
+ };
+
+ explicit BitSet(const std::span<const std::byte> b);
+
+ std::size_t size() const;
+ Iterator begin() const;
+ Iterator end() const;
+
+ private:
+ const std::span<const std::byte> bytes;
+ };
+}
+
+#endif