X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fruby%2Fcommon%2FNetDest.hh;h=e09be0c2cb26a74c1a9bb02577665592d0f9dc07;hb=16ac48e6a419b75e6a9e86fab9cd2fd62ef9a574;hp=20aac51086ad2ac0f2f8676cc46504f081b6e269;hpb=05f6a4a6b92370162da17ef5cccb5a7e3ba508e5;p=gem5.git diff --git a/src/mem/ruby/common/NetDest.hh b/src/mem/ruby/common/NetDest.hh index 20aac5108..e09be0c2c 100644 --- a/src/mem/ruby/common/NetDest.hh +++ b/src/mem/ruby/common/NetDest.hh @@ -1,4 +1,3 @@ - /* * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood * All rights reserved. @@ -27,119 +26,98 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * Set.hh - * - * Description: - * - * $Id$ - * - */ - -// NetDest specifies the network destination of a NetworkMessage +// NetDest specifies the network destination of a Message // This is backward compatible with the Set class that was previously // used to specify network destinations. // NetDest supports both node networks and component networks -#ifndef NETDEST_H -#define NETDEST_H - -#include "mem/ruby/common/Global.hh" -#include "mem/gems_common/Vector.hh" -#include "mem/ruby/system/NodeID.hh" -#include "mem/ruby/system/MachineID.hh" -#include "mem/ruby/config/RubyConfig.hh" -#include "mem/ruby/common/Set.hh" -#include "mem/protocol/MachineType.hh" - -class Set; - -class NetDest { -public: - // Constructors - // creates and empty set - NetDest(); - explicit NetDest(int bit_size); - - NetDest& operator=(const Set& obj); - - // Destructor - // ~NetDest(); - - // Public Methods - void add(MachineID newElement); - void addNetDest(const NetDest& netDest); - void addRandom(); - void setNetDest(MachineType machine, const Set& set); - void remove(MachineID oldElement); - void removeNetDest(const NetDest& netDest); - void clear(); - void broadcast(); - void broadcast(MachineType machine); - int count() const; - bool isEqual(const NetDest& netDest); - - NetDest OR(const NetDest& orNetDest) const; // return the logical OR of this netDest and orNetDest - NetDest AND(const NetDest& andNetDest) const; // return the logical AND of this netDest and andNetDest +#ifndef __MEM_RUBY_COMMON_NETDEST_HH__ +#define __MEM_RUBY_COMMON_NETDEST_HH__ - // Returns true if the intersection of the two netDests is non-empty - bool intersectionIsNotEmpty(const NetDest& other_netDest) const; +#include +#include - // Returns true if the intersection of the two netDests is empty - bool intersectionIsEmpty(const NetDest& other_netDest) const; - - bool isSuperset(const NetDest& test) const; - bool isSubset(const NetDest& test) const { return test.isSuperset(*this); } - bool isElement(MachineID element) const; - bool isBroadcast() const; - bool isEmpty() const; - - //For Princeton Network - Vector getAllDest(); - - NodeID smallestElement() const; - MachineID smallestElement(MachineType machine) const; - - void setSize(); - int getSize() const { return m_bits.size(); } - - // get element for a index - NodeID elementAt(MachineID index); - - void print(ostream& out) const; - -private: - - // Private Methods - // returns a value >= MachineType_base_level("this machine") and < MachineType_base_level("next highest machine") - int vecIndex(MachineID m) const { - int vec_index = MachineType_base_level(m.type); - assert(vec_index < m_bits.size()); - return vec_index; - } - - NodeID bitIndex(NodeID index) const { - return index; - } - - // Data Members (m_ prefix) - Vector < Set > m_bits; // a Vector of bit vectors - i.e. Sets +#include "mem/ruby/common/Set.hh" +#include "mem/ruby/common/MachineID.hh" +class NetDest +{ + public: + // Constructors + // creates and empty set + NetDest(); + explicit NetDest(int bit_size); + + NetDest& operator=(const Set& obj); + + ~NetDest() + { } + + void add(MachineID newElement); + void addNetDest(const NetDest& netDest); + void setNetDest(MachineType machine, const Set& set); + void remove(MachineID oldElement); + void removeNetDest(const NetDest& netDest); + void clear(); + void broadcast(); + void broadcast(MachineType machine); + int count() const; + bool isEqual(const NetDest& netDest) const; + + // return the logical OR of this netDest and orNetDest + NetDest OR(const NetDest& orNetDest) const; + + // return the logical AND of this netDest and andNetDest + NetDest AND(const NetDest& andNetDest) const; + + // Returns true if the intersection of the two netDests is non-empty + bool intersectionIsNotEmpty(const NetDest& other_netDest) const; + + // Returns true if the intersection of the two netDests is empty + bool intersectionIsEmpty(const NetDest& other_netDest) const; + + bool isSuperset(const NetDest& test) const; + bool isSubset(const NetDest& test) const { return test.isSuperset(*this); } + bool isElement(MachineID element) const; + bool isBroadcast() const; + bool isEmpty() const; + + // For Princeton Network + std::vector getAllDest(); + + MachineID smallestElement() const; + MachineID smallestElement(MachineType machine) const; + + void resize(); + int getSize() const { return m_bits.size(); } + + // get element for a index + NodeID elementAt(MachineID index); + + void print(std::ostream& out) const; + + private: + // returns a value >= MachineType_base_level("this machine") + // and < MachineType_base_level("next highest machine") + int + vecIndex(MachineID m) const + { + int vec_index = MachineType_base_level(m.type); + assert(vec_index < m_bits.size()); + return vec_index; + } + + NodeID bitIndex(NodeID index) const { return index; } + + std::vector m_bits; // a vector of bit vectors - i.e. Sets }; -// Output operator declaration -ostream& operator<<(ostream& out, const NetDest& obj); - -// ******************* Definitions ******************* - -// Output operator definition -extern inline -ostream& operator<<(ostream& out, const NetDest& obj) +inline std::ostream& +operator<<(std::ostream& out, const NetDest& obj) { - obj.print(out); - out << flush; - return out; + obj.print(out); + out << std::flush; + return out; } -#endif //NETDEST_H - +#endif // __MEM_RUBY_COMMON_NETDEST_HH__