From c8b50de910a68955a626f4841109ea07a05ffba0 Mon Sep 17 00:00:00 2001 From: Peter McLean Date: Fri, 23 May 2025 15:52:22 -0400 Subject: [PATCH] Add directly compatible copy constructor and assignment --- include/bitlib/bit-iterator/bit_iterator.hpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/bitlib/bit-iterator/bit_iterator.hpp b/include/bitlib/bit-iterator/bit_iterator.hpp index 90b4828a..f26fc8f2 100644 --- a/include/bitlib/bit-iterator/bit_iterator.hpp +++ b/include/bitlib/bit-iterator/bit_iterator.hpp @@ -57,6 +57,7 @@ class bit_iterator // Lifecycle public: constexpr bit_iterator(); + constexpr bit_iterator(const bit_iterator& other); template constexpr bit_iterator(const bit_iterator& other) requires std::constructible_from; @@ -67,6 +68,7 @@ class bit_iterator // Assignment public: + constexpr bit_iterator& operator=(const bit_iterator& other); template constexpr bit_iterator& operator=(const bit_iterator& other); @@ -125,6 +127,12 @@ constexpr bit_iterator::bit_iterator() } // Implicitly constructs a bit iterator from another bit iterator +template +constexpr bit_iterator::bit_iterator(const bit_iterator& other) + : _current(other.base()), _position(other.position()) { + assert(_position < bitsof()); +} + template template constexpr bit_iterator::bit_iterator(const bit_iterator& other) @@ -157,6 +165,16 @@ constexpr bit_iterator::bit_iterator(const pointer& ptr) // ------------------------ BIT ITERATOR: ASSIGNMENT ------------------------ // +// Assigns a bit iterator to the bit iterator +template +constexpr bit_iterator& bit_iterator::operator=( + const bit_iterator& other) { + _current = other._current; + _position = other._position; + assert(_position < bitsof()); + return *this; +} + // Assigns a bit iterator to the bit iterator template template