/usr/include/ace/Message_Queue.h is in libace-dev 6.0.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | // -*- C++ -*-
//=============================================================================
/**
* @file Message_Queue.h
*
* $Id: Message_Queue.h 91688 2010-09-09 11:21:50Z johnnyw $
*
* @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
*/
//=============================================================================
#ifndef ACE_MESSAGE_QUEUE_H
#define ACE_MESSAGE_QUEUE_H
#include /**/ "ace/pre.h"
#include "ace/Message_Block.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "ace/IO_Cntl_Msg.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
// Forward decls.
class ACE_Notification_Strategy;
template <ACE_SYNCH_DECL> class ACE_Message_Queue_Iterator;
template <ACE_SYNCH_DECL> class ACE_Message_Queue_Reverse_Iterator;
/**
* @class ACE_Message_Queue_Base
*
* @brief Base class for ACE_Message_Queue, which is the central
* queueing facility for messages in the ACE framework.
*
* For all the ACE_Time_Value pointer parameters the caller will
* block until action is possible if @a timeout == 0. Otherwise, it
* will wait until the absolute time specified in *@a timeout
* elapses.
*
* A queue is always in one of three states:
* . ACTIVATED
* . DEACTIVATED
* . PULSED
*/
class ACE_Export ACE_Message_Queue_Base
{
public:
enum
{
// Default high and low watermarks.
/// Default high watermark (16 K).
DEFAULT_HWM = 16 * 1024,
/// Default low watermark (same as high water mark).
DEFAULT_LWM = 16 * 1024,
// Queue states. Before PULSED state was added, the activate()
// and deactivate() methods returned WAS_INACTIVE or WAS_ACTIVE
// to indicate the previous condition. Now those methods
// return the state the queue was previously in. WAS_ACTIVE
// and WAS_INACTIVE are defined to match previous semantics for
// applications that don't use the PULSED state.
/// Message queue is active and processing normally
ACTIVATED = 1,
/// Queue is deactivated; no enqueue or dequeue operations allowed.
DEACTIVATED = 2,
/// Message queue was pulsed; enqueue and dequeue may proceed normally.
PULSED = 3
};
ACE_Message_Queue_Base (void);
/// Close down the message queue and release all resources.
virtual int close (void) = 0;
/// Close down the message queue and release all resources.
virtual ~ACE_Message_Queue_Base (void);
// = Enqueue and dequeue methods.
/**
* Retrieve the first ACE_Message_Block without removing it. Note
* that @a timeout uses <{absolute}> time rather than <{relative}>
* time. If the @a timeout elapses without receiving a message -1 is
* returned and @c errno is set to @c EWOULDBLOCK. If the queue is
* deactivated -1 is returned and @c errno is set to <ESHUTDOWN>.
* Otherwise, returns -1 on failure, else the number of items still
* on the queue.
*/
virtual int peek_dequeue_head (ACE_Message_Block *&first_item,
ACE_Time_Value *timeout = 0) = 0;
/**
* Enqueue a <ACE_Message_Block *> into the tail of the queue.
* Returns number of items in queue if the call succeeds or -1
* otherwise. These calls return -1 when queue is closed,
* deactivated (in which case @c errno == <ESHUTDOWN>), when a signal
* occurs (in which case @c errno == <EINTR>, or if the time
* specified in timeout elapses (in which case @c errno ==
* @c EWOULDBLOCK).
*/
virtual int enqueue_tail (ACE_Message_Block *new_item,
ACE_Time_Value *timeout = 0) = 0;
virtual int enqueue (ACE_Message_Block *new_item,
ACE_Time_Value *timeout = 0) = 0;
/**
* Dequeue and return the <ACE_Message_Block *> at the head of the
* queue. Returns number of items in queue if the call succeeds or
* -1 otherwise. These calls return -1 when queue is closed,
* deactivated (in which case @c errno == <ESHUTDOWN>), when a signal
* occurs (in which case @c errno == <EINTR>, or if the time
* specified in timeout elapses (in which case @c errno ==
* @c EWOULDBLOCK).
*/
virtual int dequeue_head (ACE_Message_Block *&first_item,
ACE_Time_Value *timeout = 0) = 0;
virtual int dequeue (ACE_Message_Block *&first_item,
ACE_Time_Value *timeout = 0) = 0;
// = Check if queue is full/empty.
/// True if queue is full, else false.
virtual bool is_full (void) = 0;
/// True if queue is empty, else false.
virtual bool is_empty (void) = 0;
// = Queue statistic methods.
/// Number of total bytes on the queue, i.e., sum of the message
/// block sizes.
virtual size_t message_bytes (void) = 0;
/// Number of total length on the queue, i.e., sum of the message
/// block lengths.
virtual size_t message_length (void) = 0;
/// Number of total messages on the queue.
virtual size_t message_count (void) = 0;
/// New value of the number of total bytes on the queue, i.e.,
/// sum of the message block sizes.
virtual void message_bytes (size_t new_size) = 0;
/// New value of the number of total length on the queue, i.e.,
/// sum of the message block lengths.
virtual void message_length (size_t new_length) = 0;
// = Activation control methods.
/**
* Deactivate the queue and wake up all threads waiting on the queue
* so they can continue. No messages are removed from the queue,
* however. Any other operations called until the queue is
* activated again will immediately return -1 with @c errno
* ESHUTDOWN.
*
* @retval The queue's state before this call.
*/
virtual int deactivate (void) = 0;
/**
* Reactivate the queue so that threads can enqueue and dequeue
* messages again.
*
* @retval The queue's state before this call.
*/
virtual int activate (void) = 0;
/**
* Pulse the queue to wake up any waiting threads. Changes the
* queue state to PULSED; future enqueue/dequeue operations proceed
* as in ACTIVATED state.
*
* @retval The queue's state before this call.
*/
virtual int pulse (void) = 0;
/// Returns the current state of the queue.
virtual int state (void);
/// Returns 1 if the state of the queue is DEACTIVATED,
/// and 0 if the queue's state is ACTIVATED or PULSED.
virtual int deactivated (void) = 0;
/// Get the notification strategy for the <Message_Queue>
virtual ACE_Notification_Strategy *notification_strategy (void) = 0;
/// Set the notification strategy for the <Message_Queue>
virtual void notification_strategy (ACE_Notification_Strategy *s) = 0;
// = Notification hook.
/// Dump the state of an object.
virtual void dump (void) const = 0;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
private:
// = Disallow copying and assignment.
ACE_Message_Queue_Base (const ACE_Message_Queue_Base &);
void operator= (const ACE_Message_Queue_Base &);
protected:
/// Indicates the state of the queue, which can be
/// <ACTIVATED>, <DEACTIVATED>, or <PULSED>.
int state_;
};
ACE_END_VERSIONED_NAMESPACE_DECL
// Include the templates here.
#include "ace/Message_Queue_T.h"
#if defined (__ACE_INLINE__)
#include "ace/Message_Queue.inl"
#endif /* __ACE_INLINE__ */
#include /**/ "ace/post.h"
#endif /* ACE_MESSAGE_QUEUE_H */
|