aboutsummaryrefslogtreecommitdiffstats
path: root/chilbert/BigBitVec.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'chilbert/BigBitVec.hpp')
-rw-r--r--chilbert/BigBitVec.hpp36
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