summaryrefslogtreecommitdiff
path: root/cppe/src/IceE/BasicStream.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-02-24 12:45:59 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-02-24 12:45:59 +0000
commit9d229c0dc974a718a6ccd84651afbbd44dacce01 (patch)
tree951361ad4842a5f597b3ba65c7aed5a64cdb2fe6 /cppe/src/IceE/BasicStream.cpp
parentFixed typo in Config.h wrt define to use select (diff)
downloadice-9d229c0dc974a718a6ccd84651afbbd44dacce01.tar.bz2
ice-9d229c0dc974a718a6ccd84651afbbd44dacce01.tar.xz
ice-9d229c0dc974a718a6ccd84651afbbd44dacce01.zip
Refactored Connection class.
Diffstat (limited to 'cppe/src/IceE/BasicStream.cpp')
-rw-r--r--cppe/src/IceE/BasicStream.cpp208
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)
{
}