diff options
Diffstat (limited to 'chilbert/BigBitVec.hpp')
-rw-r--r-- | chilbert/BigBitVec.hpp | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/chilbert/BigBitVec.hpp b/chilbert/BigBitVec.hpp index df50d6e..b5c049a 100644 --- a/chilbert/BigBitVec.hpp +++ b/chilbert/BigBitVec.hpp @@ -693,23 +693,6 @@ public: } - // Gray Code Inverse - CBigBitVec & - grayCodeInv() - { - int i; - FBV_UINT s = 0; - - for ( i = m_iRacks-1; i >= 0; i-- ) - { - m_pcRacks[i].grayCodeInv(); - if ( s ) m_pcRacks[i].flip(); - s = m_pcRacks[i].rack() & 1; - } - return (*this); - } - - // Complement CBigBitVec & flip() @@ -755,7 +738,8 @@ public: } -private: +private: + friend void grayCodeInv<CBigBitVec>(CBigBitVec&); // Right rotates entire racks (in place). void @@ -795,6 +779,22 @@ private: int m_iRacks; }; +template <> +void +grayCodeInv(CBigBitVec& value) +{ + FBV_UINT s = 0; + + for (int i = value.rackCount() - 1; i >= 0; --i) { + CFixBitVec& rack = value.m_pcRacks[i]; + grayCodeInv(rack); + if (s) { + rack.flip(); + } + s = rack.test(0); + } +} + } // namespace chilbert #endif |