gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TimerTable.hh
Go to the documentation of this file.
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;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
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 
29 #ifndef __MEM_RUBY_STRUCTURES_TIMERTABLE_HH__
30 #define __MEM_RUBY_STRUCTURES_TIMERTABLE_HH__
31 
32 #include <cassert>
33 #include <iostream>
34 #include <map>
35 #include <string>
36 
39 
41 {
42  public:
43  TimerTable();
44 
45  void
46  setConsumer(Consumer* consumer_ptr)
47  {
48  assert(m_consumer_ptr == NULL);
49  m_consumer_ptr = consumer_ptr;
50  }
51 
52  void
53  setDescription(const std::string& name)
54  {
55  m_name = name;
56  }
57 
58  bool isReady(Tick curTime) const;
59  Addr nextAddress() const;
60  bool isSet(Addr address) const { return !!m_map.count(address); }
61  void set(Addr address, Tick ready_time);
62  void unset(Addr address);
63  void print(std::ostream& out) const;
64 
65  private:
66  void updateNext() const;
67 
68  // Private copy constructor and assignment operator
69  TimerTable(const TimerTable& obj);
70  TimerTable& operator=(const TimerTable& obj);
71 
72  // Data Members (m_prefix)
73 
74  // use a std::map for the address map as this container is sorted
75  // and ensures a well-defined iteration order
76  typedef std::map<Addr, Tick> AddressMap;
78  mutable bool m_next_valid;
79  mutable Tick m_next_time; // Only valid if m_next_valid is true
80  mutable Addr m_next_address; // Only valid if m_next_valid is true
81 
84 
85  std::string m_name;
86 };
87 
88 inline std::ostream&
89 operator<<(std::ostream& out, const TimerTable& obj)
90 {
91  obj.print(out);
92  out << std::flush;
93  return out;
94 }
95 
96 #endif // __MEM_RUBY_STRUCTURES_TIMERTABLE_HH__
bool m_next_valid
Definition: TimerTable.hh:78
const std::string & name()
Definition: trace.cc:49
std::ostream & operator<<(std::ostream &out, const TimerTable &obj)
Definition: TimerTable.hh:89
void print(std::ostream &out) const
Definition: TimerTable.cc:95
void set(Addr address, Tick ready_time)
Definition: TimerTable.cc:65
void unset(Addr address)
Definition: TimerTable.cc:82
void setConsumer(Consumer *consumer_ptr)
Definition: TimerTable.hh:46
Addr m_next_address
Definition: TimerTable.hh:80
uint64_t Tick
Tick count type.
Definition: types.hh:63
std::string m_name
Definition: TimerTable.hh:85
bool isSet(Addr address) const
Definition: TimerTable.hh:60
void setDescription(const std::string &name)
Definition: TimerTable.hh:53
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
bool isReady(Tick curTime) const
Definition: TimerTable.cc:42
void updateNext() const
Definition: TimerTable.cc:100
std::map< Addr, Tick > AddressMap
Definition: TimerTable.hh:76
Addr nextAddress() const
Definition: TimerTable.cc:55
Consumer * m_consumer_ptr
Consumer to signal a wakeup()
Definition: TimerTable.hh:83
AddressMap m_map
Definition: TimerTable.hh:77
TimerTable & operator=(const TimerTable &obj)
Tick m_next_time
Definition: TimerTable.hh:79

Generated on Fri Jun 9 2017 13:03:50 for gem5 by doxygen 1.8.6