A CDR stream for writing, i.e. for marshalling. More...
#include <CDR.h>
Public Types | |
typedef ACE_Hash_Map_Manager < ACE_CString, char *, ACE_Null_Mutex > | Repo_Id_Map |
typedef Repo_Id_Map | Codebase_URL_Map |
typedef ACE_Hash_Map_Manager < void *, char *, ACE_Null_Mutex > | Value_Map |
typedef TAO_Intrusive_Ref_Count_Object < Repo_Id_Map, ACE_Null_Mutex > | RC_Repo_Id_Map |
typedef TAO_Intrusive_Ref_Count_Object < Codebase_URL_Map, ACE_Null_Mutex > | RC_Codebase_URL_Map |
typedef TAO_Intrusive_Ref_Count_Object < Value_Map, ACE_Null_Mutex > | RC_Value_Map |
typedef TAO_Intrusive_Ref_Count_Handle < RC_Repo_Id_Map > | Repo_Id_Map_Handle |
typedef TAO_Intrusive_Ref_Count_Handle < RC_Codebase_URL_Map > | Codebase_URL_Map_Handle |
typedef TAO_Intrusive_Ref_Count_Handle < RC_Value_Map > | Value_Map_Handle |
Public Member Functions | |
TAO_OutputCDR (size_t size=0, int byte_order=ACE_CDR_BYTE_ORDER, ACE_Allocator *buffer_allocator=0, ACE_Allocator *data_block_allocator=0, ACE_Allocator *message_block_allocator=0, size_t memcpy_tradeoff=0, ACE_CDR::Octet major_version=TAO_DEF_GIOP_MAJOR, ACE_CDR::Octet minor_version=TAO_DEF_GIOP_MINOR) | |
TAO_OutputCDR (char *data, size_t size, int byte_order=ACE_CDR_BYTE_ORDER, ACE_Allocator *buffer_allocator=0, ACE_Allocator *data_block_allocator=0, ACE_Allocator *message_block_allocator=0, size_t memcpy_tradeoff=0, ACE_CDR::Octet major_version=TAO_DEF_GIOP_MAJOR, ACE_CDR::Octet minor_version=TAO_DEF_GIOP_MINOR) | |
TAO_OutputCDR (char *data, size_t size, int byte_order, ACE_Allocator *buffer_allocator, ACE_Allocator *data_block_allocator, ACE_Allocator *message_block_allocator, size_t memcpy_tradeoff, TAO_GIOP_Fragmentation_Strategy *fs, ACE_CDR::Octet major_version, ACE_CDR::Octet minor_version) | |
TAO_OutputCDR (ACE_Message_Block *data, int byte_order=ACE_CDR_BYTE_ORDER, size_t memcpy_tradeoff=0, ACE_CDR::Octet major_version=TAO_DEF_GIOP_MAJOR, ACE_CDR::Octet minor_version=TAO_DEF_GIOP_MINOR) | |
TAO_OutputCDR (ACE_Data_Block *data, int byte_order=ACE_CDR_BYTE_ORDER, ACE_Allocator *message_block_allocator=0, size_t memcpy_tradeoff=0, TAO_GIOP_Fragmentation_Strategy *fs=0, ACE_CDR::Octet major_version=TAO_DEF_GIOP_MAJOR, ACE_CDR::Octet minor_version=TAO_DEF_GIOP_MINOR) | |
~TAO_OutputCDR (void) | |
Destructor. | |
void | get_version (TAO_GIOP_Message_Version &giop_version) |
Repo_Id_Map_Handle & | get_repo_id_map () |
Value_Map_Handle & | get_value_map () |
void | set_repo_id_map (Repo_Id_Map_Handle &map) |
void | set_value_map (Value_Map_Handle &map) |
void | reset_vt_indirect_maps () |
int | offset (char *pos) |
Calculate the offset between pos and current wr_ptr. | |
Outgoing GIOP Fragment Related Methods | |
These methods are only used when fragmenting outgoing GIOP requests and replies. | |
bool | fragment_stream (ACE_CDR::ULong pending_alignment, ACE_CDR::ULong pending_length) |
Fragment this output CDR stream if necessary. | |
bool | more_fragments (void) const |
Are there more data fragments to come? | |
void | more_fragments (bool more) |
Specify whether there are more data fragments to come. | |
void | message_attributes (CORBA::ULong request_id, TAO_Stub *stub, TAO_Message_Semantics message_semantics, ACE_Time_Value *timeout) |
Set fragmented message attributes. | |
CORBA::ULong | request_id (void) const |
Fragmented message request ID. | |
TAO_Stub * | stub (void) const |
Stub object associated with the request. | |
TAO_Message_Semantics | message_semantics (void) const |
Message semantics (twoway, oneway, reply) | |
ACE_Time_Value * | timeout (void) const |
Maximum time to wait for outgoing message to be sent. | |
Static Public Member Functions | |
static void | throw_stub_exception (int error_num) |
static void | throw_skel_exception (int error_num) |
Private Member Functions | |
TAO_OutputCDR (const TAO_OutputCDR &rhs) | |
TAO_OutputCDR & | operator= (const TAO_OutputCDR &rhs) |
Private Attributes | |
Repo_Id_Map_Handle | repo_id_map_ |
These maps are used by valuetype indirection support. | |
Value_Map_Handle | value_map_ |
Outgoing GIOP Fragment Related Attributes | |
These attributes are only used when fragmenting outgoing GIOP requests and replies. | |
TAO_GIOP_Fragmentation_Strategy *const | fragmentation_strategy_ |
bool | more_fragments_ |
Are there more data fragments to come? | |
CORBA::ULong | request_id_ |
Request ID for the request currently being marshaled. | |
TAO_Stub * | stub_ |
Stub object associated with the request. | |
TAO_Message_Semantics | message_semantics_ |
Twoway, oneway, reply? | |
ACE_Time_Value * | timeout_ |
Request/reply send timeout. | |
Friends | |
class | TAO_InputCDR |
For reading from a output CDR stream. |
A CDR stream for writing, i.e. for marshalling.
This class is based on the the CORBA spec for Java (98-02-29), java class omg.org.CORBA.portable.OutputStream. It diverts in a few ways: + Operations taking arrays don't have offsets, because in C++ it is easier to describe an array starting from x+offset. + Operations return an error status, because exceptions are not widely available in C++ (yet). A particularly useful static member function for this buffer is an interpretive encoding routine, usable as a typecode interpreter callback. Ditto for decoding. These are used to support all OMG-IDL datatypes, even those not supported directly by put/get primitives.
typedef TAO_Intrusive_Ref_Count_Object<Codebase_URL_Map, ACE_Null_Mutex> TAO_OutputCDR::RC_Codebase_URL_Map |
typedef ACE_Hash_Map_Manager<ACE_CString, char*, ACE_Null_Mutex> TAO_OutputCDR::Repo_Id_Map |
typedef ACE_Hash_Map_Manager<void*, char*, ACE_Null_Mutex> TAO_OutputCDR::Value_Map |
TAO_OutputCDR::TAO_OutputCDR | ( | size_t | size = 0 , |
int | byte_order = ACE_CDR_BYTE_ORDER , |
||
ACE_Allocator * | buffer_allocator = 0 , |
||
ACE_Allocator * | data_block_allocator = 0 , |
||
ACE_Allocator * | message_block_allocator = 0 , |
||
size_t | memcpy_tradeoff = 0 , |
||
ACE_CDR::Octet | major_version = TAO_DEF_GIOP_MAJOR , |
||
ACE_CDR::Octet | minor_version = TAO_DEF_GIOP_MINOR |
||
) |
Default constructor, allocates size bytes in the internal buffer, if size == 0 it allocates the default size.
TAO_OutputCDR::TAO_OutputCDR | ( | char * | data, |
size_t | size, | ||
int | byte_order = ACE_CDR_BYTE_ORDER , |
||
ACE_Allocator * | buffer_allocator = 0 , |
||
ACE_Allocator * | data_block_allocator = 0 , |
||
ACE_Allocator * | message_block_allocator = 0 , |
||
size_t | memcpy_tradeoff = 0 , |
||
ACE_CDR::Octet | major_version = TAO_DEF_GIOP_MAJOR , |
||
ACE_CDR::Octet | minor_version = TAO_DEF_GIOP_MINOR |
||
) |
Build a CDR stream with an initial buffer, it will *not* remove data, since it did not allocated it.
TAO_OutputCDR::TAO_OutputCDR | ( | char * | data, |
size_t | size, | ||
int | byte_order, | ||
ACE_Allocator * | buffer_allocator, | ||
ACE_Allocator * | data_block_allocator, | ||
ACE_Allocator * | message_block_allocator, | ||
size_t | memcpy_tradeoff, | ||
TAO_GIOP_Fragmentation_Strategy * | fs, | ||
ACE_CDR::Octet | major_version, | ||
ACE_CDR::Octet | minor_version | ||
) |
Build a CDR stream with an initial buffer, it will *not* remove data since it did not allocated it, and enable fragmentation support.
TAO_OutputCDR::TAO_OutputCDR | ( | ACE_Message_Block * | data, |
int | byte_order = ACE_CDR_BYTE_ORDER , |
||
size_t | memcpy_tradeoff = 0 , |
||
ACE_CDR::Octet | major_version = TAO_DEF_GIOP_MAJOR , |
||
ACE_CDR::Octet | minor_version = TAO_DEF_GIOP_MINOR |
||
) |
Build a CDR stream with an initial Message_Block chain, it will *not* remove data, since it did not allocate it.
TAO_OutputCDR::TAO_OutputCDR | ( | ACE_Data_Block * | data, |
int | byte_order = ACE_CDR_BYTE_ORDER , |
||
ACE_Allocator * | message_block_allocator = 0 , |
||
size_t | memcpy_tradeoff = 0 , |
||
TAO_GIOP_Fragmentation_Strategy * | fs = 0 , |
||
ACE_CDR::Octet | major_version = TAO_DEF_GIOP_MAJOR , |
||
ACE_CDR::Octet | minor_version = TAO_DEF_GIOP_MINOR |
||
) |
Build a CDR stream with an initial data block, it will *not* remove data, since it did not allocated it.
TAO_OutputCDR::~TAO_OutputCDR | ( | void | ) |
Destructor.
TAO_OutputCDR::TAO_OutputCDR | ( | const TAO_OutputCDR & | rhs ) | [private] |
bool TAO_OutputCDR::fragment_stream | ( | ACE_CDR::ULong | pending_alignment, |
ACE_CDR::ULong | pending_length | ||
) |
Fragment this output CDR stream if necessary.
Fragmentation will done through GIOP fragments when the length of the CDR stream length will exceed the configured threshold.
TAO_OutputCDR::Repo_Id_Map_Handle & TAO_OutputCDR::get_repo_id_map | ( | ) |
These methods are used by valuetype indirection support. Accessor to the indirect maps.
TAO_OutputCDR::Value_Map_Handle & TAO_OutputCDR::get_value_map | ( | ) |
void TAO_OutputCDR::get_version | ( | TAO_GIOP_Message_Version & | giop_version ) |
void TAO_OutputCDR::message_attributes | ( | CORBA::ULong | request_id, |
TAO_Stub * | stub, | ||
TAO_Message_Semantics | message_semantics, | ||
ACE_Time_Value * | timeout | ||
) |
Set fragmented message attributes.
TAO_Message_Semantics TAO_OutputCDR::message_semantics | ( | void | ) | const |
Message semantics (twoway, oneway, reply)
bool TAO_OutputCDR::more_fragments | ( | void | ) | const |
Are there more data fragments to come?
void TAO_OutputCDR::more_fragments | ( | bool | more ) |
Specify whether there are more data fragments to come.
int TAO_OutputCDR::offset | ( | char * | pos ) |
Calculate the offset between pos and current wr_ptr.
TAO_OutputCDR& TAO_OutputCDR::operator= | ( | const TAO_OutputCDR & | rhs ) | [private] |
CORBA::ULong TAO_OutputCDR::request_id | ( | void | ) | const |
Fragmented message request ID.
void TAO_OutputCDR::reset_vt_indirect_maps | ( | ) |
If indirect map is not nil and not empty, unbind all entries. Called after marshalling.
void TAO_OutputCDR::set_repo_id_map | ( | TAO_OutputCDR::Repo_Id_Map_Handle & | map ) |
Updater of the maps. These updaters are used to make indirect maps in original stream take effect even during marshalling/demarshalling a redirected stream.
void TAO_OutputCDR::set_value_map | ( | TAO_OutputCDR::Value_Map_Handle & | map ) |
TAO_Stub * TAO_OutputCDR::stub | ( | void | ) | const |
Stub object associated with the request.
void TAO_OutputCDR::throw_skel_exception | ( | int | error_num ) | [static] |
void TAO_OutputCDR::throw_stub_exception | ( | int | error_num ) | [static] |
ACE_Time_Value * TAO_OutputCDR::timeout | ( | void | ) | const |
Maximum time to wait for outgoing message to be sent.
friend class TAO_InputCDR [friend] |
For reading from a output CDR stream.
TAO_GIOP_Fragmentation_Strategy* const TAO_OutputCDR::fragmentation_strategy_ [private] |
Strategy that sends data currently marshaled into this TAO_OutputCDR stream if necessary.
Twoway, oneway, reply?
bool TAO_OutputCDR::more_fragments_ [private] |
Are there more data fragments to come?
These maps are used by valuetype indirection support.
CORBA::ULong TAO_OutputCDR::request_id_ [private] |
Request ID for the request currently being marshaled.
TAO_Stub* TAO_OutputCDR::stub_ [private] |
Stub object associated with the request.
ACE_Time_Value* TAO_OutputCDR::timeout_ [private] |
Request/reply send timeout.
Value_Map_Handle TAO_OutputCDR::value_map_ [private] |