#include <Queue.h>

Inheritance diagram for Ipc::FewToFewBiQueue:
Collaboration diagram for Ipc::FewToFewBiQueue:

Classes

struct  Metadata
 Shared metadata for FewToFewBiQueue. More...
 
class  Owner
 

Public Types

enum  Group {
  groupA = 0 ,
  groupB = 1
}
 
typedef OneToOneUniQueue::Full Full
 
typedef OneToOneUniQueue::ItemTooLarge ItemTooLarge
 

Public Member Functions

 FewToFewBiQueue (const String &id, const Group aLocalGroup, const int aLocalProcessId)
 
template<class Value >
bool findOldest (const int remoteProcessId, Value &value) const
 
void clearReaderSignal (const int remoteProcessId)
 clears the reader notification received by the local process from the remote process More...
 
void clearAllReaderSignals ()
 clears all reader notifications received by the local process More...
 
template<class Value >
bool pop (int &remoteProcessId, Value &value)
 picks a process and calls OneToOneUniQueue::pop() using its queue More...
 
template<class Value >
bool push (const int remoteProcessId, const Value &value)
 calls OneToOneUniQueue::push() using the given process queue More...
 
template<class Value >
bool peek (int &remoteProcessId, Value &value) const
 peeks at the item likely to be pop()ed next More...
 
template<class Value >
void stat (std::ostream &) const
 prints current state; suitable for cache manager reports More...
 
QueueReader::BalancelocalBalance ()
 returns local reader's balance More...
 
const QueueReader::Balancebalance (const int remoteProcessId) const
 returns reader's balance for a given remote process More...
 
QueueReader::RatelocalRateLimit ()
 returns local reader's rate limit More...
 
const QueueReader::RaterateLimit (const int remoteProcessId) const
 returns reader's rate limit for a given remote process More...
 
int inSize (const int remoteProcessId) const
 number of items in incoming queue from a given remote process More...
 
int outSize (const int remoteProcessId) const
 number of items in outgoing queue to a given remote process More...
 

Static Public Member Functions

static OwnerInit (const String &id, const int groupASize, const int groupAIdOffset, const int groupBSize, const int groupBIdOffset, const unsigned int maxItemSize, const int capacity)
 
static int MaxItemsCount (const int groupASize, const int groupBSize, const int capacity)
 maximum number of items in the queue More...
 

Protected Member Functions

const OneToOneUniQueueinQueue (const int remoteProcessId) const override
 incoming queue from a given remote process More...
 
const OneToOneUniQueueoutQueue (const int remoteProcessId) const override
 outgoing queue to a given remote process More...
 
const QueueReaderlocalReader () const override
 
const QueueReaderremoteReader (const int processId) const override
 
int remotesCount () const override
 
int remotesIdOffset () const override
 
OneToOneUniQueueinQueue (const int remoteProcessId)
 
OneToOneUniQueueoutQueue (const int remoteProcessId)
 
QueueReaderlocalReader ()
 
QueueReaderremoteReader (const int remoteProcessId)
 

Protected Attributes

const int theLocalProcessId
 process ID of this queue More...
 

Private Member Functions

bool validProcessId (const Group group, const int processId) const
 
int oneToOneQueueIndex (const Group fromGroup, const int fromProcessId, const Group toGroup, const int toProcessId) const
 
const OneToOneUniQueueoneToOneQueue (const Group fromGroup, const int fromProcessId, const Group toGroup, const int toProcessId) const
 
int readerIndex (const Group group, const int processId) const
 
Group localGroup () const
 
Group remoteGroup () const
 

Private Attributes

const Mem::Pointer< Metadatametadata
 shared metadata More...
 
const Mem::Pointer< OneToOneUniQueuesqueues
 unidirection one-to-one queues More...
 
const Mem::Pointer< QueueReadersreaders
 readers array More...
 
const Group theLocalGroup
 group of this queue More...
 
int theLastPopProcessId
 the ID of the last process we tried to pop() from More...
 

Detailed Description

Lockless fixed-capacity bidirectional queue for a limited number processes. Allows communication between two groups of processes: any process in one group may send data to and receive from any process in another group, but processes in the same group can not communicate. Process in each group has a unique integer ID in [groupIdOffset, groupIdOffset + groupSize) range.

Definition at line 242 of file Queue.h.

Member Typedef Documentation

◆ Full

