aboutsummaryrefslogtreecommitdiffstats
path: root/chilbert/detail/BitVecMask.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-09-16 15:39:48 -0400
committerDavid Robillard <d@drobilla.net>2022-09-16 22:31:06 -0400
commit49dab5622b31421eb6af84eae376d73fae1cd4a0 (patch)
tree86290707551320ab35952bccc11c66df05714b26 /chilbert/detail/BitVecMask.hpp
parent342a22b6d75597ee22c195b60607402e3ed028b2 (diff)
downloadchilbert-49dab5622b31421eb6af84eae376d73fae1cd4a0.tar.gz
chilbert-49dab5622b31421eb6af84eae376d73fae1cd4a0.tar.bz2
chilbert-49dab5622b31421eb6af84eae376d73fae1cd4a0.zip
Switch to meson build system
Diffstat (limited to 'chilbert/detail/BitVecMask.hpp')
-rw-r--r--chilbert/detail/BitVecMask.hpp74
1 files changed, 0 insertions, 74 deletions
diff --git a/chilbert/detail/BitVecMask.hpp b/chilbert/detail/BitVecMask.hpp
deleted file mode 100644
index 03eaf5f..0000000
--- a/chilbert/detail/BitVecMask.hpp
+++ /dev/null
@@ -1,74 +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 {
-namespace detail {
-
-/** 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 detail
-} // namespace chilbert
-
-#endif