aboutsummaryrefslogtreecommitdiffstats
path: root/include/chilbert/DynamicBitVec.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-09-16 21:19:57 -0400
committerDavid Robillard <d@drobilla.net>2022-09-16 22:31:06 -0400
commit2e4d666eec1a372d4b64c527d6c4945ad98d2b58 (patch)
treea3a61d346c3d4e5b590b08db446d17307df0e3c5 /include/chilbert/DynamicBitVec.hpp
parentbf05ef949750cfca6e001b0f767cd2173441fc8c (diff)
downloadchilbert-2e4d666eec1a372d4b64c527d6c4945ad98d2b58.tar.gz
chilbert-2e4d666eec1a372d4b64c527d6c4945ad98d2b58.tar.bz2
chilbert-2e4d666eec1a372d4b64c527d6c4945ad98d2b58.zip
Update clang-format configuration
Diffstat (limited to 'include/chilbert/DynamicBitVec.hpp')
-rw-r--r--include/chilbert/DynamicBitVec.hpp186
1 files changed, 91 insertions, 95 deletions
diff --git a/include/chilbert/DynamicBitVec.hpp b/include/chilbert/DynamicBitVec.hpp
index fe7a535..895860c 100644
--- a/include/chilbert/DynamicBitVec.hpp
+++ b/include/chilbert/DynamicBitVec.hpp
@@ -41,117 +41,113 @@ namespace chilbert {
class DynamicBitVec : public detail::MultiBitVec<DynamicBitVec>
{
public:
- struct RacksDeleter
- {
- void operator()(Rack* const racks) { free(racks); }
- };
-
- struct NullDeleter
- {
- void operator()(const Rack* const) {}
- };
-
- using RacksPtr = std::unique_ptr<Rack[], RacksDeleter>;
- using ConstRacksPtr = std::unique_ptr<const Rack[], NullDeleter>;
-
- explicit DynamicBitVec(const size_t bits)
- : m_racks{make_racks(calculate_num_racks(bits))}
- , m_size{bits}
- {
- }
-
- DynamicBitVec(const size_t bits, const Rack value)
- : DynamicBitVec{bits}
- {
- m_racks[0] = value;
- }
-
- DynamicBitVec(const DynamicBitVec& vec)
- : m_racks{make_racks(vec.num_racks())}
- , m_size{vec.m_size}
- {
- if (vec.data()) {
- memcpy(data(), vec.data(), data_size());
- }
- }
-
- DynamicBitVec(DynamicBitVec&&) = default;
-
- DynamicBitVec& operator=(const DynamicBitVec& vec)
- {
- if (&vec != this) {
- if (num_racks() < vec.num_racks()) {
- m_racks = make_racks(vec.num_racks());
- m_size = vec.m_size;
- memcpy(data(), vec.data(), data_size());
- } else if (vec.num_racks() > 0) {
- m_size = vec.m_size;
- memcpy(data(), vec.data(), data_size());
- } else {
- m_size = 0;
- m_racks.reset();
- }
- }
-
- return *this;
- }
-
- DynamicBitVec& operator=(DynamicBitVec&&) = default;
-
- ~DynamicBitVec() = default;
-
- /// Return the size in bits
- size_t size() const { return m_size; }
-
- /// Return a reference to the `index`th rack
- const Rack& rack(const size_t index) const { return m_racks[index]; }
- Rack& rack(const size_t index) { return m_racks[index]; }
-
- /// Return a raw pointer to the racks
- Rack* data() { return m_racks.get(); }
- const Rack* data() const { return m_racks.get(); }
-
- /// Return the total size of all racks in bytes
- size_t data_size() const { return num_racks() * sizeof(Rack); }
-
- /// Return the number of racks
- size_t num_racks() const { return calculate_num_racks(m_size); }
+ struct RacksDeleter {
+ void operator()(Rack* const racks) { free(racks); }
+ };
+
+ struct NullDeleter {
+ void operator()(const Rack* const) {}
+ };
+
+ using RacksPtr = std::unique_ptr<Rack[], RacksDeleter>;
+ using ConstRacksPtr = std::unique_ptr<const Rack[], NullDeleter>;
+
+ explicit DynamicBitVec(const size_t bits)
+ : m_racks{make_racks(calculate_num_racks(bits))}
+ , m_size{bits}
+ {}
+
+ DynamicBitVec(const size_t bits, const Rack value)
+ : DynamicBitVec{bits}
+ {
+ m_racks[0] = value;
+ }
+
+ DynamicBitVec(const DynamicBitVec& vec)
+ : m_racks{make_racks(vec.num_racks())}
+ , m_size{vec.m_size}
+ {
+ if (vec.data()) {
+ memcpy(data(), vec.data(), data_size());
+ }
+ }
+
+ DynamicBitVec(DynamicBitVec&&) = default;
+
+ DynamicBitVec& operator=(const DynamicBitVec& vec)
+ {
+ if (&vec != this) {
+ if (num_racks() < vec.num_racks()) {
+ m_racks = make_racks(vec.num_racks());
+ m_size = vec.m_size;
+ memcpy(data(), vec.data(), data_size());
+ } else if (vec.num_racks() > 0) {
+ m_size = vec.m_size;
+ memcpy(data(), vec.data(), data_size());
+ } else {
+ m_size = 0;
+ m_racks.reset();
+ }
+ }
+
+ return *this;
+ }
+
+ DynamicBitVec& operator=(DynamicBitVec&&) = default;
+
+ ~DynamicBitVec() = default;
+
+ /// Return the size in bits
+ size_t size() const { return m_size; }
+
+ /// Return a reference to the `index`th rack
+ const Rack& rack(const size_t index) const { return m_racks[index]; }
+ Rack& rack(const size_t index) { return m_racks[index]; }
+
+ /// Return a raw pointer to the racks
+ Rack* data() { return m_racks.get(); }
+ const Rack* data() const { return m_racks.get(); }
+
+ /// Return the total size of all racks in bytes
+ size_t data_size() const { return num_racks() * sizeof(Rack); }
+
+ /// Return the number of racks
+ size_t num_racks() const { return calculate_num_racks(m_size); }
private:
- static size_t calculate_num_racks(const size_t bits)
- {
- return (std::max(bits, size_t(1)) + bits_per_rack - 1) / bits_per_rack;
- }
-
- static RacksPtr make_racks(const size_t n)
- {
- return RacksPtr{static_cast<Rack*>(calloc(n, sizeof(Rack)))};
- }
-
- RacksPtr m_racks;
- size_t m_size;
+ static size_t calculate_num_racks(const size_t bits)
+ {
+ return (std::max(bits, size_t(1)) + bits_per_rack - 1) / bits_per_rack;
+ }
+
+ static RacksPtr make_racks(const size_t n)
+ {
+ return RacksPtr{static_cast<Rack*>(calloc(n, sizeof(Rack)))};
+ }
+
+ RacksPtr m_racks;
+ size_t m_size;
};
namespace detail {
-template <>
-struct is_bitvec<DynamicBitVec>
-{
- constexpr static bool value = true;
+template<>
+struct is_bitvec<DynamicBitVec> {
+ constexpr static bool value = true;
};
-template <>
+template<>
inline void
gray_code(DynamicBitVec& value)
{
- gray_code(static_cast<MultiBitVec<DynamicBitVec>&>(value));
+ gray_code(static_cast<MultiBitVec<DynamicBitVec>&>(value));
}
-template <>
+template<>
inline void
gray_code_inv(DynamicBitVec& value)
{
- gray_code_inv(static_cast<MultiBitVec<DynamicBitVec>&>(value));
+ gray_code_inv(static_cast<MultiBitVec<DynamicBitVec>&>(value));
}
} // namespace detail