// Copyright 2018-2022 David Robillard // Copyright 2006-2007 Chris Hamilton // SPDX-License-Identifier: GPL-2.0-or-later #ifndef CHILBERT_DETAIL_BITVECINDEX_HPP #define CHILBERT_DETAIL_BITVECINDEX_HPP #include #include #include namespace chilbert { namespace detail { /// Index into a multi-rack bit vector template struct BitVecIndex { using Rack = typename BitVec::Rack; static constexpr size_t bits_per_rack = sizeof(Rack) * CHAR_BIT; explicit BitVecIndex(const size_t bits) : rack{bits / bits_per_rack} , bit{bits - rack * bits_per_rack} { assert(bit < bits_per_rack); } size_t rack; size_t bit; }; } // namespace detail } // namespace chilbert #endif