* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <algorithm>
+
#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));
}
}
}
-void
-NetDest::addRandom()
-{
- int i = random()%m_bits.size();
- m_bits[i].addRandom();
-}
-
void
NetDest::setNetDest(MachineType machine, const Set& set)
{
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<NodeID>
+std::vector<NodeID>
NetDest::getAllDest()
{
- Vector<NodeID> dest;
+ std::vector<NodeID> 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);
}
}
}
{
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
{
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;
}
}
}
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++) {
}
void
-NetDest::print(ostream& out) const
+NetDest::print(std::ostream& out) const
{
out << "[NetDest (" << m_bits.size() << ") ";
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;
+}