#include <ace/Message_Queue.h>
class ACE_Message_Queue_Vx : public ACE_Message_Queue<ACE_NULL_SYNCH> {
public:
ACE_Message_Queue_Vx ( size_t max_messages, size_t max_message_length, ACE_Notification_Strategy * = 0 );
virtual int open ( size_t max_messages, size_t max_message_length, ACE_Notification_Strategy * = 0 );
virtual int close (void);
virtual ~ACE_Message_Queue_Vx (void);
virtual size_t message_bytes (void);
virtual size_t message_length (void);
virtual size_t message_count (void);
virtual void message_bytes (size_t new_size);
virtual void message_length (size_t new_length);
virtual size_t high_water_mark (void);
virtual void high_water_mark (size_t hwm);
virtual size_t low_water_mark (void);
virtual void low_water_mark (size_t lwm);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
protected:
virtual int enqueue_i (ACE_Message_Block *new_item);
virtual int enqueue_tail_i (ACE_Message_Block *new_item);
virtual int enqueue_head_i (ACE_Message_Block *new_item);
virtual int dequeue_head_i (ACE_Message_Block *&first_item);
virtual int is_full_i (void);
virtual int is_empty_i (void);
virtual int deactivate_i (void);
virtual int activate_i (void);
virtual int wait_not_full_cond ( ACE_Guard<ACE_Null_Mutex> &mon, ACE_Time_Value *tv );
virtual int wait_not_empty_cond ( ACE_Guard<ACE_Null_Mutex> &mon, ACE_Time_Value *tv );
virtual int signal_enqueue_waiters (void);
virtual int signal_dequeue_waiters (void);
MSG_Q_ID msgq (void);
private:
int max_messages_;
int max_message_length_;
int options_;
inline ACE_UNIMPLEMENTED_FUNC ( void operator= (const ACE_Message_Queue_Vx &) );
inline ACE_UNIMPLEMENTED_FUNC ( virtual int peek_dequeue_head(ACE_Message_Block *&first_item, ACE_Time_Value *tv = 0) );
};
NOTE: *Many* ACE_Message_Queue features are not supported with
this specialization, including:
* The two size arguments to the constructor and open
are
interpreted differently. The first is interpreted as the
maximum number of bytes in a message. The second is
interpreted as the maximum number of messages that can be
queued.
* dequeue_head
*requires* that the ACE_Message_Block
pointer argument point to an ACE_Message_Block that was
allocated by the caller. It must be big enough to support
the received message, without using continutation. The
pointer argument is not modified.
* Message priority. MSG_Q_FIFO is hard-coded.
* enqueue method timeouts.
* peek_dequeue_head
.
* ACE_Message_Queue_Iterators
.
* The ability to change low and high water marks after creation.
* Message_Block
chains. The continuation field of ACE_Message_Block
* is ignored; only the first block of a fragment chain is
* recognized.
ACE_Message_Queue_Vx (
size_t max_messages,
size_t max_message_length,
ACE_Notification_Strategy * = 0
);
Create a message queue with all the defaults.
virtual int open (
size_t max_messages,
size_t max_message_length,
ACE_Notification_Strategy * = 0
);
virtual int close (void);
virtual ~ACE_Message_Queue_Vx (void);
virtual size_t message_bytes (void);
virtual size_t message_length (void);
virtual size_t message_count (void);
virtual void message_bytes (size_t new_size);
virtual void message_length (size_t new_length);
virtual size_t high_water_mark (void);
virtual void high_water_mark (size_t hwm);
virtual size_t low_water_mark (void);
virtual void low_water_mark (size_t lwm);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
virtual int is_full_i (void);
virtual int is_empty_i (void);
= Implementation of public activate
/deactivate
methods above.
These methods assume locks are held.
virtual int deactivate_i (void);
virtual int activate_i (void);
virtual int wait_not_full_cond (
ACE_Guard<ACE_Null_Mutex> &mon,
ACE_Time_Value *tv
);
virtual int wait_not_empty_cond (
ACE_Guard<ACE_Null_Mutex> &mon,
ACE_Time_Value *tv
);
virtual int signal_enqueue_waiters (void);
virtual int signal_dequeue_waiters (void);
MSG_Q_ID msgq (void);
inline ACE_UNIMPLEMENTED_FUNC (
void operator= (const ACE_Message_Queue_Vx &)
);
inline ACE_UNIMPLEMENTED_FUNC (
virtual int peek_dequeue_head(ACE_Message_Block *&first_item,
ACE_Time_Value *tv = 0)
);