gem5  v21.1.0.2
Public Member Functions | Protected Attributes | List of all members
gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits > Class Template Reference

Like a Queue but with a restricted interface and a setTail function which, when the queue is empty, just takes a reference to the pushed item as the single element. More...

#include <buffers.hh>

Inheritance diagram for gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >:
gem5::minor::Reservable

Public Member Functions

 InputBuffer (const std::string &name, const std::string &data_name, unsigned int capacity_)
 
void setTail (ElemType &new_element)
 Set the tail of the queue, this is like push but needs to be followed by pushTail for the new tail to make its way into the queue proper. More...
 
bool empty () const
 No single element or queue entries. More...
 
const ElemType & front () const
 Return the element, or the front of the queue. More...
 
ElemType & front ()
 
void pop ()
 Pop either the head, or if none, the head of the queue. More...
 
void pushTail () const
 Push the single element (if any) into the queue proper. More...
 
void minorTrace () const
 Report elements. More...
 
bool canReserve () const
 Reservable interface, passed on to queue. More...
 
void reserve ()
 Reserve a slot in whatever structure this is attached to. More...
 
void freeReservation ()
 Free a reserved slot. More...
 
unsigned int unreservedRemainingSpace ()
 Like remainingSpace but does not count reserved spaces. More...
 
- Public Member Functions inherited from gem5::minor::Reservable
virtual ~Reservable ()
 

Protected Attributes

Queue< ElemType, ReportTraits, BubbleTraits > queue
 Underlying queue. More...
 
ElemType * elementPtr
 Pointer to the single element (if not NULL) More...
 

Detailed Description

template<typename ElemType, typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
class gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >

Like a Queue but with a restricted interface and a setTail function which, when the queue is empty, just takes a reference to the pushed item as the single element.

Calling pushTail will push that element onto the queue.

The purpose of this class is to allow the faster operation of queues of items which usually don't get deeper than one item and for which the copy associated with a push is expensive enough to want to avoid

The intended use case is the input buffer for pipeline stages, hence the class name

Definition at line 572 of file buffers.hh.

Constructor & Destructor Documentation

◆ InputBuffer()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::InputBuffer ( const std::string &  name,
const std::string &  data_name,
unsigned int  capacity_ 
)
inline

Definition at line 582 of file buffers.hh.

Member Function Documentation

◆ canReserve()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
bool gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::canReserve ( ) const
inlinevirtual

Reservable interface, passed on to queue.

Implements gem5::minor::Reservable.

Definition at line 648 of file buffers.hh.

◆ empty()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
bool gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::empty ( ) const
inline

No single element or queue entries.

Definition at line 605 of file buffers.hh.

◆ freeReservation()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::freeReservation ( )
inlinevirtual

Free a reserved slot.

Implements gem5::minor::Reservable.

Definition at line 650 of file buffers.hh.

◆ front() [1/2]

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
ElemType& gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::front ( )
inline

Definition at line 611 of file buffers.hh.

◆ front() [2/2]

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
const ElemType& gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::front ( ) const
inline

Return the element, or the front of the queue.

Definition at line 608 of file buffers.hh.

◆ minorTrace()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::minorTrace ( ) const
inline

Report elements.

Definition at line 641 of file buffers.hh.

◆ pop()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::pop ( )
inline

Pop either the head, or if none, the head of the queue.

Definition at line 616 of file buffers.hh.

◆ pushTail()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::pushTail ( ) const
inline

Push the single element (if any) into the queue proper.

If the element's reference points to a transient object, remember to always do this before the end of that object's life

Definition at line 632 of file buffers.hh.

Referenced by gem5::minor::InputBuffer< gem5::minor::ForwardLineData >::minorTrace(), and gem5::minor::InputBuffer< gem5::minor::ForwardLineData >::unreservedRemainingSpace().

◆ reserve()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::reserve ( )
inlinevirtual

Reserve a slot in whatever structure this is attached to.

Implements gem5::minor::Reservable.

Definition at line 649 of file buffers.hh.

◆ setTail()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
void gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::setTail ( ElemType &  new_element)
inline

Set the tail of the queue, this is like push but needs to be followed by pushTail for the new tail to make its way into the queue proper.

Definition at line 593 of file buffers.hh.

◆ unreservedRemainingSpace()

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
unsigned int gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::unreservedRemainingSpace ( )
inline

Like remainingSpace but does not count reserved spaces.

Definition at line 654 of file buffers.hh.

Member Data Documentation

◆ elementPtr

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
ElemType* gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::elementPtr
mutableprotected

◆ queue

template<typename ElemType , typename ReportTraits = ReportTraitsAdaptor<ElemType>, typename BubbleTraits = BubbleTraitsAdaptor<ElemType>>
Queue<ElemType, ReportTraits, BubbleTraits> gem5::minor::InputBuffer< ElemType, ReportTraits, BubbleTraits >::queue
mutableprotected

The documentation for this class was generated from the following file:

Generated on Tue Sep 21 2021 12:31:30 for gem5 by doxygen 1.8.17