ACE
6.3.3
|
A CDR stream for demarshalling CDR-encoded data. More...
#include <CDR_Stream.h>
Classes | |
struct | to_boolean |
struct | to_char |
struct | to_octet |
struct | to_string |
struct | to_wchar |
struct | to_wstring |
struct | Transfer_Contents |
Protected Attributes | |
ACE_Message_Block | start_ |
bool | do_byte_swap_ |
bool | good_bit_ |
set to false when an error occurs. More... | |
ACE_CDR::Octet | major_version_ |
The GIOP versions for this stream. More... | |
ACE_CDR::Octet | minor_version_ |
ACE_Char_Codeset_Translator * | char_translator_ |
If not nil, invoke for translation of character and string data. More... | |
ACE_WChar_Codeset_Translator * | wchar_translator_ |
Private Member Functions | |
ACE_CDR::Boolean | read_1 (ACE_CDR::Octet *x) |
ACE_CDR::Boolean | read_2 (ACE_CDR::UShort *x) |
ACE_CDR::Boolean | read_4 (ACE_CDR::ULong *x) |
ACE_CDR::Boolean | read_8 (ACE_CDR::ULongLong *x) |
ACE_CDR::Boolean | read_16 (ACE_CDR::LongDouble *x) |
ACE_CDR::Boolean | read_array (void *x, size_t size, size_t align, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_wchar_array_i (ACE_CDR::WChar *x, ACE_CDR::ULong length) |
void | rd_ptr (size_t offset) |
Move the rd_ptr ahead by offset bytes. More... | |
char * | end (void) |
Points to the continuation field of the current message block. More... | |
Friends | |
class | ACE_Char_Codeset_Translator |
class | ACE_WChar_Codeset_Translator |
A CDR stream for demarshalling CDR-encoded data.
This class is based on the the CORBA spec for Java (98-02-29), java class omg.org.CORBA.portable.InputStream. It diverts in a few ways:
ACE_InputCDR::ACE_InputCDR | ( | const char * | buf, |
size_t | bufsiz, | ||
int | byte_order = ACE_CDR::BYTE_ORDER_NATIVE , |
||
ACE_CDR::Octet | major_version = ACE_CDR_GIOP_MAJOR_VERSION , |
||
ACE_CDR::Octet | minor_version = ACE_CDR_GIOP_MINOR_VERSION |
||
) |
Create an input stream from an arbitrary buffer. The buffer must be properly aligned because this contructor will not work if the buffer is aligned unproperly.See ACE_ptr_align_binary() for instructions on how to align a pointer properly and use ACE_CDR::MAX_ALIGNMENT for the correct alignment.
ACE_InputCDR::ACE_InputCDR | ( | size_t | bufsiz, |
int | byte_order = ACE_CDR::BYTE_ORDER_NATIVE , |
||
ACE_CDR::Octet | major_version = ACE_CDR_GIOP_MAJOR_VERSION , |
||
ACE_CDR::Octet | minor_version = ACE_CDR_GIOP_MINOR_VERSION |
||
) |
Create an empty input stream. The caller is responsible for putting the right data and providing the right alignment.
ACE_InputCDR::ACE_InputCDR | ( | const ACE_Message_Block * | data, |
int | byte_order = ACE_CDR::BYTE_ORDER_NATIVE , |
||
ACE_CDR::Octet | major_version = ACE_CDR_GIOP_MAJOR_VERSION , |
||
ACE_CDR::Octet | minor_version = ACE_CDR_GIOP_MINOR_VERSION , |
||
ACE_Lock * | lock = 0 |
||
) |
Create an input stream from an ACE_Message_Block.
The alignment of the data block is carried into the new ACE_InputCDR object. This constructor either increments the data reference count, or copies the data (if it's a compound message block) so the caller can release the block immediately upon return.
ACE_InputCDR::ACE_InputCDR | ( | ACE_Data_Block * | data, |
ACE_Message_Block::Message_Flags | flag = 0 , |
||
int | byte_order = ACE_CDR::BYTE_ORDER_NATIVE , |
||
ACE_CDR::Octet | major_version = ACE_CDR_GIOP_MAJOR_VERSION , |
||
ACE_CDR::Octet | minor_version = ACE_CDR_GIOP_MINOR_VERSION |
||
) |
Create an input stream from an ACE_Data_Block. The <flag> indicates whether the data can be deleted by the CDR stream or not
ACE_InputCDR::ACE_InputCDR | ( | ACE_Data_Block * | data, |
ACE_Message_Block::Message_Flags | flag, | ||
size_t | read_pointer_position, | ||
size_t | write_pointer_position, | ||
int | byte_order = ACE_CDR::BYTE_ORDER_NATIVE , |
||
ACE_CDR::Octet | major_version = ACE_CDR_GIOP_MAJOR_VERSION , |
||
ACE_CDR::Octet | minor_version = ACE_CDR_GIOP_MINOR_VERSION |
||
) |
Create an input stream from an ACE_Data_Block. It also sets the read and write pointers at the desired positions. This would be helpful if the applications desires to create a new CDR stream from a semi-processed datablock.
ACE_InputCDR::ACE_InputCDR | ( | const ACE_InputCDR & | rhs | ) |
These make a copy of the current stream state, but do not copy the internal buffer, so the same stream can be read multiple times efficiently.
ACE_InputCDR::ACE_InputCDR | ( | const ACE_InputCDR & | rhs, |
size_t | size, | ||
ACE_CDR::Long | offset | ||
) |
When interpreting indirected TypeCodes it is useful to make a "copy" of the stream starting in the new position.
ACE_InputCDR::ACE_InputCDR | ( | const ACE_InputCDR & | rhs, |
size_t | size | ||
) |
This creates an encapsulated stream, the first byte must be (per the spec) the byte order of the encapsulation.
ACE_InputCDR::ACE_InputCDR | ( | const ACE_OutputCDR & | rhs, |
ACE_Allocator * | buffer_allocator = 0 , |
||
ACE_Allocator * | data_block_allocator = 0 , |
||
ACE_Allocator * | message_block_allocator = 0 |
||
) |
Create an input CDR from an output CDR.
ACE_InputCDR::ACE_InputCDR | ( | ACE_InputCDR::Transfer_Contents | x | ) |
Transfer the contents from <rhs> to a new CDR.
|
inlinevirtual |
Destructor.
|
inline |
Returns (in buf) the next position in the buffer aligned to size. It advances the Message_Block rd_ptr
past the data (i.e., buf
+
size
). Sets the good_bit to false
and returns a -1 on failure.
|
inline |
As above, but now the size and alignment requirements may be different.
|
inline |
Utility function to allow the user more flexibility. Skips up to the nearest alignment-byte boundary. Argument MUST be a power of 2.
|
inline |
If do_byte_swap()
returns false
, this returns ACE_CDR_BYTE_ORDER else it returns !ACE_CDR_BYTE_ORDER.
|
inline |
Access the codeset translators. They can be nil!
|
inline |
Set the codeset translators.
ACE_Data_Block * ACE_InputCDR::clone_from | ( | ACE_InputCDR & | cdr | ) |
Copy the data portion from the cdr to this cdr and return the data content (ie. the ACE_Data_Block) from this CDR to the caller.
|
inline |
If true
then this stream is writing in non-native byte order. This is only meaningful if ACE_ENABLE_SWAP_ON_WRITE is defined.
|
inlineprivate |
Points to the continuation field of the current message block.
void ACE_InputCDR::exchange_data_blocks | ( | ACE_InputCDR & | cdr | ) |
Exchange data blocks with the caller of this method. The read and write pointers are also exchanged.
|
inline |
Set the underlying GIOP version..
|
inline |
returns false
if a problem has been detected.
int ACE_InputCDR::grow | ( | size_t | newsize | ) |
Grow the internal buffer, reset rd_ptr
to the first byte in the new buffer that is properly aligned, and set wr_ptr
to rd_ptr
+
newsize
|
inline |
Return how many bytes are left in the stream.
ACE_InputCDR & ACE_InputCDR::operator= | ( | const ACE_InputCDR & | rhs | ) |
|
inline |
Returns the current position for the rd_ptr
.
|
inlineprivate |
Move the rd_ptr ahead by offset bytes.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Read an array of length elements, each of size bytes and the start aligned at a multiple of align. The elements are assumed to be packed with the right alignment restrictions. It is mostly designed for buffers of the basic types.
This operation uses memcpy
; as explained above it is expected that using assignment is faster that memcpy
for one element, but for several elements memcpy
should be more efficient, it could be interesting to find the break even point and optimize for that case, but that would be too platform dependent.
|
inline |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::read_boolean_array | ( | ACE_CDR::Boolean * | x, |
ACE_CDR::ULong | length | ||
) |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::read_string | ( | ACE_CDR::Char *& | x | ) |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::read_string | ( | ACE_CString & | x | ) |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::read_wchar | ( | ACE_CDR::WChar & | x | ) |
Return false
on failure and true
on success.
|
inline |
The buffer x must be large enough to contain length elements. Return false
on failure and true
on success.
|
private |
On those occasions when the native codeset for wchar is smaller than the size of a wchar_t, such as using UTF-16 with a 4-byte wchar_t, a special form of reading the array is needed. Actually, this should be a default translator.
ACE_CDR::Boolean ACE_InputCDR::read_wstring | ( | ACE_CDR::WChar *& | x | ) |
Return false
on failure and true
on success.
void ACE_InputCDR::reset | ( | const ACE_Message_Block * | data, |
int | byte_order | ||
) |
Re-initialize the CDR stream, copying the contents of the chain of message_blocks starting from data.
|
inline |
After reading and partially parsing the contents the user can detect a change in the byte order, this method will let him/her change it.
void ACE_InputCDR::reset_contents | ( | void | ) |
Re-initialize the CDR stream, forgetting about the old contents of the stream and allocating a new buffer (from the allocators).
|
inline |
Set the underlying GIOP version..
|
inline |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::skip_bytes | ( | size_t | n | ) |
Skip n bytes in the CDR stream.
false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::skip_string | ( | void | ) |
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
|
inline |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::skip_wchar | ( | void | ) |
Return false
on failure and true
on success.
ACE_CDR::Boolean ACE_InputCDR::skip_wstring | ( | void | ) |
The next field must be a string, this method skips it. It is useful in parsing a TypeCode.
false
on failure and true
on success.
|
inline |
ACE_Message_Block * ACE_InputCDR::steal_contents | ( | void | ) |
Steal the contents from the current CDR.
void ACE_InputCDR::steal_from | ( | ACE_InputCDR & | cdr | ) |
Steal the contents of cdr and make a shallow copy into this stream.
|
inline |
|
inline |
|
inline |
Returns the current position for the wr_ptr
.
|
friend |
|
friend |
|
protected |
If not nil, invoke for translation of character and string data.
|
protected |
The CDR stream byte order does not match the one on the machine, swapping is needed while reading.
|
protected |
set to false
when an error occurs.
|
protected |
The GIOP versions for this stream.
|
protected |
|
protected |
The start of the chain of message blocks, even though in the current version the chain always has length 1.
|
protected |