Message.hh revision 7002
110810Sbr@bsdpad.com 210810Sbr@bsdpad.com/* 310810Sbr@bsdpad.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 410810Sbr@bsdpad.com * All rights reserved. 510810Sbr@bsdpad.com * 610810Sbr@bsdpad.com * Redistribution and use in source and binary forms, with or without 710810Sbr@bsdpad.com * modification, are permitted provided that the following conditions are 810810Sbr@bsdpad.com * met: redistributions of source code must retain the above copyright 910810Sbr@bsdpad.com * notice, this list of conditions and the following disclaimer; 1010810Sbr@bsdpad.com * redistributions in binary form must reproduce the above copyright 1110810Sbr@bsdpad.com * notice, this list of conditions and the following disclaimer in the 1210810Sbr@bsdpad.com * documentation and/or other materials provided with the distribution; 1310810Sbr@bsdpad.com * neither the name of the copyright holders nor the names of its 1410810Sbr@bsdpad.com * contributors may be used to endorse or promote products derived from 1510810Sbr@bsdpad.com * this software without specific prior written permission. 1610810Sbr@bsdpad.com * 1710810Sbr@bsdpad.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1810810Sbr@bsdpad.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1910810Sbr@bsdpad.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2010810Sbr@bsdpad.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2110810Sbr@bsdpad.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2210810Sbr@bsdpad.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2310810Sbr@bsdpad.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2410810Sbr@bsdpad.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2510810Sbr@bsdpad.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2610810Sbr@bsdpad.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2710810Sbr@bsdpad.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2810810Sbr@bsdpad.com */ 2910810Sbr@bsdpad.com 3010810Sbr@bsdpad.com/* 3110810Sbr@bsdpad.com * $Id$ 3210810Sbr@bsdpad.com */ 3310810Sbr@bsdpad.com 3410810Sbr@bsdpad.com#ifndef MESSAGE_H 3510810Sbr@bsdpad.com#define MESSAGE_H 3610810Sbr@bsdpad.com 3710810Sbr@bsdpad.com#include <iostream> 3811381Sbrandon.potter@amd.com 3910810Sbr@bsdpad.com#include "mem/ruby/common/Global.hh" 4010810Sbr@bsdpad.com#include "mem/gems_common/RefCnt.hh" 4110810Sbr@bsdpad.com#include "mem/gems_common/RefCountable.hh" 4210810Sbr@bsdpad.com#include "mem/ruby/eventqueue/RubyEventQueue.hh" 4310810Sbr@bsdpad.com 4410810Sbr@bsdpad.comclass Message; 4510810Sbr@bsdpad.comtypedef RefCnt<Message> MsgPtr; 4610810Sbr@bsdpad.com 4710810Sbr@bsdpad.comclass Message : public RefCountable { 4810810Sbr@bsdpad.compublic: 4910810Sbr@bsdpad.com // Constructors 5010863Sbr@bsdpad.com Message() : RefCountable() { m_time = g_eventQueue_ptr->getTime(); m_LastEnqueueTime = g_eventQueue_ptr->getTime(); m_DelayedCycles = 0;} 5110810Sbr@bsdpad.com 5210863Sbr@bsdpad.com // Destructor 5310810Sbr@bsdpad.com virtual ~Message() { } 5410810Sbr@bsdpad.com 5510810Sbr@bsdpad.com // Public Methods 5610810Sbr@bsdpad.com virtual Message* clone() const = 0; 5710810Sbr@bsdpad.com virtual void destroy() = 0; 5810810Sbr@bsdpad.com virtual void print(std::ostream& out) const = 0; 5910810Sbr@bsdpad.com 6010810Sbr@bsdpad.com void setDelayedCycles(const int& cycles) { m_DelayedCycles = cycles; } 6111381Sbrandon.potter@amd.com const int& getDelayedCycles() const {return m_DelayedCycles;} 6210863Sbr@bsdpad.com int& getDelayedCycles() {return m_DelayedCycles;} 6310863Sbr@bsdpad.com void setLastEnqueueTime(const Time& time) { m_LastEnqueueTime = time; } 6410863Sbr@bsdpad.com const Time& getLastEnqueueTime() const {return m_LastEnqueueTime;} 6510863Sbr@bsdpad.com Time& getLastEnqueueTime() {return m_LastEnqueueTime;} 6610863Sbr@bsdpad.com 6710863Sbr@bsdpad.com const Time& getTime() const { return m_time; } 6810863Sbr@bsdpad.com void setTime(const Time& new_time) { m_time = new_time; } 6910863Sbr@bsdpad.comprivate: 7010863Sbr@bsdpad.com // Private Methods 7110863Sbr@bsdpad.com 7210863Sbr@bsdpad.com // Data Members (m_ prefix) 7310863Sbr@bsdpad.com Time m_time; 7410863Sbr@bsdpad.com Time m_LastEnqueueTime; // my last enqueue time 7510863Sbr@bsdpad.com int m_DelayedCycles; // my delayed cycles 7610863Sbr@bsdpad.com 7710863Sbr@bsdpad.com}; 7810810Sbr@bsdpad.com 7910810Sbr@bsdpad.com// Output operator declaration 8010810Sbr@bsdpad.comstd::ostream& operator<<(std::ostream& out, const Message& obj); 8110810Sbr@bsdpad.com 8210810Sbr@bsdpad.com// ******************* Definitions ******************* 83 84// Output operator definition 85extern inline 86std::ostream& operator<<(std::ostream& out, const Message& obj) 87{ 88 obj.print(out); 89 out << std::flush; 90 return out; 91} 92 93#endif //MESSAGE_H 94