performance fixes on win32 plus clean up of some warnings. also

improved error messages when uninstalling service.
This commit is contained in:
crs
2002-06-14 18:08:20 +00:00
parent 21af7b2f17
commit e3dcf7febf
21 changed files with 340 additions and 177 deletions

View File

@@ -7,7 +7,8 @@
const UInt32 CStreamBuffer::kChunkSize = 4096;
CStreamBuffer::CStreamBuffer() :
m_size(0)
m_size(0),
m_headUsed(0)
{
// do nothing
}
@@ -25,17 +26,17 @@ CStreamBuffer::peek(
// reserve space in first chunk
ChunkList::iterator head = m_chunks.begin();
head->reserve(n);
head->reserve(n + m_headUsed);
// consolidate chunks into the first chunk until it has n bytes
ChunkList::iterator scan = head;
++scan;
while (head->size() < n && scan != m_chunks.end()) {
while (head->size() - m_headUsed < n && scan != m_chunks.end()) {
head->insert(head->end(), scan->begin(), scan->end());
scan = m_chunks.erase(scan);
}
return reinterpret_cast<const void*>(head->begin());
return reinterpret_cast<const void*>(head->begin() + m_headUsed);
}
void
@@ -44,7 +45,8 @@ CStreamBuffer::pop(
{
// discard all chunks if n is greater than or equal to m_size
if (n >= m_size) {
m_size = 0;
m_size = 0;
m_headUsed = 0;
m_chunks.clear();
return;
}
@@ -55,15 +57,16 @@ CStreamBuffer::pop(
// discard chunks until more than n bytes would've been discarded
ChunkList::iterator scan = m_chunks.begin();
assert(scan != m_chunks.end());
while (scan->size() <= n) {
n -= scan->size();
scan = m_chunks.erase(scan);
while (scan->size() - m_headUsed <= n) {
n -= scan->size() - m_headUsed;
m_headUsed = 0;
scan = m_chunks.erase(scan);
assert(scan != m_chunks.end());
}
// remove left over bytes from the head chunk
if (n > 0) {
scan->erase(scan->begin(), scan->begin() + n);
m_headUsed += n;
}
}