Definition at line 245 of file Queue.h.

◆ ItemTooLarge

Member Enumeration Documentation

◆ Group

Enumerator
groupA 
groupB 

Definition at line 276 of file Queue.h.

Constructor & Destructor Documentation

◆ FewToFewBiQueue()

Ipc::FewToFewBiQueue::FewToFewBiQueue ( const String id,
const Group  aLocalGroup,
const int  aLocalProcessId 
)

Definition at line 233 of file Queue.cc.

References debugs, localReader(), metadata, Must, queues, and readers.

Member Function Documentation

◆ balance()

const Ipc::QueueReader::Balance & Ipc::BaseMultiQueue::balance ( const int  remoteProcessId) const
inherited

Definition at line 180 of file Queue.cc.

References Ipc::QueueReader::balance.

◆ clearAllReaderSignals()

void Ipc::BaseMultiQueue::clearAllReaderSignals ( )
inherited

Definition at line 172 of file Queue.cc.

References Ipc::QueueReader::clearSignal(), debugs, and Ipc::QueueReader::id.

◆ clearReaderSignal()

void Ipc::BaseMultiQueue::clearReaderSignal ( const int  remoteProcessId)
inherited

Definition at line 159 of file Queue.cc.

◆ findOldest()

template<class Value >
bool Ipc::FewToFewBiQueue::findOldest ( const int  remoteProcessId,
Value &  value 
) const

finds the oldest item in incoming and outgoing queues between us and the given remote process

Definition at line 611 of file Queue.h.

References debugs, inQueue(), outQueue(), Ipc::OneToOneUniQueue::peek(), remoteGroup(), Ipc::OneToOneUniQueue::size(), Ipc::BaseMultiQueue::theLocalProcessId, and validProcessId().

◆ Init()

Ipc::FewToFewBiQueue::Owner * Ipc::FewToFewBiQueue::Init ( const String id,
const int  groupASize,
const int  groupAIdOffset,
const int  groupBSize,
const int  groupBIdOffset,
const unsigned int  maxItemSize,
const int  capacity 
)
static

Definition at line 228 of file Queue.cc.

Referenced by IpcIoRr::create().

◆ inQueue() [1/2]

Ipc::OneToOneUniQueue & Ipc::BaseMultiQueue::inQueue ( const int  remoteProcessId)
protectedinherited

Definition at line 194 of file Queue.cc.

◆ inQueue() [2/2]

const Ipc::OneToOneUniQueue & Ipc::FewToFewBiQueue::inQueue ( const int  remoteProcessId) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 295 of file Queue.cc.

Referenced by findOldest().

◆ inSize()

int Ipc::BaseMultiQueue::inSize ( const int  remoteProcessId) const
inlineinherited

Definition at line 204 of file Queue.h.

References Ipc::BaseMultiQueue::inQueue(), and Ipc::OneToOneUniQueue::size().

◆ localBalance()

QueueReader::Balance & Ipc::BaseMultiQueue::localBalance ( )
inlineinherited

Definition at line 192 of file Queue.h.

References Ipc::QueueReader::balance, and Ipc::BaseMultiQueue::localReader().

◆ localGroup()

Group Ipc::FewToFewBiQueue::localGroup ( ) const
inlineprivate

Definition at line 299 of file Queue.h.

References theLocalGroup.

◆ localRateLimit()

QueueReader::Rate & Ipc::BaseMultiQueue::localRateLimit ( )
inlineinherited

Definition at line 198 of file Queue.h.

References Ipc::BaseMultiQueue::localReader(), and Ipc::QueueReader::rateLimit.

◆ localReader() [1/2]

Ipc::QueueReader & Ipc::BaseMultiQueue::localReader ( )
protectedinherited

Definition at line 210 of file Queue.cc.

◆ localReader() [2/2]

const Ipc::QueueReader & Ipc::FewToFewBiQueue::localReader ( ) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 318 of file Queue.cc.

Referenced by FewToFewBiQueue().

◆ MaxItemsCount()

int Ipc::FewToFewBiQueue::MaxItemsCount ( const int  groupASize,
const int  groupBSize,
const int  capacity 
)
static

Definition at line 247 of file Queue.cc.

Referenced by IpcIoRr::claimMemoryNeeds().

◆ oneToOneQueue()

