#include <CDR_Stream.h>
Collaboration diagram for ACE_InputCDR:

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).
Definition at line 552 of file CDR_Stream.h.
|
||||||||||||||||||||||||
|
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. Definition at line 759 of file CDR_Stream.cpp. References ACE_CDR_BYTE_ORDER, ACE_CDR::Octet, and ACE_Message_Block::wr_ptr().
00764 : start_ (buf, bufsiz), 00765 do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), 00766 good_bit_ (true), 00767 major_version_ (major_version), 00768 minor_version_ (minor_version), 00769 char_translator_ (0), 00770 wchar_translator_ (0) 00771 { 00772 this->start_.wr_ptr (bufsiz); 00773 } |
|
||||||||||||||||||||
|
Create an empty input stream. The caller is responsible for putting the right data and providing the right alignment. Definition at line 775 of file CDR_Stream.cpp. References ACE_CDR_BYTE_ORDER, and ACE_CDR::Octet.
00779 : start_ (bufsiz), 00780 do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), 00781 good_bit_ (true), 00782 major_version_ (major_version), 00783 minor_version_ (minor_version), 00784 char_translator_ (0), 00785 wchar_translator_ (0) 00786 { 00787 } |
|
||||||||||||||||||||||||
|
Create an input stream from an ACE_Message_Block. The alignment of the
Definition at line 789 of file CDR_Stream.cpp. References ACE_CDR::Octet, and reset().
00794 : start_ (0, ACE_Message_Block::MB_DATA, 0, 0, 0, lock), 00795 good_bit_ (true), 00796 major_version_ (major_version), 00797 minor_version_ (minor_version), 00798 char_translator_ (0), 00799 wchar_translator_ (0) 00800 00801 { 00802 this->reset (data, byte_order); 00803 } |
|
||||||||||||||||||||||||
|
Create an input stream from an ACE_Data_Block. The indicates whether the can be deleted by the CDR stream or not Definition at line 805 of file CDR_Stream.cpp. References ACE_CDR_BYTE_ORDER, ACE_Message_Block::Message_Flags, and ACE_CDR::Octet.
00810 : start_ (data, flag), 00811 do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), 00812 good_bit_ (true), 00813 major_version_ (major_version), 00814 minor_version_ (minor_version), 00815 char_translator_ (0), 00816 wchar_translator_ (0) 00817 00818 { 00819 } |
|
||||||||||||||||||||||||||||||||
|
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. Definition at line 821 of file CDR_Stream.cpp. References ACE_CDR_BYTE_ORDER, ACE_Message_Block::base(), ACE_Message_Block::end(), ACE_Message_Block::Message_Flags, ACE_CDR::Octet, ACE_Message_Block::rd_ptr(), and ACE_Message_Block::wr_ptr().
00828 : start_ (data, flag), 00829 do_byte_swap_ (byte_order != ACE_CDR_BYTE_ORDER), 00830 good_bit_ (true), 00831 major_version_ (major_version), 00832 minor_version_ (minor_version), 00833 char_translator_ (0), 00834 wchar_translator_ (0) 00835 00836 { 00837 // Set the read pointer 00838 this->start_.rd_ptr (rd_pos); 00839 00840 // Set the write pointer after doing a sanity check. 00841 char* wrpos = this->start_.base () + wr_pos; 00842 00843 if (this->start_.end () >= wrpos) 00844 { 00845 this->start_.wr_ptr (wr_pos); 00846 } 00847 } |
|
|
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. Definition at line 925 of file CDR_Stream.cpp. References ACE_ptr_align_binary(), ACE_Message_Block::base(), ACE_Message_Block::rd_ptr(), start_, and ACE_Message_Block::wr_ptr().
00926 : start_ (rhs.start_, 00927 ACE_CDR::MAX_ALIGNMENT), 00928 do_byte_swap_ (rhs.do_byte_swap_), 00929 good_bit_ (true), 00930 major_version_ (rhs.major_version_), 00931 minor_version_ (rhs.minor_version_), 00932 char_translator_ (rhs.char_translator_), 00933 wchar_translator_ (rhs.wchar_translator_) 00934 { 00935 #if !defined (ACE_LACKS_CDR_ALIGNMENT) 00936 char *buf = ACE_ptr_align_binary (rhs.start_.base (), 00937 ACE_CDR::MAX_ALIGNMENT); 00938 #else 00939 char *buf = rhs.start_.base (); 00940 #endif /* ACE_LACKS_CDR_ALIGNMENT */ 00941 00942 size_t rd_offset = rhs.start_.rd_ptr () - buf; 00943 size_t wr_offset = rhs.start_.wr_ptr () - buf; 00944 this->start_.rd_ptr (rd_offset); 00945 this->start_.wr_ptr (wr_offset); 00946 } |
|
||||||||||||||||
|
When interpreting indirected TypeCodes it is useful to make a "copy" of the stream starting in the new position. Definition at line 850 of file CDR_Stream.cpp. References ACE_ptr_align_binary(), ACE_Message_Block::base(), ACE_CDR::Long, ACE_Message_Block::rd_ptr(), ACE_Message_Block::space(), start_, and ACE_Message_Block::wr_ptr().
00853 : start_ (rhs.start_, 00854 ACE_CDR::MAX_ALIGNMENT), 00855 do_byte_swap_ (rhs.do_byte_swap_), 00856 good_bit_ (true), 00857 major_version_ (rhs.major_version_), 00858 minor_version_ (rhs.minor_version_), 00859 char_translator_ (rhs.char_translator_), 00860 wchar_translator_ (rhs.wchar_translator_) 00861 00862 { 00863 #if !defined (ACE_LACKS_CDR_ALIGNMENT) 00864 // Align the base pointer assuming that the incoming stream is also 00865 // aligned the way we are aligned 00866 char *incoming_start = ACE_ptr_align_binary (rhs.start_.base (), 00867 ACE_CDR::MAX_ALIGNMENT); 00868 #else 00869 char *incoming_start = rhs.start_.base (); 00870 #endif /* ACE_LACKS_CDR_ALIGNMENT */ 00871 00872 const size_t newpos = 00873 (rhs.start_.rd_ptr() - incoming_start) + offset; 00874 00875 if (newpos <= this->start_.space () 00876 && newpos + size <= this->start_.space ()) 00877 { 00878 this->start_.rd_ptr (newpos); 00879 this->start_.wr_ptr (newpos + size); 00880 } 00881 else 00882 this->good_bit_ = false; 00883 } |
|
||||||||||||
|
This creates an encapsulated stream, the first byte must be (per the spec) the byte order of the encapsulation. Definition at line 885 of file CDR_Stream.cpp. References ACE_CDR_BYTE_ORDER, ACE_ptr_align_binary(), ACE_Message_Block::base(), ACE_CDR::Octet, ACE_Message_Block::rd_ptr(), read_octet(), ACE_Message_Block::space(), start_, and ACE_Message_Block::wr_ptr().
00887 : start_ (rhs.start_, 00888 ACE_CDR::MAX_ALIGNMENT), 00889 do_byte_swap_ (rhs.do_byte_swap_), 00890 good_bit_ (true), 00891 major_version_ (rhs.major_version_), 00892 minor_version_ (rhs.minor_version_), 00893 char_translator_ (rhs.char_translator_), 00894 wchar_translator_ (rhs.wchar_translator_) 00895 00896 { 00897 #if !defined (ACE_LACKS_CDR_ALIGNMENT) 00898 // Align the base pointer assuming that the incoming stream is also 00899 // aligned the way we are aligned 00900 char *incoming_start = ACE_ptr_align_binary (rhs.start_.base (), 00901 ACE_CDR::MAX_ALIGNMENT); 00902 #else 00903 char *incoming_start = rhs.start_.base (); 00904 #endif /* ACE_LACKS_CDR_ALIGNMENT */ 00905 00906 const size_t newpos = 00907 rhs.start_.rd_ptr() - incoming_start; 00908 00909 if (newpos <= this->start_.space () 00910 && newpos + size <= this->start_.space ()) 00911 { 00912 // Notice that ACE_Message_Block::duplicate may leave the 00913 // wr_ptr() with a higher value than what we actually want. 00914 this->start_.rd_ptr (newpos); 00915 this->start_.wr_ptr (newpos + size); 00916 00917 ACE_CDR::Octet byte_order = 0; 00918 (void) this->read_octet (byte_order); 00919 this->do_byte_swap_ = (byte_order != ACE_CDR_BYTE_ORDER); 00920 } 00921 else 00922 this->good_bit_ = false; 00923 } |
|
||||||||||||||||||||
|
|
Transfer the contents from to a new CDR.
Definition at line 948 of file CDR_Stream.cpp. References ACE_Data_Block::clone_nocopy(), ACE_Message_Block::data_block(), ACE_Message_Block::rd_ptr(), ACE_Message_Block::replace_data_block(), ACE_InputCDR::Transfer_Contents::rhs_, start_, and ACE_Message_Block::wr_ptr().
00949 : start_ (x.rhs_.start_.data_block ()), 00950 do_byte_swap_ (x.rhs_.do_byte_swap_), 00951 good_bit_ (true), 00952 major_version_ (x.rhs_.major_version_), 00953 minor_version_ (x.rhs_.minor_version_), 00954 char_translator_ (x.rhs_.char_translator_), 00955 wchar_translator_ (x.rhs_.wchar_translator_) 00956 { 00957 00958 this->start_.rd_ptr (x.rhs_.start_.rd_ptr ()); 00959 this->start_.wr_ptr (x.rhs_.start_.wr_ptr ()); 00960 00961 ACE_Data_Block* db = this->start_.data_block ()->clone_nocopy (); 00962 (void) x.rhs_.start_.replace_data_block (db); 00963 } |
|
|
Destructor.
Definition at line 595 of file CDR_Stream.inl.
00596 {
00597 }
|
|
||||||||||||||||
|
As above, but now the size and alignment requirements may be different. Definition at line 1020 of file CDR_Stream.inl. References ACE_ptr_align_binary(), ACE_Message_Block::rd_ptr(), rd_ptr(), and wr_ptr().
01023 {
01024 #if !defined (ACE_LACKS_CDR_ALIGNMENT)
01025 buf = ACE_ptr_align_binary (this->rd_ptr (), align);
01026 #else
01027 buf = this->rd_ptr ();
01028 #endif /* ACE_LACKS_CDR_ALIGNMENT */
01029
01030 char * const end = buf + size;
01031 if (end <= this->wr_ptr ())
01032 {
01033 this->start_.rd_ptr (end);
01034 return 0;
01035 }
01036
01037 this->good_bit_ = false;
01038 return -1;
01039 #if defined (ACE_LACKS_CDR_ALIGNMENT)
01040 ACE_UNUSED_ARG (align);
01041 #endif /* ACE_LACKS_CDR_ALIGNMENT */
01042 }
|
|
||||||||||||
|
Returns (in buf) the next position in the buffer aligned to size. It advances the Message_Block Definition at line 1045 of file CDR_Stream.inl. Referenced by read_16(), read_2(), read_4(), read_8(), read_array(), and read_wchar_array_i().
01047 {
01048 return this->adjust (size, size, buf);
01049 }
|
|
|
Utility function to allow the user more flexibility. Skips up to the nearest alignment-byte boundary. Argument MUST be a power of 2.
Definition at line 1464 of file CDR_Stream.inl. References ACE_ptr_align_binary(), ACE_Message_Block::rd_ptr(), rd_ptr(), and wr_ptr().
01465 {
01466 #if !defined (ACE_LACKS_CDR_ALIGNMENT)
01467 char *buf = ACE_ptr_align_binary (this->rd_ptr (),
01468 alignment);
01469 #else
01470 char *buf = this->rd_ptr ();
01471 #endif /* ACE_LACKS_CDR_ALIGNMENT */
01472
01473 if (buf <= this->wr_ptr ())
01474 {
01475 this->start_.rd_ptr (buf);
01476 return 0;
01477 }
01478
01479 this->good_bit_ = false;
01480 return -1;
01481 }
|
|
|
If Definition at line 1458 of file CDR_Stream.inl. References ACE_CDR_BYTE_ORDER, and do_byte_swap().
01459 {
01460 return this->do_byte_swap () ? !ACE_CDR_BYTE_ORDER : ACE_CDR_BYTE_ORDER;
01461 }
|
|
|
Set the codeset translators.
Definition at line 1511 of file CDR_Stream.inl.
01512 {
01513 this->char_translator_ = ctran;
01514 }
|
|
|
Access the codeset translators. They can be nil!
Definition at line 1498 of file CDR_Stream.inl.
01499 {
01500 return this->char_translator_;
01501 }
|
|
|
Definition at line 1667 of file CDR_Stream.cpp. References char_translator_, ACE_Data_Block::clone_nocopy(), ACE_Message_Block::clr_self_flags(), ACE_Message_Block::data_block(), do_byte_swap_, major_version_, ACE_CDR::mb_align(), ACE_OS::memcpy(), minor_version_, ACE_Message_Block::rd_ptr(), rd_ptr(), ACE_Message_Block::replace_data_block(), ACE_Message_Block::reset(), ACE_Data_Block::size(), ACE_Message_Block::size(), start_, wchar_translator_, ACE_Message_Block::wr_ptr(), and wr_ptr().
01668 {
01669 this->do_byte_swap_ = cdr.do_byte_swap_;
01670
01671 // Get the read & write pointer positions in the incoming CDR
01672 // streams
01673 char *rd_ptr = cdr.start_.rd_ptr ();
01674 char *wr_ptr = cdr.start_.wr_ptr ();
01675
01676 // Now reset the incoming CDR stream
01677 cdr.start_.reset ();
01678
01679 // As we have reset the stream, try to align the underlying message
01680 // block in the incoming stream
01681 ACE_CDR::mb_align (&cdr.start_);
01682
01683 // Get the read & write pointer positions again
01684 char *nrd_ptr = cdr.start_.rd_ptr ();
01685 char *nwr_ptr = cdr.start_.wr_ptr ();
01686
01687 // Actual length of the stream is..
01688 // @todo: This will look idiotic, but we dont seem to have much of a
01689 // choice. How do we calculate the length of the incoming stream?
01690 // Calling the method before calling reset () would give us the
01691 // wrong length of the stream that needs copying. So we do the
01692 // calulation like this
01693 // (1) We get the <rd_ptr> and <wr_ptr> positions of the incoming
01694 // stream.
01695 // (2) Then we reset the <incoming> stream and then align it.
01696 // (3) We get the <rd_ptr> and <wr_ptr> positions again. (Points #1
01697 // thru #3 has been done already)
01698 // (4) The difference in the <rd_ptr> and <wr_ptr> positions gives
01699 // us the following, the actual bytes traversed by the <rd_ptr> and
01700 // <wr_ptr>.
01701 // (5) The bytes traversed by the <wr_ptr> is the actual length of
01702 // the stream.
01703
01704 // Actual bytes traversed
01705 size_t rd_bytes = rd_ptr - nrd_ptr;
01706 size_t wr_bytes = wr_ptr - nwr_ptr;
01707
01708 ACE_CDR::mb_align (&this->start_);
01709
01710 ACE_Data_Block *db =
01711 this->start_.data_block ();
01712
01713 // If the size of the data that needs to be copied are higher than
01714 // what is available, then do a reallocation.
01715 if (wr_bytes > (this->start_.size () - ACE_CDR::MAX_ALIGNMENT))
01716 {
01717 // @@NOTE: We need to probably add another method to the message
01718 // block interface to simplify this
01719 db =
01720 cdr.start_.data_block ()->clone_nocopy ();
01721
01722 if (db == 0 || db->size ((wr_bytes) +
01723 ACE_CDR::MAX_ALIGNMENT) == -1)
01724 return 0;
01725
01726 // Replace our data block by using the incoming CDR stream.
01727 db = this->start_.replace_data_block (db);
01728
01729 // Align the start_ message block.
01730 ACE_CDR::mb_align (&this->start_);
01731
01732 // Clear the DONT_DELETE flag if it has been set
01733 this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE);
01734 }
01735
01736 // Now do the copy
01737 (void) ACE_OS::memcpy (this->start_.wr_ptr (),
01738 cdr.start_.rd_ptr (),
01739 wr_bytes);
01740
01741 // Set the read pointer position to the same point as that was in
01742 // <incoming> cdr.
01743 this->start_.rd_ptr (rd_bytes);
01744 this->start_.wr_ptr (wr_bytes);
01745
01746 // We have changed the read & write pointers for the incoming
01747 // stream. Set them back to the positions that they were before..
01748 cdr.start_.rd_ptr (rd_bytes);
01749 cdr.start_.wr_ptr (wr_bytes);
01750
01751 this->major_version_ = cdr.major_version_;
01752 this->minor_version_ = cdr.minor_version_;
01753
01754 // Copy the char/wchar translators
01755 this->char_translator_ = cdr.char_translator_;
01756 this->wchar_translator_ = cdr.wchar_translator_;
01757
01758 return db;
01759 }
|
|
|
If Definition at line 1452 of file CDR_Stream.inl. Referenced by byte_order().
01453 {
01454 return this->do_byte_swap_;
01455 }
|
|
|
Points to the continuation field of the current message block.
Definition at line 996 of file CDR_Stream.inl. References ACE_Message_Block::end().
|
|
|
Definition at line 1604 of file CDR_Stream.cpp. References ACE_Message_Block::base(), ACE_Message_Block::clr_self_flags(), ACE_Message_Block::data_block(), do_byte_swap_, major_version_, ACE_Message_Block::Message_Flags, minor_version_, ACE_CDR::Octet, ACE_Message_Block::rd_ptr(), ACE_Message_Block::replace_data_block(), ACE_Message_Block::reset(), ACE_Message_Block::self_flags(), ACE_Message_Block::set_self_flags(), ACE_Message_Block::size(), start_, and ACE_Message_Block::wr_ptr().
01605 {
01606 // Exchange byte orders
01607 int byte_order = cdr.do_byte_swap_;
01608 cdr.do_byte_swap_ = this->do_byte_swap_;
01609 this->do_byte_swap_ = byte_order;
01610
01611 // Get the destination read and write pointers
01612 size_t drd_pos =
01613 cdr.start_.rd_ptr () - cdr.start_.base ();
01614 size_t dwr_pos =
01615 cdr.start_.wr_ptr () - cdr.start_.base ();
01616
01617 // Get the source read & write pointers
01618 size_t srd_pos =
01619 this->start_.rd_ptr () - this->start_.base ();
01620 size_t swr_pos =
01621 this->start_.wr_ptr () - this->start_.base ();
01622
01623 // Exchange data_blocks. Dont release any of the data blocks.
01624 ACE_Data_Block *dnb =
01625 this->start_.replace_data_block (cdr.start_.data_block ());
01626 cdr.start_.replace_data_block (dnb);
01627
01628 // Exchange the flags information..
01629 ACE_Message_Block::Message_Flags df = cdr.start_.self_flags ();
01630 ACE_Message_Block::Message_Flags sf = this->start_.self_flags ();
01631
01632 cdr.start_.clr_self_flags (df);
01633 this->start_.clr_self_flags (sf);
01634
01635 cdr.start_.set_self_flags (sf);
01636 this->start_.set_self_flags (df);
01637
01638 // Reset the <cdr> pointers to zero before it is set again.
01639 cdr.start_.reset ();
01640 this->start_.reset ();
01641
01642 // Set the read and write pointers.
01643 if (cdr.start_.size () >= srd_pos)
01644 cdr.start_.rd_ptr (srd_pos);
01645
01646 if (cdr.start_.size () >= swr_pos)
01647 cdr.start_.wr_ptr (swr_pos);
01648
01649 if (this->start_.size () >= drd_pos)
01650 this->start_.rd_ptr (drd_pos);
01651
01652 if (this->start_.size () >= dwr_pos)
01653 this->start_.wr_ptr (dwr_pos);
01654
01655 ACE_CDR::Octet dmajor = cdr.major_version_;
01656 ACE_CDR::Octet dminor = cdr.minor_version_;
01657
01658 // Exchange the GIOP version info
01659 cdr.major_version_ = this->major_version_;
01660 cdr.minor_version_ = this->minor_version_;
01661
01662 this->major_version_ = dmajor;
01663 this->minor_version_ = dminor;
01664 }
|
|
||||||||||||
|
Set the underlying GIOP version..
Definition at line 1491 of file CDR_Stream.inl. References ACE_CDR::Octet.
01492 {
01493 major = this->major_version_;
01494 minor = this->minor_version_;
01495 }
|
|
|
returns
Definition at line 1058 of file CDR_Stream.inl. Referenced by operator>>().
01059 {
01060 return this->good_bit_;
01061 }
|
|
|
Grow the internal buffer, reset Definition at line 1569 of file CDR_Stream.cpp. References ACE_CDR::grow(), ACE_CDR::mb_align(), and ACE_Message_Block::wr_ptr().
01570 {
01571 if (ACE_CDR::grow (&this->start_, newsize) == -1)
01572 return -1;
01573
01574 ACE_CDR::mb_align (&this->start_);
01575 this->start_.wr_ptr (newsize);
01576 return 0;
01577 }
|
|
|
Return how many bytes are left in the stream.
Definition at line 689 of file CDR_Stream.inl. References ACE_Message_Block::length(). Referenced by read_boolean_array(), read_char_array(), read_double_array(), read_float_array(), read_long_array(), read_longdouble_array(), read_longlong_array(), read_octet_array(), read_short_array(), read_string(), read_ulong_array(), read_ulonglong_array(), read_ushort_array(), read_wchar_array(), and read_wstring().
|
|
|
Definition at line 966 of file CDR_Stream.cpp. References char_translator_, ACE_Message_Block::data_block(), do_byte_swap_, ACE_Data_Block::duplicate(), major_version_, minor_version_, ACE_Message_Block::rd_ptr(), start_, and ACE_Message_Block::wr_ptr().
00967 {
00968 if (this != &rhs)
00969 {
00970 this->start_.data_block (rhs.start_.data_block ()->duplicate ());
00971 this->start_.rd_ptr (rhs.start_.rd_ptr ());
00972 this->start_.wr_ptr (rhs.start_.wr_ptr ());
00973 this->do_byte_swap_ = rhs.do_byte_swap_;
00974 this->good_bit_ = true;
00975 this->char_translator_ = rhs.char_translator_;
00976 this->major_version_ = rhs.major_version_;
00977 this->minor_version_ = rhs.minor_version_;
00978 }
00979 return *this;
00980 }
|
|
|
Move the rd_ptr ahead by bytes.
Definition at line 1002 of file CDR_Stream.inl. References ACE_Message_Block::rd_ptr().
|
|
|
Returns the current position for the
Definition at line 1008 of file CDR_Stream.inl. References ACE_Message_Block::rd_ptr(). Referenced by adjust(), align_read_ptr(), clone_from(), read_1(), skip_bytes(), and skip_string().
|
|
|
Definition at line 1393 of file CDR_Stream.cpp. References ACE_CDR::Octet, ACE_Message_Block::rd_ptr(), rd_ptr(), and wr_ptr(). Referenced by ACE_WChar_Codeset_Translator::read_1(), ACE_Char_Codeset_Translator::read_1(), read_char(), read_octet(), read_wchar(), skip_octet(), and skip_wchar().
|
|
|
Definition at line 1498 of file CDR_Stream.cpp. References adjust(), and ACE_CDR::swap_16(). Referenced by read_longdouble(), and skip_longdouble().
01499 {
01500 char *buf = 0;
01501 if (this->adjust (ACE_CDR::LONGDOUBLE_SIZE,
01502 ACE_CDR::LONGDOUBLE_ALIGN,
01503 buf) == 0)
01504 {
01505 #if !defined (ACE_DISABLE_SWAP_ON_READ)
01506 if (!this->do_byte_swap_)
01507 *x = *reinterpret_cast<ACE_CDR::LongDouble *> (buf);
01508 else
01509 ACE_CDR::swap_16 (buf, reinterpret_cast<char*> (x));
01510 #else
01511 *x = *reinterpret_cast<ACE_CDR::LongDouble*> (buf);
01512 #endif /* ACE_DISABLE_SWAP_ON_READ */
01513 return true;
01514 }
01515
01516 this->good_bit_ = false;
01517 return false;
01518 }
|
|
|
Definition at line 1407 of file CDR_Stream.cpp. References adjust(), ACE_CDR::swap_2(), and ACE_CDR::UShort. Referenced by ACE_WChar_Codeset_Translator::read_2(), read_short(), read_ushort(), read_wchar(), skip_ushort(), and skip_wchar().
01408 {
01409 char *buf = 0;
01410 if (this->adjust (ACE_CDR::SHORT_SIZE, buf) == 0)
01411 {
01412 #if !defined (ACE_DISABLE_SWAP_ON_READ)
01413 if (!this->do_byte_swap_)
01414 *x = *reinterpret_cast<ACE_CDR::UShort*> (buf);
01415 else
01416 ACE_CDR::swap_2 (buf, reinterpret_cast<char*> (x));
01417 #else
01418 *x = *reinterpret_cast<ACE_CDR::UShort*> (buf);
01419 #endif /* ACE_DISABLE_SWAP_ON_READ */
01420 return true;
01421 }
01422 this->good_bit_ = false;
01423 return false;
01424 }
|
|
|
Definition at line 1427 of file CDR_Stream.cpp. References adjust(), ACE_CDR::swap_4(), and ACE_CDR::ULong. Referenced by ACE_WChar_Codeset_Translator::read_4(), read_float(), read_long(), read_ulong(), read_wchar(), skip_ulong(), and skip_wchar().
01428 {
01429 char *buf = 0;
01430 if (this->adjust (ACE_CDR::LONG_SIZE, buf) == 0)
01431 {
01432 #if !defined (ACE_DISABLE_SWAP_ON_READ)
01433 if (!this->do_byte_swap_)
01434 *x = *reinterpret_cast<ACE_CDR::ULong*> (buf);
01435 else
01436 ACE_CDR::swap_4 (buf, reinterpret_cast<char*> (x));
01437 #else
01438 *x = *reinterpret_cast<ACE_CDR::ULong*> (buf);
01439 #endif /* ACE_DISABLE_SWAP_ON_READ */
01440 return true;
01441 }
01442 this->good_bit_ = false;
01443 return false;
01444 }
|
|
|
Definition at line 1447 of file CDR_Stream.cpp. References adjust(), ACE_CDR::swap_8(), and ACE_CDR::ULongLong. Referenced by read_double(), read_longlong(), read_ulonglong(), and skip_ulonglong().
01448 {
01449 char *buf = 0;
01450
01451 if (this->adjust (ACE_CDR::LONGLONG_SIZE, buf) == 0)
01452 {
01453 #if !defined (ACE_DISABLE_SWAP_ON_READ)
01454 # if defined (__arm__)
01455 if (!this->do_byte_swap_)
01456 {
01457 // Convert from Intel format (12345678 => 56781234)
01458 const char *orig = buf;
01459 char *target = reinterpret_cast<char *> (x);
01460 register ACE_UINT32 x =
01461 *reinterpret_cast<const ACE_UINT32 *> (orig);
01462 register ACE_UINT32 y =
01463 *reinterpret_cast<const ACE_UINT32 *> (orig + 4);
01464 *reinterpret_cast<ACE_UINT32 *> (target) = y;
01465 *reinterpret_cast<ACE_UINT32 *> (target + 4) = x;
01466 }
01467 else
01468 {
01469 // Convert from Sparc format (12345678 => 43218765)
01470 const char *orig = buf;
01471 char *target = reinterpret_cast<char *> (x);
01472 register ACE_UINT32 x =
01473 *reinterpret_cast<const ACE_UINT32 *> (orig);
01474 register ACE_UINT32 y =
01475 *reinterpret_cast<const ACE_UINT32 *> (orig + 4);
01476 x = (x << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | (x >> 24);
01477 y = (y << 24) | ((y & 0xff00) << 8) | ((y & 0xff0000) >> 8) | (y >> 24);
01478 *reinterpret_cast<ACE_UINT32 *> (target) = x;
01479 *reinterpret_cast<ACE_UINT32 *> (target + 4) = y;
01480 }
01481 # else
01482 if (!this->do_byte_swap_)
01483 *x = *reinterpret_cast<ACE_CDR::ULongLong *> (buf);
01484 else
01485 ACE_CDR::swap_8 (buf, reinterpret_cast<char *> (x));
01486 # endif /* !__arm__ */
01487 #else
01488 *x = *reinterpret_cast<ACE_CDR::ULongLong *> (buf);
01489 #endif /* ACE_DISABLE_SWAP_ON_READ */
01490 return true;
01491 }
01492
01493 this->good_bit_ = false;
01494 return false;
01495 }
|
|
||||||||||||||||||||
|
Read an array of length elements, each of size bytes and the start aligned at a multiple of . 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 ; as explained above it is expected that using assignment is faster that for one element, but for several elements 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. Definition at line 1283 of file CDR_Stream.cpp. References adjust(), ACE_OS::memcpy(), ACE_CDR::swap_16_array(), ACE_CDR::swap_2_array(), ACE_CDR::swap_4_array(), ACE_CDR::swap_8_array(), and ACE_CDR::ULong. Referenced by ACE_WChar_Codeset_Translator::read_array(), ACE_Char_Codeset_Translator::read_array(), read_char_array(), read_double_array(), read_float_array(), read_long_array(), read_longdouble_array(), read_longlong_array(), read_octet_array(), read_short_array(), read_ulong_array(), read_ulonglong_array(), read_ushort_array(), read_wchar(), and read_wchar_array().
01287 {
01288 if (length == 0)
01289 return true;
01290 char* buf = 0;
01291
01292 if (this->adjust (size * length, align, buf) == 0)
01293 {
01294 #if defined (ACE_DISABLE_SWAP_ON_READ)
01295 ACE_OS::memcpy (x, buf, size*length);
01296 #else
01297 if (!this->do_byte_swap_ || size == 1)
01298 ACE_OS::memcpy (x, buf, size*length);
01299 else
01300 {
01301 char *target = reinterpret_cast<char*> (x);
01302 switch (size)
01303 {
01304 case 2:
01305 ACE_CDR::swap_2_array (buf, target, length);
01306 break;
01307 case 4:
01308 ACE_CDR::swap_4_array (buf, target, length);
01309 break;
01310 case 8:
01311 ACE_CDR::swap_8_array (buf, target, length);
01312 break;
01313 case 16:
01314 ACE_CDR::swap_16_array (buf, target, length);
01315 break;
01316 default:
01317 // TODO: print something?
01318 this->good_bit_ = false;
01319 return false;
01320 }
01321 }
01322 #endif /* ACE_DISABLE_SWAP_ON_READ */
01323 return this->good_bit_;
01324 }
01325 return false;
01326 }
|
|
|
Return Definition at line 606 of file CDR_Stream.inl. References ACE_CDR::Boolean, ACE_CDR::Octet, and read_octet(). Referenced by ACE_OutputCDR::append_boolean(), operator>>(), and read_boolean_array().
00607 {
00608 ACE_CDR::Octet tmp = 0;
00609 (void) this->read_octet (tmp);
00610 x = tmp ? true : false;
00611 return (ACE_CDR::Boolean) this->good_bit_;
00612 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 1370 of file CDR_Stream.cpp. References ACE_CDR::Boolean, length(), read_boolean(), and ACE_CDR::ULong.
01372 {
01373 // Make sure the length of the array isn't greater than the length of
01374 // the stream.
01375 if (length > this->length ())
01376 {
01377 this->good_bit_ = false;
01378 return false;
01379 }
01380
01381 // It is hard to optimize this, the spec requires that on the wire
01382 // booleans be represented as a byte with value 0 or 1, but in
01383 // memory it is possible (though very unlikely) that a boolean has
01384 // a non-zero value (different from 1).
01385 // We resort to a simple loop.
01386 for (ACE_CDR::ULong i = 0; i != length && this->good_bit_; ++i)
01387 (void) this->read_boolean (x[i]);
01388
01389 return this->good_bit_;
01390 }
|
|
|
Return Definition at line 615 of file CDR_Stream.inl. References ACE_CDR::Char, read_1(), and ACE_Char_Codeset_Translator::read_char(). Referenced by ACE_OutputCDR::append_char(), and operator>>().
00616 {
00617 if (this->char_translator_ == 0)
00618 {
00619 void *temp = &x;
00620 return this->read_1 (reinterpret_cast<ACE_CDR::Octet*> (temp));
00621 }
00622 return this->char_translator_->read_char (*this, x);
00623 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 695 of file CDR_Stream.inl. References ACE_CDR::Char, length(), read_array(), ACE_Char_Codeset_Translator::read_char_array(), and ACE_CDR::ULong. Referenced by operator>>(), and read_string().
00697 {
00698 // Make sure the length of the array isn't greater than the length of
00699 // the stream.
00700 if (length > this->length ())
00701 {
00702 this->good_bit_ = false;
00703 return false;
00704 }
00705
00706 if (this->char_translator_ == 0)
00707 return this->read_array (x,
00708 ACE_CDR::OCTET_SIZE,
00709 ACE_CDR::OCTET_ALIGN,
00710 length);
00711 return this->char_translator_->read_char_array (*this, x, length);
00712 }
|
|
|
Return Definition at line 676 of file CDR_Stream.inl. References read_8(). Referenced by ACE_OutputCDR::append_double(), and operator>>().
00677 {
00678 void *temp = &x;
00679 return this->read_8 (reinterpret_cast<ACE_CDR::ULongLong*> (temp));
00680 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 884 of file CDR_Stream.inl. References length(), read_array(), and ACE_CDR::ULong.
00886 {
00887 // Make sure the length of the array isn't greater than the length of
00888 // the stream.
00889 if (length * ACE_CDR::LONGLONG_SIZE > this->length ())
00890 {
00891 this->good_bit_ = false;
00892 return false;
00893 }
00894
00895 return this->read_array (x,
00896 ACE_CDR::LONGLONG_SIZE,
00897 ACE_CDR::LONGLONG_ALIGN,
00898 length);
00899 }
|
|
|
Return Definition at line 669 of file CDR_Stream.inl. References read_4(). Referenced by ACE_OutputCDR::append_float(), and operator>>().
00670 {
00671 void *temp = &x;
00672 return this->read_4 (reinterpret_cast<ACE_CDR::ULong*> (temp));
00673 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 865 of file CDR_Stream.inl. References length(), read_array(), and ACE_CDR::ULong.
00867 {
00868 // Make sure the length of the array isn't greater than the length of
00869 // the stream.
00870 if (length * ACE_CDR::LONG_SIZE > this->length ())
00871 {
00872 this->good_bit_ = false;
00873 return false;
00874 }
00875
00876 return this->read_array (x,
00877 ACE_CDR::LONG_SIZE,
00878 ACE_CDR::LONG_ALIGN,
00879 length);
00880 }
|
|
|
Return Definition at line 641 of file CDR_Stream.inl. References ACE_CDR::Long, and read_4(). Referenced by ACE_OutputCDR::append_long(), and operator>>().
00642 {
00643 void *temp = &x;
00644 return this->read_4 (reinterpret_cast<ACE_CDR::ULong*> (temp));
00645 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 793 of file CDR_Stream.inl. References length(), ACE_CDR::Long, read_array(), and ACE_CDR::ULong.
00795 {
00796 // Make sure the length of the array isn't greater than the length of
00797 // the stream.
00798 if (length * ACE_CDR::LONG_SIZE > this->length ())
00799 {
00800 this->good_bit_ = false;
00801 return false;
00802 }
00803
00804 return this->read_array (x,
00805 ACE_CDR::LONG_SIZE,
00806 ACE_CDR::LONG_ALIGN,
00807 length);
00808 }
|
|
|
Return Definition at line 683 of file CDR_Stream.inl. References read_16(). Referenced by ACE_OutputCDR::append_longdouble(), and operator>>().
00684 {
00685 return this->read_16 (&x);
00686 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 902 of file CDR_Stream.inl. References length(), read_array(), and ACE_CDR::ULong.
00904 {
00905 // Make sure the length of the array isn't greater than the length of
00906 // the stream.
00907 if (length * ACE_CDR::LONGDOUBLE_SIZE > this->length ())
00908 {
00909 this->good_bit_ = false;
00910 return false;
00911 }
00912 return this->read_array (x,
00913 ACE_CDR::LONGDOUBLE_SIZE,
00914 ACE_CDR::LONGDOUBLE_ALIGN,
00915 length);
00916 }
|
|
|
Return Definition at line 656 of file CDR_Stream.inl. References ACE_CDR::LongLong, and read_8(). Referenced by ACE_OutputCDR::append_longlong(), and operator>>().
00657 {
00658 void *temp = &x;
00659 return this->read_8 (reinterpret_cast<ACE_CDR::ULongLong*> (temp));
00660 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 829 of file CDR_Stream.inl. References length(), ACE_CDR::LongLong, read_array(), and ACE_CDR::ULong.
00831 {
00832 // Make sure the length of the array isn't greater than the length of
00833 // the stream.
00834 if (length * ACE_CDR::LONGLONG_SIZE > this->length ())
00835 {
00836 this->good_bit_ = false;
00837 return false;
00838 }
00839
00840 return this->read_array (x,
00841 ACE_CDR::LONGLONG_SIZE,
00842 ACE_CDR::LONGLONG_ALIGN,
00843 length);
00844 }
|
|
|
Return Definition at line 600 of file CDR_Stream.inl. References ACE_CDR::Octet, and read_1(). Referenced by ACE_InputCDR(), ACE_OutputCDR::append_octet(), operator>>(), and read_boolean().
00601 {
00602 return this->read_1 (&x);
00603 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 739 of file CDR_Stream.inl. References length(), ACE_CDR::Octet, read_array(), and ACE_CDR::ULong.
00741 {
00742 // Make sure the length of the array isn't greater than the length of
00743 // the stream.
00744 if (length * ACE_CDR::OCTET_SIZE > this->length ())
00745 {
00746 this->good_bit_ = false;
00747 return false;
00748 }
00749
00750 return this->read_array (x,
00751 ACE_CDR::OCTET_SIZE,
00752 ACE_CDR::OCTET_ALIGN,
00753 length);
00754 }
|
|
|
Return Definition at line 627 of file CDR_Stream.inl. References read_2(), and ACE_CDR::Short. Referenced by ACE_OutputCDR::append_short(), and operator>>().
00628 {
00629 void *temp = &x;
00630 return this->read_2 (reinterpret_cast<ACE_CDR::UShort*> (temp));
00631 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 757 of file CDR_Stream.inl. References length(), read_array(), ACE_CDR::Short, and ACE_CDR::ULong.
00759 {
00760 // Make sure the length of the array isn't greater than the length of
00761 // the stream.
00762 if (length * ACE_CDR::SHORT_SIZE > this->length ())
00763 {
00764 this->good_bit_ = false;
00765 return false;
00766 }
00767
00768 return this->read_array (x,
00769 ACE_CDR::SHORT_SIZE,
00770 ACE_CDR::SHORT_ALIGN,
00771 length);
00772 }
|
|
|
Return Definition at line 1183 of file CDR_Stream.cpp. References ACE_CString, ACE_CDR::Char, and read_string().
01184 {
01185 ACE_CDR::Char * data = 0;
01186 if (this->read_string (data))
01187 {
01188 ACE_Auto_Basic_Array_Ptr<ACE_CDR::Char> safe_data (data);
01189 x = data;
01190 return true;
01191 }
01192
01193 x = "";
01194 return (this->good_bit_ = false);
01195 }
|
|
|
Return Definition at line 1134 of file CDR_Stream.cpp. References ACE_NEW_RETURN, ACE_CDR::Char, length(), read_char_array(), ACE_Char_Codeset_Translator::read_string(), read_ulong(), ACE_Auto_Basic_Array_Ptr< X >::release(), ACE_OS::strcpy(), and ACE_CDR::ULong. Referenced by ACE_OutputCDR::append_string(), operator>>(), and read_string().
01135 {
01136 // @@ This is a slight violation of "Optimize for the common case",
01137 // i.e. normally the translator will be 0, but OTOH the code is
01138 // smaller and should be better for the cache ;-) ;-)
01139 if (this->char_translator_ != 0)
01140 {
01141 this->good_bit_ = this->char_translator_->read_string (*this, x);
01142 return this->good_bit_;
01143 }
01144
01145 ACE_CDR::ULong len = 0;
01146
01147 if (!this->read_ulong (len))
01148 return false;
01149
01150 // A check for the length being too great is done later in the
01151 // call to read_char_array but we want to have it done before
01152 // the memory is allocated.
01153 if (len > 0 && len <= this->length())
01154 {
01155 ACE_NEW_RETURN (x,
01156 ACE_CDR::Char[len],
01157 0);
01158
01159 ACE_Auto_Basic_Array_Ptr<ACE_CDR::Char> safe_data (x);
01160
01161 if (this->read_char_array (x, len))
01162 {
01163 (void) safe_data.release ();
01164 return true;
01165 }
01166 }
01167 else if (len == 0)
01168 {
01169 // Convert any null strings to empty strings since empty
01170 // strings can cause crashes. (See bug 58.)
01171 ACE_NEW_RETURN (x,
01172 ACE_CDR::Char[1],
01173 0);
01174 ACE_OS::strcpy (const_cast<char *&> (x), "");
01175 return true;
01176 }
01177
01178 x = 0;
01179 return (this->good_bit_ = false);
01180 }
|
|
|
Return Definition at line 649 of file CDR_Stream.inl. References read_4(), and ACE_CDR::ULong. Referenced by ACE_OutputCDR::append_ulong(), operator>>(), read_string(), read_wstring(), skip_string(), and skip_wstring().
00650 {
00651 return this->read_4 (&x);
00652 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 811 of file CDR_Stream.inl. References length(), read_array(), and ACE_CDR::ULong.
00813 {
00814 // Make sure the length of the array isn't greater than the length of
00815 // the stream.
00816 if (length * ACE_CDR::LONG_SIZE > this->length ())
00817 {
00818 this->good_bit_ = false;
00819 return false;
00820 }
00821
00822 return this->read_array (x,
00823 ACE_CDR::LONG_SIZE,
00824 ACE_CDR::LONG_ALIGN,
00825 length);
00826 }
|
|
|
Return Definition at line 663 of file CDR_Stream.inl. References read_8(), and ACE_CDR::ULongLong. Referenced by ACE_OutputCDR::append_ulonglong(), and operator>>().
00664 {
00665 return this->read_8 (&x);
00666 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 847 of file CDR_Stream.inl. References length(), read_array(), ACE_CDR::ULong, and ACE_CDR::ULongLong.
00849 {
00850 // Make sure the length of the array isn't greater than the length of
00851 // the stream.
00852 if (length * ACE_CDR::LONGLONG_SIZE > this->length ())
00853 {
00854 this->good_bit_ = false;
00855 return false;
00856 }
00857
00858 return this->read_array (x,
00859 ACE_CDR::LONGLONG_SIZE,
00860 ACE_CDR::LONGLONG_ALIGN,
00861 length);
00862 }
|
|
|
Return Definition at line 634 of file CDR_Stream.inl. References read_2(), and ACE_CDR::UShort. Referenced by ACE_OutputCDR::append_ushort(), and operator>>().
00635 {
00636 return this->read_2 (&x);
00637 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 775 of file CDR_Stream.inl. References length(), read_array(), ACE_CDR::ULong, and ACE_CDR::UShort.
00777 {
00778 // Make sure the length of the array isn't greater than the length of
00779 // the stream.
00780 if (length * ACE_CDR::SHORT_SIZE > this->length ())
00781 {
00782 this->good_bit_ = false;
00783 return false;
00784 }
00785
00786 return this->read_array (x,
00787 ACE_CDR::SHORT_SIZE,
00788 ACE_CDR::SHORT_ALIGN,
00789 length);
00790 }
|
|
|
Return Definition at line 1035 of file CDR_Stream.cpp. References ACE_CDR::Octet, read_1(), read_2(), read_4(), read_array(), ACE_WChar_Codeset_Translator::read_wchar(), ACE_CDR::Short, ACE_CDR::UShort, and ACE_CDR::WChar. Referenced by ACE_OutputCDR::append_wchar(), and operator>>().
01036 {
01037 if (this->wchar_translator_ != 0)
01038 {
01039 this->good_bit_ = this->wchar_translator_->read_wchar (*this,x);
01040 return this->good_bit_;
01041 }
01042 if (ACE_OutputCDR::wchar_maxbytes_ == 0)
01043 {
01044 errno = EACCES;
01045 return (this->good_bit_ = false);
01046 }
01047
01048 if (ACE_OutputCDR::wchar_maxbytes_ == sizeof (ACE_CDR::WChar))
01049 {
01050 if (static_cast<ACE_CDR::Short> (major_version_) == 1
01051 && static_cast<ACE_CDR::Short> (minor_version_) == 2)
01052 {
01053 ACE_CDR::Octet len;
01054
01055 if (this->read_1 (&len))
01056 return this->read_array
01057 (reinterpret_cast<ACE_CDR::Octet*> (&x),
01058 static_cast<ACE_CDR::ULong> (len),
01059 ACE_CDR::OCTET_ALIGN,
01060 1);
01061
01062 else
01063 return (this->good_bit_ = false);
01064 }
01065
01066 void * const temp = &x;
01067 if (sizeof (ACE_CDR::WChar) == 2)
01068 return this->read_2 (reinterpret_cast<ACE_CDR::UShort *> (temp));
01069 else
01070 return this->read_4 (reinterpret_cast<ACE_CDR::ULong *> (temp));
01071 }
01072
01073 if (static_cast<ACE_CDR::Short> (major_version_) == 1
01074 && static_cast<ACE_CDR::Short> (minor_version_) == 2)
01075 {
01076 ACE_CDR::Octet len;
01077
01078 if (this->read_1 (&len))
01079 {
01080 if (len == 2)
01081 {
01082 ACE_CDR::Short sx;
01083 if (this->read_array
01084 (reinterpret_cast<ACE_CDR::Octet*> (&sx),
01085 static_cast<ACE_CDR::ULong> (len),
01086 ACE_CDR::OCTET_ALIGN,
01087 1))
01088 {
01089 x = static_cast<ACE_CDR::WChar> (sx);
01090 return true;
01091 }
01092 }
01093 else
01094 {
01095 ACE_CDR::Octet ox;
01096 if (this->read_array
01097 (reinterpret_cast<ACE_CDR::Octet*> (&ox),
01098 static_cast<ACE_CDR::ULong> (len),
01099 ACE_CDR::OCTET_ALIGN,
01100 1))
01101 {
01102 x = static_cast<ACE_CDR::WChar> (ox);
01103 return true;
01104 }
01105 }
01106 }
01107 }
01108 else
01109 {
01110 if (ACE_OutputCDR::wchar_maxbytes_ == 2)
01111 {
01112 ACE_CDR::UShort sx;
01113 if (this->read_2 (reinterpret_cast<ACE_CDR::UShort *> (&sx)))
01114 {
01115 x = static_cast<ACE_CDR::WChar> (sx);
01116 return true;
01117 }
01118 }
01119 else
01120 {
01121 ACE_CDR::Octet ox;
01122 if (this->read_1 (&ox))
01123 {
01124 x = static_cast<ACE_CDR::WChar> (ox);
01125 return true;
01126 }
01127
01128 }
01129 }
01130 return (this->good_bit_ = false);
01131 }
|
|
||||||||||||
|
The buffer x must be large enough to contain length elements. Return Definition at line 715 of file CDR_Stream.inl. References length(), read_array(), ACE_WChar_Codeset_Translator::read_wchar_array(), read_wchar_array_i(), ACE_CDR::ULong, and ACE_CDR::WChar. Referenced by operator>>(), and read_wstring().
00717 {
00718 // Make sure the length of the array isn't greater than the length of
00719 // the stream.
00720 if (length * ACE_OutputCDR::wchar_maxbytes_ > this->length ())
00721 {
00722 this->good_bit_ = false;
00723 return false;
00724 }
00725
00726 if (this->wchar_translator_ != 0)
00727 return this->wchar_translator_->read_wchar_array (*this, x, length);
00728 if (ACE_OutputCDR::wchar_maxbytes_ != sizeof (ACE_CDR::WChar))
00729 return this->read_wchar_array_i (x, length);
00730 return this->read_array (x,
00731 sizeof (ACE_CDR::WChar),
00732 sizeof (ACE_CDR::WChar) == 2
00733 ? ACE_CDR::SHORT_ALIGN
00734 : ACE_CDR::LONG_ALIGN,
00735 length);
00736 }
|
|
||||||||||||
|
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. Definition at line 1329 of file CDR_Stream.cpp. References adjust(), ACE_CDR::swap_2(), ACE_CDR::ULong, ACE_CDR::UShort, and ACE_CDR::WChar. Referenced by read_wchar_array().
01331 {
01332 if (length == 0)
01333 return true;
01334 char* buf = 0;
01335 size_t const align = (ACE_OutputCDR::wchar_maxbytes_ == 2) ?
01336 ACE_CDR::SHORT_ALIGN :
01337 ACE_CDR::OCTET_ALIGN;
01338
01339 if (this->adjust (ACE_OutputCDR::wchar_maxbytes_ * length, align, buf) == 0)
01340 {
01341 if (ACE_OutputCDR::wchar_maxbytes_ == 2)
01342 {
01343 ACE_CDR::UShort *sb = reinterpret_cast<ACE_CDR::UShort *> (buf);
01344 for (size_t i = 0; i < length; ++i)
01345 #if defined (ACE_DISABLE_SWAP_ON_READ)
01346 x[i] = static_cast<ACE_CDR::WChar> (sb[i]);
01347 #else
01348 if (!this->do_byte_swap_)
01349 x[i] = static_cast<ACE_CDR::WChar> (sb[i]);
01350 else
01351 {
01352 ACE_CDR::UShort sx;
01353 ACE_CDR::swap_2 (&buf[i * 2], reinterpret_cast<char *> (&sx));
01354 x[i] = static_cast<ACE_CDR::WChar> (sx);
01355 }
01356 #endif /* ACE_DISABLE_SWAP_ON_READ */
01357 }
01358 else
01359 {
01360 for (size_t i = 0; i < length; ++i)
01361 x[i] = static_cast<ACE_CDR::Octet> (buf[i]);
01362 }
01363 return this->good_bit_;
01364 }
01365 return false;
01366 }
|
|
|
Return Definition at line 1198 of file CDR_Stream.cpp. References ACE_auto_ptr_reset(), ACE_NEW_RETURN, length(), read_ulong(), read_wchar_array(), ACE_WChar_Codeset_Translator::read_wstring(), ACE_Auto_Basic_Array_Ptr< X >::release(), ACE_CDR::ULong, and ACE_CDR::WChar. Referenced by ACE_OutputCDR::append_wstring(), and operator>>().
01199 {
01200 // @@ This is a slight violation of "Optimize for the common case",
01201 // i.e. normally the translator will be 0, but OTOH the code is
01202 // smaller and should be better for the cache ;-) ;-)
01203 if (this->wchar_translator_ != 0)
01204 {
01205 this->good_bit_ = this->wchar_translator_->read_wstring (*this, x);
01206 return this->good_bit_;
01207 }
01208 if (ACE_OutputCDR::wchar_maxbytes_ == 0)
01209 {
01210 errno = EACCES;
01211 return (this->good_bit_ = false);
01212 }
01213
01214 ACE_CDR::ULong len = 0;
01215 if (!this->read_ulong (len))
01216 return false;
01217
01218 // A check for the length being too great is done later in the
01219 // call to read_char_array but we want to have it done before
01220 // the memory is allocated.
01221 if (len > 0 && len <= this->length ())
01222 {
01223 ACE_Auto_Basic_Array_Ptr<ACE_CDR::WChar> safe_data;
01224
01225 if (static_cast<ACE_CDR::Short> (this->major_version_) == 1
01226 && static_cast<ACE_CDR::Short> (this->minor_version_) == 2)
01227 {
01228 len /= ACE_OutputCDR::wchar_maxbytes_;
01229
01230 //allocating one extra for the null character needed by applications
01231 ACE_NEW_RETURN (x,
01232 ACE_CDR::WChar [len + 1],
01233 false);
01234
01235 ACE_auto_ptr_reset (safe_data, x);
01236
01237 if (this->read_wchar_array (x, len))
01238 {
01239
01240 //Null character used by applications to find the end of
01241 //the wstring
01242 //Is this okay with the GIOP 1.2 spec??
01243 x[len] = '\x00';
01244
01245 (void) safe_data.release ();
01246
01247 return true;
01248 }
01249 }
01250 else
01251 {
01252 ACE_NEW_RETURN (x,
01253 ACE_CDR::WChar [len],
01254 false);
01255
01256 ACE_auto_ptr_reset (safe_data, x);
01257
01258 if (this->read_wchar_array (x, len))
01259 {
01260 (void) safe_data.release ();
01261
01262 return true;
01263 }
01264 }
01265 }
01266 else if (len == 0)
01267 {
01268 // Convert any null strings to empty strings since empty
01269 // strings can cause crashes. (See bug 58.)
01270 ACE_NEW_RETURN (x,
01271 ACE_CDR::WChar[1],
01272 false);
01273 x[0] = '\x00';
01274 return true;
01275 }
01276
01277 this->good_bit_ = false;
01278 x = 0;
01279 return false;
01280 }
|
|
||||||||||||
|
Re-initialize the CDR stream, copying the contents of the chain of message_blocks starting from data. Definition at line 1580 of file CDR_Stream.cpp. References ACE_CDR::consolidate(), and reset_byte_order(). Referenced by ACE_InputCDR().
01582 {
01583 this->reset_byte_order (byte_order);
01584 ACE_CDR::consolidate (&this->start_, data);
01585 }
|
|
|
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. Definition at line 1446 of file CDR_Stream.inl. References ACE_CDR_BYTE_ORDER. Referenced by reset().
01447 {
01448 this->do_byte_swap_ = (byte_order != ACE_CDR_BYTE_ORDER);
01449 }
|
|
|
Re-initialize the CDR stream, forgetting about the old contents of the stream and allocating a new buffer (from the allocators). Definition at line 1777 of file CDR_Stream.cpp. References ACE_Message_Block::clr_self_flags(), and ACE_Message_Block::data_block(). Referenced by steal_from().
01778 {
01779 this->start_.data_block (this->start_.data_block ()->clone_nocopy ());
01780
01781 // Reset the flags...
01782 this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE);
01783 }
|
|
||||||||||||
|
Set the underlying GIOP version..
Definition at line 1484 of file CDR_Stream.inl. References ACE_CDR::Octet.
01485 {
01486 this->major_version_ = major;
01487 this->minor_version_ = minor;
01488 }
|
|
|
Return Definition at line 932 of file CDR_Stream.inl. References skip_octet().
00933 {
00934 return this->skip_octet () && this->good_bit_;
00935 }
|
|
|
Skip n bytes in the CDR stream.
Definition at line 1557 of file CDR_Stream.cpp. References rd_ptr(), and wr_ptr(). Referenced by skip_wchar(), and skip_wstring().
|
|
|
Return Definition at line 926 of file CDR_Stream.inl. References skip_octet().
00927 {
00928 return this->skip_octet (); // sizeof (Char) == sizeof (Octet)
00929 }
|
|
|
Return Definition at line 983 of file CDR_Stream.inl. References skip_ulonglong().
00984 {
00985 return this->skip_ulonglong (); // sizeof(Double) == sizeof (ULongLong)
00986 }
|
|
|
Return Definition at line 977 of file CDR_Stream.inl. References skip_ulong().
00978 {
00979 return this->skip_ulong (); // sizeof(Float) == sizeof (ULong)
00980 }
|
|
|
Return Definition at line 958 of file CDR_Stream.inl. References skip_ulong().
00959 {
00960 return this->skip_ulong (); // sizeof (Long) == sizeof (ULong)
00961 }
|
|
|
Return Definition at line 989 of file CDR_Stream.inl. References read_16().
00990 {
00991 ACE_CDR::LongDouble x;
00992 return this->read_16 (&x);
00993 }
|
|
|
Return Definition at line 971 of file CDR_Stream.inl. References skip_ulonglong().
00972 {
00973 return this->skip_ulonglong (); // sizeof (LongLong) == sizeof (ULongLong)
00974 }
|
|
|
Return Definition at line 919 of file CDR_Stream.inl. References ACE_CDR::Octet, and read_1(). Referenced by skip_boolean(), and skip_char().
00920 {
00921 ACE_CDR::Octet x;
00922 return this->read_1 (&x);
00923 }
|
|
|
Return Definition at line 945 of file CDR_Stream.inl. References skip_ushort().
00946 {
00947 return this->skip_ushort ();
00948 }
|
|
|
Definition at line 1521 of file CDR_Stream.cpp. References rd_ptr(), read_ulong(), ACE_CDR::ULong, and wr_ptr().
01522 {
01523 ACE_CDR::ULong len = 0;
01524 if (this->read_ulong (len))
01525 {
01526 if (this->rd_ptr () + len <= this->wr_ptr ())
01527 {
01528 this->rd_ptr (len);
01529 return true;
01530 }
01531 this->good_bit_ = false;
01532 }
01533 return false;
01534 }
|
|
|
Return Definition at line 951 of file CDR_Stream.inl. References read_4(), and ACE_CDR::ULong. Referenced by skip_float(), and skip_long().
00952 {
00953 ACE_CDR::ULong x;
00954 return this->read_4 (&x);
00955 }
|
|
|
Return Definition at line 964 of file CDR_Stream.inl. References read_8(), and ACE_CDR::ULongLong. Referenced by skip_double(), and skip_longlong().
00965 {
00966 ACE_CDR::ULongLong x;
00967 return this->read_8 (&x);
00968 }
|
|
|
Return Definition at line 938 of file CDR_Stream.inl. References read_2(), and ACE_CDR::UShort. Referenced by skip_short().
00939 {
00940 ACE_CDR::UShort x;
00941 return this->read_2 (&x);
00942 }
|
|
|
Return Definition at line 1012 of file CDR_Stream.cpp. References ACE_CDR::Octet, read_1(), read_2(), read_4(), skip_bytes(), and ACE_CDR::WChar. Referenced by skip_wstring().
01013 {
01014 if (static_cast<ACE_CDR::Short> (major_version_) == 1
01015 && static_cast<ACE_CDR::Short> (minor_version_) == 2)
01016 {
01017 ACE_CDR::Octet len;
01018 if (this->read_1 (&len))
01019 return this->skip_bytes (static_cast<size_t> (len));
01020 }
01021 else
01022 {
01023 ACE_CDR::WChar x;
01024 void * const temp = &x;
01025 if (ACE_OutputCDR::wchar_maxbytes_ == 2)
01026 return this->read_2 (reinterpret_cast<ACE_CDR::UShort *> (temp));
01027 else
01028 return this->read_4 (reinterpret_cast<ACE_CDR::ULong *> (temp));
01029 }
01030
01031 return (this->good_bit_ = false);
01032 }
|
|
|
The next field must be a string, this method skips it. It is useful in parsing a TypeCode.
Definition at line 1537 of file CDR_Stream.cpp. References ACE_CDR::Boolean, read_ulong(), skip_bytes(), skip_wchar(), and ACE_CDR::ULong.
01538 {
01539 ACE_CDR::Boolean continue_skipping = true;
01540 ACE_CDR::ULong len = 0;
01541
01542 continue_skipping = read_ulong (len);
01543
01544 if (continue_skipping && len != 0)
01545 {
01546 if (static_cast<ACE_CDR::Short> (this->major_version_) == 1
01547 && static_cast<ACE_CDR::Short> (this->minor_version_) == 2)
01548 continue_skipping = this->skip_bytes ((size_t)len);
01549 else
01550 while (continue_skipping && len--)
01551 continue_skipping = this->skip_wchar ();
01552 }
01553 return continue_skipping;
01554 }
|
|
|
Definition at line 1052 of file CDR_Stream.inl.
01053 {
01054 return &this->start_;
01055 }
|
|
|
Steal the contents from the current CDR.
Definition at line 1762 of file CDR_Stream.cpp. References ACE_Data_Block::clone(), ACE_Message_Block::clone(), ACE_Message_Block::clr_self_flags(), ACE_Message_Block::data_block(), and ACE_CDR::mb_align().
01763 {
01764 ACE_Message_Block* block = this->start_.clone ();
01765 this->start_.data_block (block->data_block ()->clone ());
01766
01767 // If at all our message had a DONT_DELETE flag set, just clear it
01768 // off.
01769 this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE);
01770
01771 ACE_CDR::mb_align (&this->start_);
01772
01773 return block;
01774 }
|
|
|
Steal the contents of cdr and make a shallow copy into this stream. Definition at line 1588 of file CDR_Stream.cpp. References ACE_Message_Block::clr_self_flags(), ACE_Message_Block::data_block(), do_byte_swap_, ACE_Data_Block::duplicate(), major_version_, minor_version_, ACE_Message_Block::rd_ptr(), reset_contents(), start_, and ACE_Message_Block::wr_ptr().
01589 {
01590 this->do_byte_swap_ = cdr.do_byte_swap_;
01591 this->start_.data_block (cdr.start_.data_block ()->duplicate ());
01592
01593 // If the message block had a DONT_DELETE flags, just clear it off..
01594 this->start_.clr_self_flags (ACE_Message_Block::DONT_DELETE);
01595 this->start_.rd_ptr (cdr.start_.rd_ptr ());
01596
01597 this->start_.wr_ptr (cdr.start_.wr_ptr ());
01598 this->major_version_ = cdr.major_version_;
01599 this->minor_version_ = cdr.minor_version_;
01600 cdr.reset_contents ();
01601 }
|
|
|
Definition at line 1517 of file CDR_Stream.inl.
01518 {
01519 this->wchar_translator_ = wctran;
01520 }
|
|
|
Definition at line 1504 of file CDR_Stream.inl.
01505 {
01506 return this->wchar_translator_;
01507 }
|
|
|
Returns the current position for the
Definition at line 1014 of file CDR_Stream.inl. References ACE_Message_Block::wr_ptr(). Referenced by adjust(), align_read_ptr(), clone_from(), read_1(), skip_bytes(), and skip_string().
|
|
|
The Codeset translators need access to some private members to efficiently marshal arrays For reading from an output CDR stream. Definition at line 557 of file CDR_Stream.h. |
|
|
Definition at line 558 of file CDR_Stream.h. |
|
|
If not nil, invoke for translation of character and string data.
Definition at line 937 of file CDR_Stream.h. Referenced by clone_from(), and operator=(). |
|
|
The CDR stream byte order does not match the one on the machine, swapping is needed while reading. Definition at line 927 of file CDR_Stream.h. Referenced by clone_from(), exchange_data_blocks(), operator=(), and steal_from(). |
|
|
set to
Definition at line 930 of file CDR_Stream.h. |
|
|
The GIOP versions for this stream.
Definition at line 933 of file CDR_Stream.h. Referenced by clone_from(), exchange_data_blocks(), ACE_WChar_Codeset_Translator::major_version(), ACE_Char_Codeset_Translator::major_version(), operator=(), and steal_from(). |
|
|
Definition at line 934 of file CDR_Stream.h. Referenced by clone_from(), exchange_data_blocks(), ACE_WChar_Codeset_Translator::minor_version(), ACE_Char_Codeset_Translator::minor_version(), operator=(), and steal_from(). |
|
|
The start of the chain of message blocks, even though in the current version the chain always has length 1. Definition at line 923 of file CDR_Stream.h. Referenced by ACE_InputCDR(), clone_from(), exchange_data_blocks(), operator=(), and steal_from(). |
|
|
Definition at line 938 of file CDR_Stream.h. Referenced by clone_from(). |
1.3.6