gem5  v20.1.0.0
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__
TimerTable::setConsumer
void setConsumer(Consumer *consumer_ptr)
Definition: TimerTable.hh:46
operator<<
std::ostream & operator<<(std::ostream &out, const TimerTable &obj)
Definition: TimerTable.hh:89
TimerTable::nextAddress
Addr nextAddress() const
Definition: TimerTable.cc:55
TimerTable::m_name
std::string m_name
Definition: TimerTable.hh:85
TimerTable::TimerTable
TimerTable()
Definition: TimerTable.cc:33
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:63
TimerTable::isReady
bool isReady(Tick curTime) const
Definition: TimerTable.cc:42
TimerTable::isSet
bool isSet(Addr address) const
Definition: TimerTable.hh:60
TimerTable
Definition: TimerTable.hh:40
TimerTable::AddressMap
std::map< Addr, Tick > AddressMap
Definition: TimerTable.hh:76
TimerTable::m_consumer_ptr
Consumer * m_consumer_ptr
Consumer to signal a wakeup()
Definition: TimerTable.hh:83
TimerTable::m_map
AddressMap m_map
Definition: TimerTable.hh:77
TimerTable::m_next_valid
bool m_next_valid
Definition: TimerTable.hh:78
Consumer
Definition: Consumer.hh:43
TimerTable::operator=
TimerTable & operator=(const TimerTable &obj)
TimerTable::m_next_time
Tick m_next_time
Definition: TimerTable.hh:79
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
name
const std::string & name()
Definition: trace.cc:50
Consumer.hh
Address.hh
TimerTable::print
void print(std::ostream &out) const
Definition: TimerTable.cc:95
TimerTable::set
void set(Addr address, Tick ready_time)
Definition: TimerTable.cc:65
TimerTable::unset
void unset(Addr address)
Definition: TimerTable.cc:82
TimerTable::setDescription
void setDescription(const std::string &name)
Definition: TimerTable.hh:53
TimerTable::updateNext
void updateNext() const
Definition: TimerTable.cc:100
TimerTable::m_next_address
Addr m_next_address
Definition: TimerTable.hh:80

Generated on Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17