#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_count (void);
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_count (void);
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);
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)
);