ACE
6.1.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. | |
ACE_CDR::Octet | major_version_ |
The GIOP versions for this stream. | |
ACE_CDR::Octet | minor_version_ |
ACE_Char_Codeset_Translator * | char_translator_ |
If not nil, invoke for translation of character and string data. | |
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. | |
char * | end (void) |
Points to the continuation field of the current message block. |
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.
|
inline |
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 |
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.
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 |