diff options
Diffstat (limited to 'cppe/src/IceE/BasicStream.cpp')
-rw-r--r-- | cppe/src/IceE/BasicStream.cpp | 208 |
1 files changed, 11 insertions, 197 deletions
diff --git a/cppe/src/IceE/BasicStream.cpp b/cppe/src/IceE/BasicStream.cpp index 683499f9601..861417eb0ef 100644 --- a/cppe/src/IceE/BasicStream.cpp +++ b/cppe/src/IceE/BasicStream.cpp @@ -254,60 +254,6 @@ IceInternal::BasicStream::WriteEncaps::swap(WriteEncaps& other) } void -IceInternal::BasicStream::startWriteEncaps() -{ - WriteEncaps* oldEncaps = _currentWriteEncaps; - if(!oldEncaps) // First allocated encaps? - { - _currentWriteEncaps = &_preAllocatedWriteEncaps; - } - else - { - _currentWriteEncaps = new WriteEncaps(); - _currentWriteEncaps->previous = oldEncaps; - } - _currentWriteEncaps->start = b.size(); - - write(Int(0)); // Placeholder for the encapsulation length. - write(encodingMajor); - write(encodingMinor); -} - -void -IceInternal::BasicStream::endWriteEncaps() -{ - assert(_currentWriteEncaps); - Container::size_type start = _currentWriteEncaps->start; - Int sz = static_cast<Int>(b.size() - start); // Size includes size and version. - Byte* dest = &(*(b.begin() + start)); - -#ifdef ICE_BIG_ENDIAN - const Byte* src = reinterpret_cast<const Byte*>(&sz) + sizeof(Int) - 1; - *dest++ = *src--; - *dest++ = *src--; - *dest++ = *src--; - *dest = *src; -#else - const Byte* src = reinterpret_cast<const Byte*>(&sz); - *dest++ = *src++; - *dest++ = *src++; - *dest++ = *src++; - *dest = *src; -#endif - - WriteEncaps* oldEncaps = _currentWriteEncaps; - _currentWriteEncaps = _currentWriteEncaps->previous; - if(oldEncaps == &_preAllocatedWriteEncaps) - { - oldEncaps->reset(); - } - else - { - delete oldEncaps; - } -} - -void IceInternal::BasicStream::ReadEncaps::swap(ReadEncaps& other) { std::swap(start, other.start); @@ -319,90 +265,6 @@ IceInternal::BasicStream::ReadEncaps::swap(ReadEncaps& other) std::swap(previous, other.previous); } -void -IceInternal::BasicStream::startReadEncaps() -{ - ReadEncaps* oldEncaps = _currentReadEncaps; - if(!oldEncaps) // First allocated encaps? - { - _currentReadEncaps = &_preAllocatedReadEncaps; - } - else - { - _currentReadEncaps = new ReadEncaps(); - _currentReadEncaps->previous = oldEncaps; - } - _currentReadEncaps->start = i - b.begin(); - - // - // I don't use readSize() and writeSize() for encapsulations, - // because when creating an encapsulation, I must know in advance - // how many bytes the size information will require in the data - // stream. If I use an Int, it is always 4 bytes. For - // readSize()/writeSize(), it could be 1 or 5 bytes. - // - Int sz; - read(sz); - if(sz < 0) - { - throw NegativeSizeException(__FILE__, __LINE__); - } - if(i - sizeof(Int) + sz > b.end()) - { - throw UnmarshalOutOfBoundsException(__FILE__, __LINE__); - } - _currentReadEncaps->sz = sz; - - Byte eMajor; - Byte eMinor; - read(eMajor); - read(eMinor); - if(eMajor != encodingMajor - || static_cast<unsigned char>(eMinor) > static_cast<unsigned char>(encodingMinor)) - { - UnsupportedEncodingException ex(__FILE__, __LINE__); - ex.badMajor = static_cast<unsigned char>(eMajor); - ex.badMinor = static_cast<unsigned char>(eMinor); - ex.major = static_cast<unsigned char>(encodingMajor); - ex.minor = static_cast<unsigned char>(encodingMinor); - throw ex; - } - _currentReadEncaps->encodingMajor = eMajor; - _currentReadEncaps->encodingMinor = eMinor; -} - -void -IceInternal::BasicStream::endReadEncaps() -{ - assert(_currentReadEncaps); - Container::size_type start = _currentReadEncaps->start; - Int sz = _currentReadEncaps->sz; - i = b.begin() + start + sz; - - ReadEncaps* oldEncaps = _currentReadEncaps; - _currentReadEncaps = _currentReadEncaps->previous; - if(oldEncaps == &_preAllocatedReadEncaps) - { - oldEncaps->reset(); - } - else - { - delete oldEncaps; - } -} - -void -IceInternal::BasicStream::checkReadEncaps() -{ - assert(_currentReadEncaps); - Container::size_type start = _currentReadEncaps->start; - Int sz = _currentReadEncaps->sz; - if(i != b.begin() + start + sz) - { - throw EncapsulationException(__FILE__, __LINE__); - } -} - Int IceInternal::BasicStream::getReadEncapsSize() { @@ -516,31 +378,6 @@ IceInternal::BasicStream::readBlob(vector<Byte>& v, Int sz) } void -IceInternal::BasicStream::writeBlob(const Ice::Byte* v, Container::size_type sz) -{ - if(sz > 0) - { - Container::size_type pos = b.size(); - resize(pos + sz); - memcpy(&b[pos], v, sz); - } -} - -void -IceInternal::BasicStream::readBlob(Ice::Byte* v, Container::size_type sz) -{ - if(sz > 0) - { - if(static_cast<Container::size_type>(b.end() - i) < sz) - { - throw UnmarshalOutOfBoundsException(__FILE__, __LINE__); - } - memcpy(v, &*i, sz); - i += sz; - } -} - -void IceInternal::BasicStream::read(pair<const Byte*, const Byte*>& v) { Int sz; @@ -1444,19 +1281,6 @@ IceInternal::BasicStream::write(const char*) */ void -IceInternal::BasicStream::write(const string& v) -{ - Int sz = static_cast<Int>(v.size()); - writeSize(sz); - if(sz > 0) - { - Container::size_type pos = b.size(); - resize(pos + sz); - memcpy(&b[pos], v.c_str(), sz); - } -} - -void IceInternal::BasicStream::write(const string* begin, const string* end) { Int sz = static_cast<Int>(end - begin); @@ -1471,27 +1295,6 @@ IceInternal::BasicStream::write(const string* begin, const string* end) } void -IceInternal::BasicStream::read(string& v) -{ - Int sz; - readSize(sz); - if(sz > 0) - { - if(b.end() - i < sz) - { - throw UnmarshalOutOfBoundsException(__FILE__, __LINE__); - } - string(reinterpret_cast<const char*>(&*i), reinterpret_cast<const char*>(&*i) + sz).swap(v); -// v.assign(reinterpret_cast<const char*>(&(*i)), sz); - i += sz; - } - else - { - v.clear(); - } -} - -void IceInternal::BasicStream::read(vector<string>& v) { Int sz; @@ -1599,6 +1402,17 @@ IceInternal::BasicStream::throwNegativeSizeException(const char* file, int line) throw NegativeSizeException(file, line); } +void +IceInternal::BasicStream::throwUnsupportedEncodingException(const char* file, int line, Byte eMajor, Byte eMinor) +{ + UnsupportedEncodingException ex(file, line); + ex.badMajor = static_cast<unsigned char>(eMajor); + ex.badMinor = static_cast<unsigned char>(eMinor); + ex.major = static_cast<unsigned char>(encodingMajor); + ex.minor = static_cast<unsigned char>(encodingMinor); + throw ex; +} + IceInternal::BasicStream::SeqData::SeqData(int num, int sz) : numElements(num), minSize(sz) { } |