NAME

ACE_Message_Queue_Base - Workaround HP/C++ compiler bug with enums in templates.

SYNOPSIS

#include <ace/Message_Queue.h>

class ACE_Message_Queue_Base { public: enum{ DEFAULT_HWM = 16 * 1024, DEFAULT_LWM = 16 * 1024, WAS_ACTIVE = 1, WAS_INACTIVE = 2 }; ACE_Message_Queue_Base (void); virtual int close (void) = 0; virtual ~ACE_Message_Queue_Base (void); 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; 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; virtual int is_full (void) = 0; virtual int is_empty (void) = 0; virtual size_t message_bytes (void) = 0; virtual size_t message_length (void) = 0; virtual size_t message_count (void) = 0; virtual void message_bytes (size_t new_size) = 0; virtual void message_length (size_t new_length) = 0; virtual int deactivate (void) = 0; virtual int activate (void) = 0; virtual int deactivated (void) = 0; virtual void dump (void) const = 0; ACE_ALLOC_HOOK_DECLARE; private: inline ACE_UNIMPLEMENTED_FUNC ( void operator= (const ACE_Message_Queue_Base &) ); };

DESCRIPTION

The ever lamest HP/C++ compiler seems to fail if enums are defined inside a template, hence we have to move them into a base class.

Default high and low water marks.

ACE_Message_Queue_Base (void);

virtual int close (void) = 0;

virtual ~ACE_Message_Queue_Base (void);

Enqueue and dequeue methods.

For the following enqueue and dequeue methods, the caller will block until action is possible if timeout == 0. Otherwise, it will wait until the absolute time specified in *timeout elapses. These calls will -1 when queue is closed, deactivated (in which case errno == ESHUTDOWN), when a signal occurs (in which case errno == EINTR, or if the time specified in timeout elapses (in which case errno == 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;

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.

virtual int is_full (void) = 0;

virtual int is_empty (void) = 0;

Queue statistic methods.

virtual size_t message_bytes (void) = 0;

virtual size_t message_length (void) = 0;

virtual size_t message_count (void) = 0;

Manual changes to these stats (used when queued message blocks

change size or lengths).
virtual void message_bytes (size_t new_size) = 0;

virtual void message_length (size_t new_length) = 0;

Activation control methods.

virtual int deactivate (void) = 0;

virtual int activate (void) = 0;

virtual int deactivated (void) = 0;

Notification hook.

virtual void dump (void) const = 0;

ACE_ALLOC_HOOK_DECLARE;

Disallow these operations.

inline ACE_UNIMPLEMENTED_FUNC (
    void operator= (const ACE_Message_Queue_Base &)
    );

AUTHOR

Doug Schmidt

LIBRARY

ace