ACE 8.0.2
|
Stores the data payload that is accessed via one or more ACE_Message_Block's. More...
#include <Message_Block.h>
Protected Member Functions | |
virtual ACE_Data_Block * | release_i () |
Internal release implementation. | |
int | reference_count_i () const |
Internal get the current reference count. | |
ACE_Data_Block * | release_no_delete (ACE_Lock *lock) |
Protected Attributes | |
ACE_Message_Block::ACE_Message_Type | type_ |
Type of message. | |
size_t | cur_size_ |
Current size of message block. | |
size_t | max_size_ |
Total size of buffer. | |
ACE_Message_Block::Message_Flags | flags_ |
Misc flags (e.g., DONT_DELETE and USER_FLAGS). | |
char * | base_ |
Pointer To beginning of message payload. | |
ACE_Allocator * | allocator_strategy_ |
ACE_Lock * | locking_strategy_ |
int | reference_count_ |
ACE_Allocator * | data_block_allocator_ |
The allocator use to destroy ourselves. | |
Private Member Functions | |
ACE_Data_Block & | operator= (const ACE_Data_Block &) |
ACE_Data_Block (const ACE_Data_Block &) | |
Friends | |
class | ACE_Message_Block |
Stores the data payload that is accessed via one or more ACE_Message_Block's.
This data structure is reference counted to maximize sharing. It also contains the <locking_strategy_> (which protects the reference count from race conditions in concurrent programs) and the <allocation_strategy_> (which determines what memory pool is used to allocate the memory).
ACE_Data_Block::ACE_Data_Block | ( | ) |
Default "do-nothing" constructor.
ACE_Data_Block::ACE_Data_Block | ( | size_t | size, |
ACE_Message_Block::ACE_Message_Type | msg_type, | ||
const char * | msg_data, | ||
ACE_Allocator * | allocator_strategy, | ||
ACE_Lock * | locking_strategy, | ||
ACE_Message_Block::Message_Flags | flags, | ||
ACE_Allocator * | data_block_allocator ) |
Initialize.
|
virtual |
Delete all the resources held in the message.
|
private |
|
inline |
Obtain the allocator strategy.
|
inline |
Get message data pointer.
void ACE_Data_Block::base | ( | char * | data, |
size_t | size, | ||
ACE_Message_Block::Message_Flags | mflags = ACE_Message_Block::DONT_DELETE ) |
Set message data pointer (doesn't reallocate).
|
inline |
Get the total amount of allocated space.
|
virtual |
Return an exact "deep copy" of the message, i.e., create fresh new copies of all the Data_Blocks and continuations. Notice that Data_Blocks can act as "Prototypes", i.e. derived classes can override this method and create instances of themselves.
|
virtual |
As clone above, but it does not copy the contents of the buffer, i.e., create a new Data_Block of the same dynamic type, with the same allocator, locking_strategy, and with the same amount of storage available (if max_size is zero) but the buffer is unitialized. If max_size is specified other than zero, it will be used when creating the new data block.
Reimplemented in ACE_Locked_Data_Block< ACE_LOCK >.
|
inline |
Clear the message flag bits specified in less_flags and return the new value.
|
inline |
Get the allocator used to create this object.
void ACE_Data_Block::dump | ( | ) | const |
Dump the state of an object.
ACE_Data_Block * ACE_Data_Block::duplicate | ( | ) |
Return a "shallow" copy that increments our reference count by 1.
|
inline |
Return a pointer to 1 past the end of the allocated data in a message.
|
inline |
Get the current message flags.
|
inline |
Get the locking strategy.
Set a new locking strategy and return the hold one.
|
inline |
Return a pointer to 1 past the end of the allotted data in a message. The allotted data may be less than allocated data if <size()> is passed an argument less than <capacity()>.
|
inline |
Get type of the message.
|
inline |
Set type of the message.
|
private |
int ACE_Data_Block::reference_count | ( | ) | const |
Get the current reference count.
|
inlineprotected |
Internal get the current reference count.
ACE_Data_Block * ACE_Data_Block::release | ( | ACE_Lock * | lock = 0 | ) |
Decrease the shared reference count by 1. If the reference count is > 0 then return this; else if reference count == 0 then delete this
and mb and return 0. Behavior is undefined if reference count < 0.
|
protectedvirtual |
Internal release implementation.
|
protected |
|
inline |
Bitwise-or the more_flags into the existing message flags and return the new value.
|
inline |
Get the total amount of allotted space in the message. The amount of allotted space may be less than allocated space.
Set the total amount of space in the message. Returns 0 if successful, else -1.
|
friend |
Decrease the reference count, but don't delete the object. Returns 0 if the object should be removed. If lock is equal to the locking strategy then we assume that the lock is being held by the current thread; this is used to release all the data blocks in a chain while holding a single lock.
|
protected |
Pointer to the allocator defined for this ACE_Data_Block. Note that this pointer is shared by all owners of this ACE_Data_Block.
|
protected |
Pointer To beginning of message payload.
|
protected |
Current size of message block.
|
protected |
The allocator use to destroy ourselves.
|
protected |
Misc flags (e.g., DONT_DELETE and USER_FLAGS).
|
protected |
Pointer to the locking strategy defined for this ACE_Data_Block. This is used to protect regions of code that access shared ACE_Data_Block state. Note that this lock is shared by all owners of the ACE_Data_Block's data.
|
protected |
Total size of buffer.
|
protected |
Reference count for this ACE_Data_Block, which is used to avoid deep copies (i.e., clone()). Note that this pointer value is shared by all owners of the <Data_Block>'s data, i.e., all the ACE_Message_Blocks.
|
protected |
Type of message.