ACE_InputCDR Class ReferenceA CDR stream for demarshalling CDR-encoded data.
More...
#include <CDR_Stream.h>
List of all members.
|
Public Member Functions |
| 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) |
| 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) |
| 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.
|
| 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) |
| 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) |
| ACE_InputCDR (const ACE_InputCDR &rhs) |
ACE_InputCDR & | operator= (const ACE_InputCDR &rhs) |
| ACE_InputCDR (const ACE_InputCDR &rhs, size_t size, ACE_CDR::Long offset) |
| ACE_InputCDR (const ACE_InputCDR &rhs, size_t size) |
| 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 (Transfer_Contents rhs) |
| Transfer the contents from <rhs> to a new CDR.
|
| ~ACE_InputCDR (void) |
| Destructor.
|
ACE_CDR::Boolean | skip_wstring (void) |
ACE_CDR::Boolean | skip_string (void) |
ACE_CDR::Boolean | skip_bytes (size_t n) |
| Skip n bytes in the CDR stream.
|
bool | good_bit (void) const |
| returns false if a problem has been detected.
|
const ACE_Message_Block * | start (void) const |
int | grow (size_t newsize) |
void | reset_byte_order (int byte_order) |
void | reset (const ACE_Message_Block *data, int byte_order) |
ACE_Message_Block * | steal_contents (void) |
| Steal the contents from the current CDR.
|
void | steal_from (ACE_InputCDR &cdr) |
void | exchange_data_blocks (ACE_InputCDR &cdr) |
ACE_Data_Block * | clone_from (ACE_InputCDR &cdr) |
void | reset_contents (void) |
char * | rd_ptr (void) |
| Returns the current position for the rd_ptr .
|
char * | wr_ptr (void) |
| Returns the current position for the wr_ptr .
|
size_t | length (void) const |
| Return how many bytes are left in the stream.
|
int | align_read_ptr (size_t alignment) |
bool | do_byte_swap (void) const |
int | byte_order (void) const |
ACE_Char_Codeset_Translator * | char_translator (void) const |
| Access the codeset translators. They can be nil!
|
ACE_WChar_Codeset_Translator * | wchar_translator (void) const |
void | char_translator (ACE_Char_Codeset_Translator *) |
| Set the codeset translators.
|
void | wchar_translator (ACE_WChar_Codeset_Translator *) |
int | adjust (size_t size, char *&buf) |
int | adjust (size_t size, size_t align, char *&buf) |
void | set_version (ACE_CDR::Octet major, ACE_CDR::Octet minor) |
| Set the underlying GIOP version..
|
void | get_version (ACE_CDR::Octet &major, ACE_CDR::Octet &minor) |
| Set the underlying GIOP version..
|
|
ACE_CDR::Boolean | read_boolean (ACE_CDR::Boolean &x) |
ACE_CDR::Boolean | read_char (ACE_CDR::Char &x) |
ACE_CDR::Boolean | read_wchar (ACE_CDR::WChar &x) |
ACE_CDR::Boolean | read_octet (ACE_CDR::Octet &x) |
ACE_CDR::Boolean | read_short (ACE_CDR::Short &x) |
ACE_CDR::Boolean | read_ushort (ACE_CDR::UShort &x) |
ACE_CDR::Boolean | read_long (ACE_CDR::Long &x) |
ACE_CDR::Boolean | read_ulong (ACE_CDR::ULong &x) |
ACE_CDR::Boolean | read_longlong (ACE_CDR::LongLong &x) |
ACE_CDR::Boolean | read_ulonglong (ACE_CDR::ULongLong &x) |
ACE_CDR::Boolean | read_float (ACE_CDR::Float &x) |
ACE_CDR::Boolean | read_double (ACE_CDR::Double &x) |
ACE_CDR::Boolean | read_longdouble (ACE_CDR::LongDouble &x) |
ACE_CDR::Boolean | read_string (ACE_CDR::Char *&x) |
ACE_CDR::Boolean | read_string (ACE_CString &x) |
ACE_CDR::Boolean | read_wstring (ACE_CDR::WChar *&x) |
|
ACE_CDR::Boolean | read_boolean_array (ACE_CDR::Boolean *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_char_array (ACE_CDR::Char *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_wchar_array (ACE_CDR::WChar *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_octet_array (ACE_CDR::Octet *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_short_array (ACE_CDR::Short *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_ushort_array (ACE_CDR::UShort *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_long_array (ACE_CDR::Long *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_ulong_array (ACE_CDR::ULong *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_longlong_array (ACE_CDR::LongLong *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_ulonglong_array (ACE_CDR::ULongLong *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_float_array (ACE_CDR::Float *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_double_array (ACE_CDR::Double *x, ACE_CDR::ULong length) |
ACE_CDR::Boolean | read_longdouble_array (ACE_CDR::LongDouble *x, ACE_CDR::ULong length) |
|
ACE_CDR::Boolean | skip_boolean (void) |
ACE_CDR::Boolean | skip_char (void) |
ACE_CDR::Boolean | skip_wchar (void) |
ACE_CDR::Boolean | skip_octet (void) |
ACE_CDR::Boolean | skip_short (void) |
ACE_CDR::Boolean | skip_ushort (void) |
ACE_CDR::Boolean | skip_long (void) |
ACE_CDR::Boolean | skip_ulong (void) |
ACE_CDR::Boolean | skip_longlong (void) |
ACE_CDR::Boolean | skip_ulonglong (void) |
ACE_CDR::Boolean | skip_float (void) |
ACE_CDR::Boolean | skip_double (void) |
ACE_CDR::Boolean | skip_longdouble (void) |
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 |
Classes |
struct | to_boolean |
struct | to_char |
struct | to_octet |
struct | to_string |
struct | to_wchar |
struct | to_wstring |
struct | Transfer_Contents |
Detailed Description
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:
- Operations to retrieve basic types take parameters by reference.
- 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).
Constructor & Destructor Documentation
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.
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.
Create an input stream from an ACE_Data_Block. The <flag> indicates whether the <data> can be deleted by the CDR stream or not
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.
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.
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.
Create an input CDR from an output CDR.
Transfer the contents from <rhs> to a new CDR.
ACE_INLINE ACE_InputCDR::~ACE_InputCDR |
( |
void |
|
) |
|
Member Function Documentation
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
The buffer x must be large enough to contain length elements. Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
Return false on failure and true on success.
The next field must be a string, this method skips it. It is useful in parsing a TypeCode. - Returns:
false on failure and true on success.
Skip n bytes in the CDR stream.
- Returns:
false on failure and true on success.
ACE_INLINE bool ACE_InputCDR::good_bit |
( |
void |
|
) |
const |
returns false if a problem has been detected.
- Returns:
- The start of the message block chain for this CDR stream.
- Note:
- In the current implementation the chain has length 1, but we are planning to change that.
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
ACE_INLINE void ACE_InputCDR::reset_byte_order |
( |
int |
byte_order |
) |
|
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.
Re-initialize the CDR stream, copying the contents of the chain of message_blocks starting from data.
Steal the contents from the current CDR.
Steal the contents of cdr and make a shallow copy into this stream.
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. - Note:
- We now do only with the start_ message block.
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. - Note:
- The caller is responsible for managing the memory of the returned ACE_Data_Block.
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).
ACE_INLINE char * ACE_InputCDR::rd_ptr |
( |
void |
|
) |
|
Returns the current position for the rd_ptr .
ACE_INLINE char * ACE_InputCDR::wr_ptr |
( |
void |
|
) |
|
Returns the current position for the wr_ptr .
ACE_INLINE size_t ACE_InputCDR::length |
( |
void |
|
) |
const |
Return how many bytes are left in the stream.
ACE_INLINE int ACE_InputCDR::align_read_ptr |
( |
size_t |
alignment |
) |
|
Utility function to allow the user more flexibility. Skips up to the nearest alignment-byte boundary. Argument MUST be a power of 2.
- Returns:
- 0 on success and -1 on failure.
ACE_INLINE bool ACE_InputCDR::do_byte_swap |
( |
void |
|
) |
const |
If true then this stream is writing in non-native byte order. This is only meaningful if ACE_ENABLE_SWAP_ON_WRITE is defined.
ACE_INLINE int ACE_InputCDR::byte_order |
( |
void |
|
) |
const |
If do_byte_swap() returns false , this returns ACE_CDR_BYTE_ORDER else it returns !ACE_CDR_BYTE_ORDER.
Access the codeset translators. They can be nil!
Set the codeset translators.
ACE_INLINE int ACE_InputCDR::adjust |
( |
size_t |
size, |
|
|
char *& |
buf | |
|
) |
| | |
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.
ACE_INLINE int ACE_InputCDR::adjust |
( |
size_t |
size, |
|
|
size_t |
align, |
|
|
char *& |
buf | |
|
) |
| | |
As above, but now the size and alignment requirements may be different.
Set the underlying GIOP version..
Set the underlying GIOP version..
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.
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_INLINE void ACE_InputCDR::rd_ptr |
( |
size_t |
offset |
) |
[private] |
Move the rd_ptr ahead by offset bytes.
ACE_INLINE char * ACE_InputCDR::end |
( |
void |
|
) |
[private] |
Points to the continuation field of the current message block.
Friends And Related Function Documentation
Member Data Documentation
The start of the chain of message blocks, even though in the current version the chain always has length 1.
The CDR stream byte order does not match the one on the machine, swapping is needed while reading.
set to false when an error occurs.
The GIOP versions for this stream.
If not nil, invoke for translation of character and string data.
The documentation for this class was generated from the following files:
Generated on Mon Sep 15 07:15:20 2008 for ACE by
1.5.5
|