aboutsummaryrefslogtreecommitdiffstats
path: root/chilbert/BitVecMask.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-08-19 18:22:26 +0200
committerDavid Robillard <d@drobilla.net>2018-09-29 14:50:07 +0200
commitac65326242af579d6e1a7bd71730f1c78c8bde9b (patch)
treeae5225c4b9856b3e5d454378d00867d9b0c53d26 /chilbert/BitVecMask.hpp
parent7567f77828ff9661f85eabe3b4cfb1876b307d42 (diff)
downloadchilbert-ac65326242af579d6e1a7bd71730f1c78c8bde9b.tar.gz
chilbert-ac65326242af579d6e1a7bd71730f1c78c8bde9b.tar.bz2
chilbert-ac65326242af579d6e1a7bd71730f1c78c8bde9b.zip
Reorganize headers to make a clear public/private distinction
Diffstat (limited to 'chilbert/BitVecMask.hpp')
-rw-r--r--chilbert/BitVecMask.hpp72
1 files changed, 0 insertions, 72 deletions
diff --git a/chilbert/BitVecMask.hpp b/chilbert/BitVecMask.hpp
deleted file mode 100644
index af98894..0000000
--- a/chilbert/BitVecMask.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- Copyright (C) 2018 David Robillard <d@drobilla.net>
- Copyright (C) 2006-2007 Chris Hamilton <chamilton@cs.dal.ca>
-
- This program is free software: you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free Software
- Foundation, either version 2 of the License, or (at your option) any later
- version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- this program. If not, see <https://www.gnu.org/licenses/>.
-*/
-
-#ifndef CHILBERT_BITVECMASK_HPP
-#define CHILBERT_BITVECMASK_HPP
-
-#include <climits>
-#include <cstddef>
-
-namespace chilbert {
-
-/** Mask for a bit that can be incremented like an index.
- *
- * This enables fast iteration while setting or resetting bits since it is
- * internally stored as a mask which avoids repeated index math.
- */
-template <class Rack>
-struct BitVecMask
-{
- static constexpr size_t bits_per_rack = sizeof(Rack) * CHAR_BIT;
-
- BitVecMask(const size_t index)
- : rack{index / bits_per_rack}
- , mask{Rack{1} << (index - rack * bits_per_rack)}
- {
- }
-
- void operator++()
- {
- if ((mask <<= 1) == 0) {
- mask = 1;
- ++rack;
- }
- }
-
- void operator--()
- {
- if ((mask >>= 1) == 0) {
- mask = Rack{1} << (bits_per_rack - 1);
- --rack;
- }
- }
-
- bool operator==(const BitVecMask& rhs) const
- {
- return rack == rhs.rack && mask == rhs.mask;
- }
-
- bool operator!=(const BitVecMask& rhs) const { return !operator==(rhs); }
-
- size_t rack;
- Rack mask;
-};
-
-} // namespace chilbert
-
-#endif