changeset 9ea24d102d66 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=9ea24d102d66
description:
style: clean up ruby's Set class
Further cleanup should probably be done to make this class be non-Ruby
specific and put it in src/base.
There are probably several cases where this class is used, std::bitset
could be used instead.
diffstat:
src/mem/ruby/common/NetDest.cc | 2 +-
src/mem/ruby/common/Set.cc | 651 +++++++++++++---------------------------
src/mem/ruby/common/Set.hh | 212 +++++--------
3 files changed, 301 insertions(+), 564 deletions(-)
diffs (truncated from 1062 to 300 lines):
diff -r 84bd4089958b -r 9ea24d102d66 src/mem/ruby/common/NetDest.cc
--- a/src/mem/ruby/common/NetDest.cc Tue May 25 20:15:44 2010 -0700
+++ b/src/mem/ruby/common/NetDest.cc Tue Jun 01 11:38:56 2010 -0700
@@ -222,7 +222,7 @@
{
assert(m_bits.size() == other_netDest.getSize());
for (int i = 0; i < m_bits.size(); i++) {
- if (m_bits[i].intersectionIsNotEmpty(other_netDest.m_bits[i])) {
+ if (!m_bits[i].intersectionIsEmpty(other_netDest.m_bits[i])) {
return true;
}
}
diff -r 84bd4089958b -r 9ea24d102d66 src/mem/ruby/common/Set.cc
--- a/src/mem/ruby/common/Set.cc Tue May 25 20:15:44 2010 -0700
+++ b/src/mem/ruby/common/Set.cc Tue Jun 01 11:38:56 2010 -0700
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
* All rights reserved.
@@ -27,554 +26,340 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * Set.cc
- *
- * Description: See Set.hh
- *
- * $Id: BigSet.cc 1.9 05/01/19 13:12:25-06:00 [email protected] $
- *
- */
-
-// modified (rewritten) 05/20/05 by Dan Gibson to accomimdate FASTER >32 bit
-// set sizes
+// modified (rewritten) 05/20/05 by Dan Gibson to accomimdate FASTER
+// >32 bit set sizes
#include "mem/ruby/common/Set.hh"
#include "mem/ruby/system/System.hh"
-#if __amd64__ || __LP64__
-#define __64BITS__
-#else
-#define __32BITS__
-#endif
-
Set::Set()
{
- m_p_nArray = NULL;
- m_nArrayLen = 0;
- m_nSize = 0;
+ m_p_nArray = NULL;
+ m_nArrayLen = 0;
+ m_nSize = 0;
}
-// copy constructor
-Set::Set(const Set& obj) {
- m_p_nArray = NULL;
- setSize(obj.m_nSize);
+Set::Set(const Set& obj)
+{
+ m_p_nArray = NULL;
+ setSize(obj.m_nSize);
- // copy from the host to this array
- for(int i=0; i<m_nArrayLen; i++) {
- m_p_nArray[i] = obj.m_p_nArray[i];
- }
-
+ // copy from the host to this array
+ for (int i = 0; i < m_nArrayLen; i++)
+ m_p_nArray[i] = obj.m_p_nArray[i];
}
Set::Set(int size)
{
- m_p_nArray = NULL;
- m_nArrayLen = 0;
- m_nSize = 0;
- if(size > 0) {
- setSize(size);
- }
+ m_p_nArray = NULL;
+ m_nArrayLen = 0;
+ m_nSize = 0;
+ if (size > 0)
+ setSize(size);
}
-Set::~Set() {
- if( (m_p_nArray != (&m_p_nArray_Static[0])) && (m_p_nArray != NULL))
- delete [] m_p_nArray;
- m_p_nArray = NULL;
+Set::~Set()
+{
+ if (m_p_nArray && m_p_nArray != &m_p_nArray_Static[0])
+ delete [] m_p_nArray;
+ m_p_nArray = NULL;
}
+void
+Set::clearExcess()
+{
+ // now just ensure that no bits over the maximum size were set
+#ifdef _LP64
+ long mask = 0x7FFFFFFFFFFFFFFF;
+#else
+ long mask = 0x7FFFFFFF;
+#endif
-// /*
-// * This function should set the bit corresponding to index
-// * to 1.
-// */
+ // the number of populated spaces in the higest-order array slot
+ // is: m_nSize % LONG_BITS, so the uppermost LONG_BITS -
+ // m_nSize%64 bits should be cleared
+ if ((m_nSize % LONG_BITS) != 0) {
+ for (int j = 0; j < 64 - (m_nSize & INDEX_MASK); j++) {
+ m_p_nArray[m_nArrayLen - 1] &= mask;
+ mask = mask >> 1;
+ }
+ }
+}
-// void Set::add(NodeID index)
-// {
-// assert(index<m_nSize && index >= 0);
-
-// #ifdef __32BITS__
-// m_p_nArray[index>>5] |= (1 << (index & 0x01F));
-// #else
-// m_p_nArray[index>>6] |= (((unsigned long) 1) << (index & 0x03F));
-// #endif // __32BITS__
-
-// }
/*
- * This function should set all the bits in the current set
- * that are already set in the parameter set
+ * This function should set all the bits in the current set that are
+ * already set in the parameter set
*/
-void Set::addSet(const Set& set)
+void
+Set::addSet(const Set& set)
{
- assert(getSize()==set.getSize());
- for(int i=0; i<m_nArrayLen; i++) {
- m_p_nArray[i] |= set.m_p_nArray[i];
- }
-
+ assert(getSize()==set.getSize());
+ for (int i = 0; i < m_nArrayLen; i++)
+ m_p_nArray[i] |= set.m_p_nArray[i];
}
/*
- * This function should randomly assign 1 to the bits in the set--
- * it should not clear the bits bits first, though?
+ * This function should randomly assign 1 to the bits in the set--it
+ * should not clear the bits bits first, though?
*/
-void Set::addRandom()
+void
+Set::addRandom()
{
- for(int i=0; i<m_nArrayLen; i++) {
- m_p_nArray[i] |= random() ^ (random() << 4); // this ensures that all 32
bits are subject to random effects,
- // as RAND_MAX typically =
0x7FFFFFFF
- }
-
- // now just ensure that no bits over the maximum size were set
-#ifdef __32BITS__
- long mask = 0x7FFFFFFF;
-
- // the number of populated spaces in the higest-order array slot is:
- // m_nSize % 32, so the uppermost 32 - m_nSize%32 bits should be
- // cleared
-
- if((m_nSize % 32) != 0) {
- for(int j=0; j<32-(m_nSize&0x01F); j++) {
- m_p_nArray[m_nArrayLen-1] &= mask;
- mask = mask >> 1;
+ for (int i = 0; i < m_nArrayLen; i++) {
+ // this ensures that all 32 bits are subject to random effects,
+ // as RAND_MAX typically = 0x7FFFFFFF
+ m_p_nArray[i] |= random() ^ (random() << 4);
}
- }
-#else
- long mask = 0x7FFFFFFFFFFFFFFF;
-
- // the number of populated spaces in the higest-order array slot is:
- // m_nSize % 64, so the uppermost 64 - m_nSize%64 bits should be
- // cleared
-
- if((m_nSize % 64) != 0) {
- for(int j=0; j<64-(m_nSize&0x03F); j++) {
- m_p_nArray[m_nArrayLen-1] &= mask;
- mask = mask >> 1;
- }
- }
-#endif // __32BITS__
-
+ clearExcess();
}
-// /*
-// * This function unsets the bit associated with index
-// */
-// void Set::remove(NodeID index)
-// {
-// assert(index<m_nSize && index>=0);
-
-// #ifdef __32BITS__
-// m_p_nArray[index>>5] &= ~(0x00000001 << (index & 0x01F));
-// #else
-// m_p_nArray[index>>6] &= ~(((unsigned long) 0x0000000000000001) << (index
& 0x03F));
-// #endif // __32BITS__
-
-// }
-
-
/*
* This function clears bits that are =1 in the parameter set
*/
-void Set::removeSet(const Set& set)
+void
+Set::removeSet(const Set& set)
{
-
- assert(m_nSize==set.m_nSize);
- for(int i=0; i<m_nArrayLen; i++) {
- m_p_nArray[i] &= ~(set.m_p_nArray[i]);
- }
-
+ assert(m_nSize == set.m_nSize);
+ for (int i = 0; i < m_nArrayLen; i++)
+ m_p_nArray[i] &= ~set.m_p_nArray[i];
}
-// /*
-// * This function clears all bits in the set
-// */
-// void Set::clear()
-// {
-// for(int i=0; i<m_nArrayLen; i++) {
-// m_p_nArray[i] = 0;
-// }
-// }
-
/*
* this function sets all bits in the set
*/
-void Set::broadcast()
+void
+Set::broadcast()
{
+ for (int i = 0; i < m_nArrayLen; i++)
+ m_p_nArray[i] = -1; // note that -1 corresponds to all 1's in 2's comp.
- for(int i=0; i<m_nArrayLen; i++) {
- m_p_nArray[i] = -1; // note that -1 corresponds to all 1's in 2's comp.
- }
-
- // now just ensure that no bits over the maximum size were set
-#ifdef __32BITS__
- long mask = 0x7FFFFFFF;
-
- // the number of populated spaces in the higest-order array slot is:
- // m_nSize % 32, so the uppermost 32 - m_nSize%32 bits should be
- // cleared
-
- if((m_nSize % 32) != 0) {
- for(int j=0; j<32-(m_nSize&0x01F); j++) {
- m_p_nArray[m_nArrayLen-1] &= mask;
- mask = mask >> 1;
- }
- }
-#else
- long mask = 0x7FFFFFFFFFFFFFFF;
-
- // the number of populated spaces in the higest-order array slot is:
- // m_nSize % 64, so the uppermost 64 - m_nSize%64 bits should be
- // cleared
-
- if((m_nSize % 64) != 0) {
- for(int j=0; j<64-(m_nSize&0x03F); j++) {
- m_p_nArray[m_nArrayLen-1] &= mask;
- mask = mask >> 1;
- }
- }
-#endif // __32BITS__
-
+ clearExcess();
}
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev