diff --git a/Src/Util/BitRegister.cpp b/Src/Util/BitRegister.cpp index 3848df1..e4546eb 100644 --- a/Src/Util/BitRegister.cpp +++ b/Src/Util/BitRegister.cpp @@ -43,13 +43,13 @@ namespace Util } // Shift a bit into the right side, growing the vector by 1 - void BitRegister::ShiftInRight(uint8_t bit) + void BitRegister::AddToRight(uint8_t bit) { m_bits.push_back(!!bit); } // Shift a bit into the left side, growing the vector by 1 - void BitRegister::ShiftInLeft(uint8_t bit) + void BitRegister::AddToLeft(uint8_t bit) { m_bits.push_back(0); ShiftRight(1); @@ -57,15 +57,15 @@ namespace Util } // Shift left by 1, returning ejected bit (shrinks vector) - uint8_t BitRegister::ShiftOutLeft() + uint8_t BitRegister::RemoveFromLeft() { uint8_t ejected = GetLeftMost(); - ShiftOutLeft(1); + RemoveFromLeft(1); return ejected; } // Shift left and lose bits (shrinks vector) - void BitRegister::ShiftOutLeft(size_t count) + void BitRegister::RemoveFromLeft(size_t count) { if (count >= m_bits.size()) { @@ -80,15 +80,15 @@ namespace Util } // Shift right by 1, returning ejected bit (shrinks vector) - uint8_t BitRegister::ShiftOutRight() + uint8_t BitRegister::RemoveFromRight() { uint8_t ejected = GetRightMost(); - ShiftOutRight(1); + RemoveFromRight(1); return ejected; } // Shift right and lose bits (shrinks vector) - void BitRegister::ShiftOutRight(size_t count) + void BitRegister::RemoveFromRight(size_t count) { // Shifting right means we lose lower bits (which are higher in the // vector), which means we just trim the vector from the right side @@ -251,4 +251,21 @@ namespace Util os << "[ " << reg.Size() << ": " << reg.ToHexString() << " ]"; return os; } + + BitRegister::BitRegister() + { + } + + BitRegister::BitRegister(size_t count) + { + SetZeros(count); + } + + BitRegister::BitRegister(size_t count, uint8_t bit) + { + if (bit == 0) + SetZeros(count); + else + SetOnes(count); + } } // Util diff --git a/Src/Util/BitRegister.h b/Src/Util/BitRegister.h index b5f78fc..8ee8fe6 100644 --- a/Src/Util/BitRegister.h +++ b/Src/Util/BitRegister.h @@ -21,12 +21,12 @@ namespace Util } // Functions that grow/shrink the bit register - void ShiftInRight(uint8_t bit); - void ShiftInLeft(uint8_t bit); - uint8_t ShiftOutLeft(); - void ShiftOutLeft(size_t count); - uint8_t ShiftOutRight(); - void ShiftOutRight(size_t count); + void AddToRight(uint8_t bit); + void AddToLeft(uint8_t bit); + uint8_t RemoveFromLeft(); + void RemoveFromLeft(size_t count); + uint8_t RemoveFromRight(); + void RemoveFromRight(size_t count); // Functions that preserve the current register size, shifting in the "no // data" value as needed @@ -50,6 +50,11 @@ namespace Util std::string ToBinaryString() const; std::string ToHexString() const; friend std::ostream &operator<<(std::ostream &os, const BitRegister ®); + + // Constructors + BitRegister(); + BitRegister(size_t count); + BitRegister(size_t count, uint8_t bit); private: /* diff --git a/Src/Util/Test_BitRegister.cpp b/Src/Util/Test_BitRegister.cpp index 8877b31..721a7a3 100644 --- a/Src/Util/Test_BitRegister.cpp +++ b/Src/Util/Test_BitRegister.cpp @@ -89,17 +89,17 @@ int main(int argc, char **argv) reg.Reset(); reg.Set("110010101"); expected.push_back("1"); - results.push_back(reg.ShiftOutRight() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromRight() == 1 ? "1" : "0"); expected.push_back("11001010"); results.push_back(reg.ToBinaryString()); expected.push_back("0"); - results.push_back(reg.ShiftOutRight() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromRight() == 1 ? "1" : "0"); expected.push_back("1100101"); results.push_back(reg.ToBinaryString()); expected.push_back("1"); - results.push_back(reg.ShiftOutRight() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromRight() == 1 ? "1" : "0"); expected.push_back("110010"); results.push_back(reg.ToBinaryString()); @@ -107,28 +107,28 @@ int main(int argc, char **argv) reg.Reset(); reg.Set("110010101"); expected.push_back("1"); - results.push_back(reg.ShiftOutLeft() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromLeft() == 1 ? "1" : "0"); expected.push_back("10010101"); results.push_back(reg.ToBinaryString()); expected.push_back("1"); - results.push_back(reg.ShiftOutLeft() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromLeft() == 1 ? "1" : "0"); expected.push_back("0010101"); results.push_back(reg.ToBinaryString()); expected.push_back("0"); - results.push_back(reg.ShiftOutLeft() == 1 ? "1" : "0"); + results.push_back(reg.RemoveFromLeft() == 1 ? "1" : "0"); expected.push_back("010101"); results.push_back(reg.ToBinaryString()); // Test reg.Reset(); reg.Set("0x12345"); - reg.ShiftOutLeft(1); + reg.RemoveFromLeft(1); expected.push_back("0010010001101000101"); results.push_back(reg.ToBinaryString()); - reg.ShiftOutLeft(2); + reg.RemoveFromLeft(2); expected.push_back("10010001101000101"); results.push_back(reg.ToBinaryString()); @@ -146,11 +146,11 @@ int main(int argc, char **argv) // Test reg.Reset(); reg.Set("0x12345"); - reg.ShiftOutRight(1); + reg.RemoveFromRight(1); expected.push_back("0001001000110100010"); results.push_back(reg.ToBinaryString()); - reg.ShiftOutRight(2); + reg.RemoveFromRight(2); expected.push_back("00010010001101000"); results.push_back(reg.ToBinaryString()); @@ -167,26 +167,26 @@ int main(int argc, char **argv) // Test reg.Reset(); - reg.ShiftInRight(1); - reg.ShiftInRight(1); - reg.ShiftInRight(0); - reg.ShiftInRight(1); - reg.ShiftInRight(0); + reg.AddToRight(1); + reg.AddToRight(1); + reg.AddToRight(0); + reg.AddToRight(1); + reg.AddToRight(0); expected.push_back("11010"); results.push_back(reg.ToBinaryString()); // Test reg.Reset(); - reg.ShiftInRight(1); - reg.ShiftInRight(1); - reg.ShiftInRight(0); - reg.ShiftInRight(1); - reg.ShiftInRight(0); - reg.ShiftOutRight(); + reg.AddToRight(1); + reg.AddToRight(1); + reg.AddToRight(0); + reg.AddToRight(1); + reg.AddToRight(0); + reg.RemoveFromRight(); expected.push_back("1101"); results.push_back(reg.ToBinaryString()); - reg.ShiftOutLeft(); + reg.RemoveFromLeft(); expected.push_back("101"); results.push_back(reg.ToBinaryString());