2
Copyright (c) 2009 NetAllied Systems GmbH
4
This file is part of Common libBuffer.
6
Licensed under the MIT Open Source License,
7
for details please see LICENSE file or the website
8
http://www.opensource.org/licenses/mit-license.php
11
#include "CommonBuffer.h"
16
//--------------------------------------------------------------------
17
Buffer::Buffer( size_t bufferSize, IBufferFlusher* flusher )
18
: mBuffer( new char[bufferSize] )
19
, mBufferSize(bufferSize)
20
, mCurrentPos( mBuffer )
21
, mDirectFlushSize( mBufferSize )
25
, mIsOverwriting(false)
30
//--------------------------------------------------------------------
37
//--------------------------------------------------------------------
38
bool Buffer::flushBuffer()
42
// there is nothing to flush
47
bool success = sendDataToFlusher( mBuffer, getBytesUsed() );
50
mCurrentPos = mBuffer;
55
//--------------------------------------------------------------------
56
bool Buffer::flushFlusher()
63
return mFlusher->flush();
66
//--------------------------------------------------------------------
67
bool Buffer::copyToBuffer( const char* text )
69
size_t length = strlen( text );
70
return copyToBuffer( text, length);
73
//--------------------------------------------------------------------
74
void Buffer::setDirectFlushSize( size_t directFlushSize )
76
mDirectFlushSize = (directFlushSize > mBufferSize) ? mBufferSize : directFlushSize;
79
//------------------------------
80
size_t Buffer::getBytesUsed() const
82
return mCurrentPos - mBuffer;
85
//------------------------------
86
size_t Buffer::getBytesAvailable() const
88
return getBufferSize()-getBytesUsed();
91
//------------------------------
92
size_t Buffer::isEmpty() const
94
return mBuffer == mCurrentPos;
97
//------------------------------
98
size_t Buffer::getDirectFlushSize() const
100
return mDirectFlushSize;
103
//------------------------------
104
void Buffer::increaseCurrentPosition( size_t addedBytes )
106
mCurrentPos += addedBytes;
109
//------------------------------
110
void Buffer::increaseCurrentPosition()
115
//------------------------------
116
bool Buffer::startMark()
118
// assert(!mMarkSet);
124
mFlusher->startMark();
129
//------------------------------
130
IBufferFlusher::MarkId Buffer::endMark()
134
return IBufferFlusher::INVALID_ID;
138
return mFlusher->endMark();
141
//------------------------------
142
bool Buffer::jumpToMark( IBufferFlusher::MarkId markId, bool keepMarkId /*= false*/ )
145
if ( markId == IBufferFlusher::END_OF_STREAM )
147
mIsOverwriting = false;
151
mIsOverwriting = true;
153
return mFlusher->jumpToMark(markId, keepMarkId);
156
//------------------------------
157
size_t Buffer::getBytesCopiedToBuffer() const
159
return mBytesFlushed + getBytesUsed();
162
//------------------------------
163
bool Buffer::sendDataToFlusher( const char* buffer, size_t length )
165
if ( !mIsOverwriting )
167
mBytesFlushed += length;
169
return mFlusher->receiveData( buffer, length );
172
} // namespace Common