const Ipc::OneToOneUniQueue & Ipc::FewToFewBiQueue::oneToOneQueue ( const Group  fromGroup,
const int  fromProcessId,
const Group  toGroup,
const int  toProcessId 
) const
private

Definition at line 289 of file Queue.cc.

◆ oneToOneQueueIndex()

int Ipc::FewToFewBiQueue::oneToOneQueueIndex ( const Group  fromGroup,
const int  fromProcessId,
const Group  toGroup,
const int  toProcessId 
) const
private

Definition at line 267 of file Queue.cc.

References assert, and Must.

◆ outQueue() [1/2]

Ipc::OneToOneUniQueue & Ipc::BaseMultiQueue::outQueue ( const int  remoteProcessId)
protectedinherited

Definition at line 202 of file Queue.cc.

◆ outQueue() [2/2]

const Ipc::OneToOneUniQueue & Ipc::FewToFewBiQueue::outQueue ( const int  remoteProcessId) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 302 of file Queue.cc.

Referenced by findOldest().

◆ outSize()

int Ipc::BaseMultiQueue::outSize ( const int  remoteProcessId) const
inlineinherited

Definition at line 207 of file Queue.h.

References Ipc::BaseMultiQueue::outQueue(), and Ipc::OneToOneUniQueue::size().

◆ peek()

template<class Value >
bool Ipc::BaseMultiQueue::peek ( int remoteProcessId,
Value &  value 
) const
inherited

◆ pop()

◆ push()

template<class Value >
bool Ipc::BaseMultiQueue::push ( const int  remoteProcessId,
const Value &  value 
)
inherited

◆ rateLimit()

const Ipc::QueueReader::Rate & Ipc::BaseMultiQueue::rateLimit ( const int  remoteProcessId) const
inherited

Definition at line 187 of file Queue.cc.

References Ipc::QueueReader::rateLimit.

◆ readerIndex()

int Ipc::FewToFewBiQueue::readerIndex ( const Group  group,
const int  processId 
) const
private

Definition at line 309 of file Queue.cc.

References Must.

◆ remoteGroup()

Group Ipc::FewToFewBiQueue::remoteGroup ( ) const
inlineprivate

Definition at line 300 of file Queue.h.

References groupA, groupB, and theLocalGroup.

Referenced by findOldest().

◆ remoteReader() [1/2]

const Ipc::QueueReader & Ipc::FewToFewBiQueue::remoteReader ( const int  processId) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 324 of file Queue.cc.

◆ remoteReader() [2/2]

Ipc::QueueReader & Ipc::BaseMultiQueue::remoteReader ( const int  remoteProcessId)
protectedinherited

Definition at line 218 of file Queue.cc.

◆ remotesCount()

int Ipc::FewToFewBiQueue::remotesCount ( ) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 330 of file Queue.cc.

◆ remotesIdOffset()

int Ipc::FewToFewBiQueue::remotesIdOffset ( ) const
overrideprotectedvirtual

Implements Ipc::BaseMultiQueue.

Definition at line 337 of file Queue.cc.

◆ stat()

◆ validProcessId()

bool Ipc::FewToFewBiQueue::validProcessId ( const Group  group,
const int  processId 
) const
private

Definition at line 253 of file Queue.cc.

Referenced by findOldest().

Member Data Documentation

◆ metadata

const Mem::Pointer<Metadata> Ipc::FewToFewBiQueue::metadata
private

Definition at line 303 of file Queue.h.

Referenced by FewToFewBiQueue().

◆ queues

const Mem::Pointer<OneToOneUniQueues> Ipc::FewToFewBiQueue::queues
private

Definition at line 304 of file Queue.h.

Referenced by FewToFewBiQueue().

◆ readers

const Mem::Pointer<QueueReaders> Ipc::FewToFewBiQueue::readers
private

Definition at line 305 of file Queue.h.

Referenced by FewToFewBiQueue().

◆ theLastPopProcessId

int Ipc::BaseMultiQueue::theLastPopProcessId
privateinherited

Definition at line 231 of file Queue.h.

Referenced by Ipc::BaseMultiQueue::peek(), and Ipc::BaseMultiQueue::pop().

◆ theLocalGroup

const Group Ipc::FewToFewBiQueue::theLocalGroup
private

Definition at line 307 of file Queue.h.

Referenced by localGroup(), and remoteGroup().

◆ theLocalProcessId

const int Ipc::BaseMultiQueue::theLocalProcessId
protectedinherited

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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors