blob: 95d4227f9667702e0d71e82b3406f9981facc076 [file] [log] [blame]
/*
* Copyright (c) 1999 by Mark Hill and David Wood for the Wisconsin
* Multifacet Project. ALL RIGHTS RESERVED.
*
* ##HEADER##
*
* This software is furnished under a license and may be used and
* copied only in accordance with the terms of such license and the
* inclusion of the above copyright notice. This software or any
* other copies thereof or any derivative works may not be provided or
* otherwise made available to any other persons. Title to and
* ownership of the software is retained by Mark Hill and David Wood.
* Any use of this software must include the above copyright notice.
*
* THIS SOFTWARE IS PROVIDED "AS IS". THE LICENSOR MAKES NO
* WARRANTIES ABOUT ITS CORRECTNESS OR PERFORMANCE.
* */
/*
* Description:
* This structure records everything known about a single
* memory request that is queued in the memory controller.
* It is created when the memory request first arrives
* at a memory controller and is deleted when the underlying
* message is enqueued to be sent back to the directory.
*/
#ifndef MEMORYNODE_H
#define MEMORYNODE_H
#include "mem/ruby/common/Global.hh"
#include "mem/ruby/slicc_interface/Message.hh"
#include "mem/protocol/MemoryRequestType.hh"
class MemoryNode {
public:
// Constructors
// old one:
MemoryNode(const Time& time, int counter, const MsgPtr& msgptr, const physical_address_t addr, const bool is_mem_read) {
m_time = time;
m_msg_counter = counter;
m_msgptr = msgptr;
m_addr = addr;
m_is_mem_read = is_mem_read;
m_is_dirty_wb = !is_mem_read;
}
// new one:
MemoryNode(const Time& time, const MsgPtr& msgptr, const physical_address_t addr, const bool is_mem_read, const bool is_dirty_wb) {
m_time = time;
m_msg_counter = 0;
m_msgptr = msgptr;
m_addr = addr;
m_is_mem_read = is_mem_read;
m_is_dirty_wb = is_dirty_wb;
}
// Destructor
~MemoryNode() {};
// Public Methods
void print(ostream& out) const;
// Data Members (m_ prefix) (all public -- this is really more a struct)
Time m_time;
int m_msg_counter;
MsgPtr m_msgptr;
physical_address_t m_addr;
bool m_is_mem_read;
bool m_is_dirty_wb;
};
// Output operator declaration
ostream& operator<<(ostream& out, const MemoryNode& obj);
// ******************* Definitions *******************
// Output operator definition
extern inline
ostream& operator<<(ostream& out, const MemoryNode& obj)
{
obj.print(out);
out << flush;
return out;
}
#endif //MEMORYNODE_H