summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/BasicStream.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2006-03-15 15:22:00 +0000
committerDwayne Boone <dwayne@zeroc.com>2006-03-15 15:22:00 +0000
commitc95ae50506d66315810e6b1501aa7f4eaee3018e (patch)
tree82c050368f94054f9b6b3a03982a9567f6aad337 /cpp/src/Ice/BasicStream.cpp
parentFixed removeAdapter to not throw, bug 865 (diff)
downloadice-c95ae50506d66315810e6b1501aa7f4eaee3018e.tar.bz2
ice-c95ae50506d66315810e6b1501aa7f4eaee3018e.tar.xz
ice-c95ae50506d66315810e6b1501aa7f4eaee3018e.zip
Performance improvements, mainly inlining
Diffstat (limited to 'cpp/src/Ice/BasicStream.cpp')
-rw-r--r--cpp/src/Ice/BasicStream.cpp349
1 files changed, 19 insertions, 330 deletions
diff --git a/cpp/src/Ice/BasicStream.cpp b/cpp/src/Ice/BasicStream.cpp
index b5c55ca4e8d..fe9737f7dea 100644
--- a/cpp/src/Ice/BasicStream.cpp
+++ b/cpp/src/Ice/BasicStream.cpp
@@ -39,7 +39,8 @@ IceInternal::BasicStream::BasicStream(Instance* instance) :
{
}
-IceInternal::BasicStream::~BasicStream()
+void
+IceInternal::BasicStream::clear()
{
while(_currentReadEncaps && _currentReadEncaps != &_preAllocatedReadEncaps)
{
@@ -65,12 +66,6 @@ IceInternal::BasicStream::~BasicStream()
delete _objectList;
}
-Instance*
-IceInternal::BasicStream::instance() const
-{
- return _instance;
-}
-
void
IceInternal::BasicStream::swap(BasicStream& other)
{
@@ -203,36 +198,6 @@ IceInternal::BasicStream::startSeq(int numElements, int minSize)
}
}
-//
-// Check, given the number of elements requested for this sequence,
-// that this sequence, plus the sum of the sizes of the remaining
-// number of elements of all enclosing sequences, would still fit
-// within the message.
-//
-void
-IceInternal::BasicStream::checkSeq()
-{
- checkSeq(static_cast<int>(b.end() - i));
-}
-
-void
-IceInternal::BasicStream::checkSeq(int bytesLeft)
-{
- int size = 0;
- SeqData* sd = _seqDataStack;
- do
- {
- size += (sd->numElements - 1) * sd->minSize;
- sd = sd->previous;
- }
- while(sd);
-
- if(size > bytesLeft)
- {
- throw UnmarshalOutOfBoundsException(__FILE__, __LINE__);
- }
-}
-
void
IceInternal::BasicStream::checkFixedSeq(int numElements, int elemSize)
{
@@ -270,33 +235,6 @@ IceInternal::BasicStream::endSeq(int sz)
delete oldSeqData;
}
-IceInternal::BasicStream::WriteEncaps::WriteEncaps()
- : writeIndex(0), toBeMarshaledMap(0), marshaledMap(0), typeIdMap(0), typeIdIndex(0), previous(0)
-{
-}
-
-IceInternal::BasicStream::WriteEncaps::~WriteEncaps()
-{
- delete toBeMarshaledMap;
- delete marshaledMap;
- delete typeIdMap;
-}
-
-void
-IceInternal::BasicStream::WriteEncaps::reset()
-{
- delete toBeMarshaledMap;
- delete marshaledMap;
- delete typeIdMap;
-
- writeIndex = 0;
- toBeMarshaledMap = 0;
- marshaledMap = 0;
- typeIdMap = 0;
- typeIdIndex = 0;
- previous = 0;
-}
-
void
IceInternal::BasicStream::WriteEncaps::swap(WriteEncaps& other)
{
@@ -312,86 +250,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;
- }
-}
-
-IceInternal::BasicStream::ReadEncaps::ReadEncaps()
- : patchMap(0), unmarshaledMap(0), typeIdMap(0), typeIdIndex(0), previous(0)
-{
-}
-
-IceInternal::BasicStream::ReadEncaps::~ReadEncaps()
-{
- delete patchMap;
- delete unmarshaledMap;
- delete typeIdMap;
-}
-
-void
-IceInternal::BasicStream::ReadEncaps::reset()
-{
- delete patchMap;
- delete unmarshaledMap;
- delete typeIdMap;
-
- patchMap = 0;
- unmarshaledMap = 0;
- typeIdMap = 0;
- typeIdIndex = 0;
- previous = 0;
-}
-
-void
IceInternal::BasicStream::ReadEncaps::swap(ReadEncaps& other)
{
std::swap(start, other.start);
@@ -409,78 +267,6 @@ IceInternal::BasicStream::ReadEncaps::swap(ReadEncaps& other)
}
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);
@@ -576,41 +362,6 @@ IceInternal::BasicStream::skipSlice()
}
void
-IceInternal::BasicStream::writeSize(Int v)
-{
- assert(v >= 0);
- if(v > 254)
- {
- write(Byte(255));
- write(v);
- }
- else
- {
- write(static_cast<Byte>(v));
- }
-}
-
-void
-IceInternal::BasicStream::readSize(Ice::Int& v)
-{
- Byte byte;
- read(byte);
- unsigned val = static_cast<unsigned char>(byte);
- if(val == 255)
- {
- read(v);
- if(v < 0)
- {
- throw NegativeSizeException(__FILE__, __LINE__);
- }
- }
- else
- {
- v = static_cast<Int>(static_cast<unsigned char>(byte));
- }
-}
-
-void
IceInternal::BasicStream::writeTypeId(const string& id)
{
TypeIdWriteMap::const_iterator k = _currentWriteEncaps->typeIdMap->find(id);
@@ -962,27 +713,6 @@ IceInternal::BasicStream::read(pair<const Short*, const Short*>& v, IceUtil::aut
}
void
-IceInternal::BasicStream::write(Int v)
-{
- Container::size_type pos = b.size();
- resize(pos + sizeof(Int));
- Byte* dest = &b[pos];
-#ifdef ICE_BIG_ENDIAN
- const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Int) - 1;
- *dest++ = *src--;
- *dest++ = *src--;
- *dest++ = *src--;
- *dest = *src;
-#else
- const Byte* src = reinterpret_cast<const Byte*>(&v);
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src++;
- *dest = *src;
-#endif
-}
-
-void
IceInternal::BasicStream::write(const Int* begin, const Int* end)
{
Int sz = static_cast<Int>(end - begin);
@@ -1009,30 +739,6 @@ IceInternal::BasicStream::write(const Int* begin, const Int* end)
}
void
-IceInternal::BasicStream::read(Int& v)
-{
- if(b.end() - i < static_cast<int>(sizeof(Int)))
- {
- throw UnmarshalOutOfBoundsException(__FILE__, __LINE__);
- }
- const Byte* src = &(*i);
- i += sizeof(Int);
-#ifdef ICE_BIG_ENDIAN
- Byte* dest = reinterpret_cast<Byte*>(&v) + sizeof(Int) - 1;
- *dest-- = *src++;
- *dest-- = *src++;
- *dest-- = *src++;
- *dest = *src;
-#else
- Byte* dest = reinterpret_cast<Byte*>(&v);
- *dest++ = *src++;
- *dest++ = *src++;
- *dest++ = *src++;
- *dest = *src;
-#endif
-}
-
-void
IceInternal::BasicStream::read(vector<Int>& v)
{
Int sz;
@@ -1612,19 +1318,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);
@@ -1639,27 +1332,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;
@@ -2081,6 +1753,23 @@ IceInternal::BasicStream::throwMemoryLimitException(const char* file, int line)
}
void
+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;
+}
+
+void
IceInternal::BasicStream::writeInstance(const ObjectPtr& v, Int index)
{
write(index);