Message.hh (7002:48a19d52d939) Message.hh (7039:bc0b6ea676b5)
1
2/*
3 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;

--- 12 unchanged lines hidden (view full) ---

22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 12 unchanged lines hidden (view full) ---

21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
30/*
31 * $Id$
32 */
29#ifndef __MEM_RUBY_SLICC_INTERFACE_MESSAGE_HH__
30#define __MEM_RUBY_SLICC_INTERFACE_MESSAGE_HH__
33
31
34#ifndef MESSAGE_H
35#define MESSAGE_H
36
37#include <iostream>
38
32#include <iostream>
33
39#include "mem/ruby/common/Global.hh"
40#include "mem/gems_common/RefCnt.hh"
41#include "mem/gems_common/RefCountable.hh"
34#include "mem/gems_common/RefCnt.hh"
35#include "mem/gems_common/RefCountable.hh"
36#include "mem/ruby/common/Global.hh"
42#include "mem/ruby/eventqueue/RubyEventQueue.hh"
43
44class Message;
45typedef RefCnt<Message> MsgPtr;
46
37#include "mem/ruby/eventqueue/RubyEventQueue.hh"
38
39class Message;
40typedef RefCnt<Message> MsgPtr;
41
47class Message : public RefCountable {
48public:
49 // Constructors
50 Message() : RefCountable() { m_time = g_eventQueue_ptr->getTime(); m_LastEnqueueTime = g_eventQueue_ptr->getTime(); m_DelayedCycles = 0;}
42class Message : public RefCountable
43{
44 public:
45 Message()
46 : RefCountable()
47 {
48 m_time = g_eventQueue_ptr->getTime();
49 m_LastEnqueueTime = g_eventQueue_ptr->getTime();
50 m_DelayedCycles = 0;
51 }
51
52
52 // Destructor
53 virtual ~Message() { }
53 virtual ~Message() { }
54
54
55 // Public Methods
56 virtual Message* clone() const = 0;
57 virtual void destroy() = 0;
58 virtual void print(std::ostream& out) const = 0;
55 virtual Message* clone() const = 0;
56 virtual void destroy() = 0;
57 virtual void print(std::ostream& out) const = 0;
59
58
60 void setDelayedCycles(const int& cycles) { m_DelayedCycles = cycles; }
61 const int& getDelayedCycles() const {return m_DelayedCycles;}
62 int& getDelayedCycles() {return m_DelayedCycles;}
63 void setLastEnqueueTime(const Time& time) { m_LastEnqueueTime = time; }
64 const Time& getLastEnqueueTime() const {return m_LastEnqueueTime;}
65 Time& getLastEnqueueTime() {return m_LastEnqueueTime;}
59 void setDelayedCycles(const int& cycles) { m_DelayedCycles = cycles; }
60 const int& getDelayedCycles() const {return m_DelayedCycles;}
61 int& getDelayedCycles() {return m_DelayedCycles;}
62 void setLastEnqueueTime(const Time& time) { m_LastEnqueueTime = time; }
63 const Time& getLastEnqueueTime() const {return m_LastEnqueueTime;}
64 Time& getLastEnqueueTime() {return m_LastEnqueueTime;}
66
65
67 const Time& getTime() const { return m_time; }
68 void setTime(const Time& new_time) { m_time = new_time; }
69private:
70 // Private Methods
66 const Time& getTime() const { return m_time; }
67 void setTime(const Time& new_time) { m_time = new_time; }
71
68
72 // Data Members (m_ prefix)
73 Time m_time;
74 Time m_LastEnqueueTime; // my last enqueue time
75 int m_DelayedCycles; // my delayed cycles
76
69 private:
70 Time m_time;
71 Time m_LastEnqueueTime; // my last enqueue time
72 int m_DelayedCycles; // my delayed cycles
77};
78
73};
74
79// Output operator declaration
80std::ostream& operator<<(std::ostream& out, const Message& obj);
81
82// ******************* Definitions *******************
83
84// Output operator definition
85extern inline
86std::ostream& operator<<(std::ostream& out, const Message& obj)
75inline std::ostream&
76operator<<(std::ostream& out, const Message& obj)
87{
77{
88 obj.print(out);
89 out << std::flush;
90 return out;
78 obj.print(out);
79 out << std::flush;
80 return out;
91}
92
81}
82
93#endif //MESSAGE_H
83#endif // __MEM_RUBY_SLICC_INTERFACE_MESSAGE_HH__