OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::BasicQueue< T > Class Template Reference

#include <BasicQueue_T.h>

Inheritance diagram for OpenDDS::DCPS::BasicQueue< T >:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::BasicQueue< T >:
Collaboration graph
[legend]

Public Member Functions

int put (T *elem)
 Put a pointer to an element (T*) on to the queue. More...
 
T * peek () const
 
void replace_head (T *value)
 
T * get ()
 
size_t size () const
 Accessor for the current number of elements in the queue. More...
 
void accept_visitor (VisitorType &visitor) const
 
void accept_remove_visitor (VisitorType &visitor)
 
void accept_replace_visitor (VisitorType &visitor)
 
void swap (BasicQueue &other)
 

Private Types

typedef BasicQueueVisitor< T > VisitorType
 
typedef QueueImpl::iterator iterator
 
typedef QueueImpl::const_iterator const_iterator
 

Private Member Functions

typedef OPENDDS_DEQUE (T *) QueueImpl
 

Private Attributes

QueueImpl elements_
 

Detailed Description

template<typename T>
class OpenDDS::DCPS::BasicQueue< T >

Definition at line 26 of file BasicQueue_T.h.

Member Typedef Documentation

◆ const_iterator

template<typename T>
typedef QueueImpl::const_iterator OpenDDS::DCPS::BasicQueue< T >::const_iterator
private

Definition at line 32 of file BasicQueue_T.h.

◆ iterator

template<typename T>
typedef QueueImpl::iterator OpenDDS::DCPS::BasicQueue< T >::iterator
private

Definition at line 31 of file BasicQueue_T.h.

◆ VisitorType

template<typename T>
typedef BasicQueueVisitor<T> OpenDDS::DCPS::BasicQueue< T >::VisitorType
private

Definition at line 29 of file BasicQueue_T.h.

Member Function Documentation

◆ accept_remove_visitor()

template<typename T>
void OpenDDS::DCPS::BasicQueue< T >::accept_remove_visitor ( VisitorType visitor)
inline

Alternate way to supply a visitor to the queue - this will invoke visit_element(T* element, int& remove) on the supplied visitor object once for each element in this BasicQueue<T> object, in order.

The remove argument is a flag that should be set to true (1) in the visitor's visit_element_remove(T* element, int& remove) method if the visitor decides that the element should be removed from the queue. The remove flag is always set to false (0) prior to calling the visitor's visit_element_remove(T* element, int& remove) method.

The visitor can stop visitation early by returning 0 from its visit_element_remove(T* element, int& remove) method.

Definition at line 95 of file BasicQueue_T.h.

Referenced by OpenDDS::DCPS::TransportSendStrategy::clear(), OpenDDS::DCPS::TransportSendStrategy::do_remove_sample(), and OpenDDS::DCPS::TransportSendStrategy::stop().

95  {
96  QueueImpl tmp;
97  for (iterator itr = elements_.begin();
98  itr != elements_.end(); ++itr) {
99 
100  int remove = 0;
101  int keep_going = visitor.visit_element_remove(*itr, remove);
102  if (!remove)
103  tmp.push_back(*itr);
104  if (keep_going == 0) {
105  std::copy(++itr,elements_.end(), std::back_inserter(tmp));
106  break;
107  }
108  }
109  elements_.swap(tmp);
110  }
SequenceBackInsertIterator< Sequence > back_inserter(Sequence &seq)
QueueImpl::iterator iterator
Definition: BasicQueue_T.h:31

◆ accept_replace_visitor()

template<typename T>
void OpenDDS::DCPS::BasicQueue< T >::accept_replace_visitor ( VisitorType visitor)
inline

This kind of visitation may cause the visitor to replace the currently visited element with a new element.

Definition at line 113 of file BasicQueue_T.h.

Referenced by OpenDDS::DCPS::TransportSendStrategy::do_remove_sample().

113  {
114  for (iterator itr = elements_.begin();
115  itr != elements_.end(); ++itr) {
116  if (visitor.visit_element_ref(*itr) == 0)
117  return;
118  }
119  }
QueueImpl::iterator iterator
Definition: BasicQueue_T.h:31

◆ accept_visitor()

template<typename T>
void OpenDDS::DCPS::BasicQueue< T >::accept_visitor ( VisitorType visitor) const
inline

Standard way to supply a visitor to the queue - this will invoke visit_element(T* element) on the supplied visitor object once for each element in this BasicQueue<T> object, in order. The visitor can stop visitation early by returning 0 from its visit_element(T* element) method.

Definition at line 74 of file BasicQueue_T.h.

Referenced by OpenDDS::DCPS::SingleSendBuffer::insert_buffer(), OpenDDS::DCPS::TransportSendStrategy::prepare_packet(), and OpenDDS::DCPS::ThreadPerConnectionSendTask::remove_sample().

74  {
75  for (const_iterator itr = elements_.begin();
76  itr != elements_.end(); ++itr) {
77  visitor.visit_element(*itr);
78  }
79  }
QueueImpl::const_iterator const_iterator
Definition: BasicQueue_T.h:32

◆ get()

template<typename T>
T* OpenDDS::DCPS::BasicQueue< T >::get ( void  )
inline

Extract the top element from the queue. Returns 0 if there are no elements in the queue.

Definition at line 55 of file BasicQueue_T.h.

Referenced by OpenDDS::DCPS::TransportSendStrategy::adjust_packet_after_send(), OpenDDS::DCPS::TransportSendStrategy::get_packet_elems_from_queue(), and OpenDDS::DCPS::ThreadPerConnectionSendTask::svc().

55  {
56  T* result = 0;
57  if (elements_.size()) {
58  result = elements_.front();
59  elements_.pop_front();
60  }
61  return result;
62  }

◆ OPENDDS_DEQUE()

template<typename T>
typedef OpenDDS::DCPS::BasicQueue< T >::OPENDDS_DEQUE ( T *  )
private

◆ peek()

template<typename T>
T* OpenDDS::DCPS::BasicQueue< T >::peek ( void  ) const
inline

◆ put()

template<typename T>
int OpenDDS::DCPS::BasicQueue< T >::put ( T *  elem)
inline

◆ replace_head()

template<typename T>
void OpenDDS::DCPS::BasicQueue< T >::replace_head ( T *  value)
inline

Definition at line 47 of file BasicQueue_T.h.

Referenced by OpenDDS::DCPS::TransportSendStrategy::get_packet_elems_from_queue().

47  {
48  if (elements_.size()) {
49  elements_[0] = value;
50  }
51  }
const LogLevel::Value value
Definition: debug.cpp:61

◆ size()

template<typename T>
size_t OpenDDS::DCPS::BasicQueue< T >::size ( void  ) const
inline

◆ swap()

template<typename T>
void OpenDDS::DCPS::BasicQueue< T >::swap ( BasicQueue< T > &  other)
inline

Member Data Documentation

◆ elements_

template<typename T>
QueueImpl OpenDDS::DCPS::BasicQueue< T >::elements_
private

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