X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fruby%2Fcommon%2FNetDest.cc;h=0a89bda530d17b7c4297b4d4263790e18d6ab894;hb=16ac48e6a419b75e6a9e86fab9cd2fd62ef9a574;hp=1edf6d1a6e382bbd67a2160ae28cc57e86bfddcf;hpb=5ab13e2deb8f904ef2a233749193fa09ea7013c4;p=gem5.git diff --git a/src/mem/ruby/common/NetDest.cc b/src/mem/ruby/common/NetDest.cc index 1edf6d1a6..0a89bda53 100644 --- a/src/mem/ruby/common/NetDest.cc +++ b/src/mem/ruby/common/NetDest.cc @@ -26,17 +26,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include + #include "mem/ruby/common/NetDest.hh" -#include "mem/protocol/Protocol.hh" NetDest::NetDest() { - setSize(); + resize(); } void NetDest::add(MachineID newElement) { + assert(bitIndex(newElement.num) < m_bits[vecIndex(newElement)].getSize()); m_bits[vecIndex(newElement)].add(bitIndex(newElement.num)); } @@ -49,13 +51,6 @@ NetDest::addNetDest(const NetDest& netDest) } } -void -NetDest::addRandom() -{ - int i = random()%m_bits.size(); - m_bits[i].addRandom(); -} - void NetDest::setNetDest(MachineType machine, const Set& set) { @@ -100,23 +95,23 @@ NetDest::broadcast() void NetDest::broadcast(MachineType machineType) { - for (int i = 0; i < MachineType_base_count(machineType); i++) { + for (NodeID i = 0; i < MachineType_base_count(machineType); i++) { MachineID mach = {machineType, i}; add(mach); } } //For Princeton Network -Vector +std::vector NetDest::getAllDest() { - Vector dest; + std::vector dest; dest.clear(); for (int i = 0; i < m_bits.size(); i++) { for (int j = 0; j < m_bits[i].getSize(); j++) { if (m_bits[i].isElement(j)) { int id = MachineType_base_number((MachineType)i) + j; - dest.insertAtBottom((NodeID)id); + dest.push_back((NodeID)id); } } } @@ -144,28 +139,28 @@ NetDest::smallestElement() const { assert(count() > 0); for (int i = 0; i < m_bits.size(); i++) { - for (int j = 0; j < m_bits[i].getSize(); j++) { + for (NodeID j = 0; j < m_bits[i].getSize(); j++) { if (m_bits[i].isElement(j)) { MachineID mach = {MachineType_from_base_level(i), j}; return mach; } } } - ERROR_MSG("No smallest element of an empty set."); + panic("No smallest element of an empty set."); } MachineID NetDest::smallestElement(MachineType machine) const { int size = m_bits[MachineType_base_level(machine)].getSize(); - for (int j = 0; j < size; j++) { + for (NodeID j = 0; j < size; j++) { if (m_bits[MachineType_base_level(machine)].isElement(j)) { MachineID mach = {machine, j}; return mach; } } - ERROR_MSG("No smallest element of given MachineType."); + panic("No smallest element of given MachineType."); } // Returns true iff all bits are set @@ -222,7 +217,7 @@ NetDest::intersectionIsNotEmpty(const NetDest& other_netDest) const { 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; } } @@ -249,9 +244,9 @@ NetDest::isElement(MachineID element) const } void -NetDest::setSize() +NetDest::resize() { - m_bits.setSize(MachineType_base_level(MachineType_NUM)); + m_bits.resize(MachineType_base_level(MachineType_NUM)); assert(m_bits.size() == MachineType_NUM); for (int i = 0; i < m_bits.size(); i++) { @@ -260,7 +255,7 @@ NetDest::setSize() } void -NetDest::print(ostream& out) const +NetDest::print(std::ostream& out) const { out << "[NetDest (" << m_bits.size() << ") "; @@ -273,3 +268,13 @@ NetDest::print(ostream& out) const out << "]"; } +bool +NetDest::isEqual(const NetDest& n) const +{ + assert(m_bits.size() == n.m_bits.size()); + for (unsigned int i = 0; i < m_bits.size(); ++i) { + if (!m_bits[i].isEqual(n.m_bits[i])) + return false; + } + return true; +}