Major Update: (compiling but untested)

- Replace CBuffer with CRollingBuffer and CShiftBuffer
  ShiftBuffer is faster and simpler and always zero terminates
- Updated SelectableCore to use RollingBuffer
- Add Overwrite parameter to Push() and ReadFromFD() methods
- Add PeakDirect() method for fast direct access to buffer
This commit is contained in:
Charl Wentzel
2017-03-22 03:43:29 +02:00
parent bb07ef63bf
commit b5763d7f50
4 changed files with 587 additions and 136 deletions

View File

@@ -299,7 +299,7 @@ bool CSelectableCore::SetBuffers( THandle * Handle, int InBufSize, int OutBufSiz
Handle->InBuffer = NULL;
}
if (InBufSize) {
Handle->InBuffer = new CBuffer( InBufSize );
Handle->InBuffer = (CRollingBuffer*) new CRollingBuffer( InBufSize );
}
// Output Buffer
@@ -308,7 +308,7 @@ bool CSelectableCore::SetBuffers( THandle * Handle, int InBufSize, int OutBufSiz
Handle->OutBuffer = NULL;
}
if (OutBufSize) {
Handle->OutBuffer = new CBuffer( OutBufSize );
Handle->OutBuffer = (CRollingBuffer*) new CRollingBuffer( OutBufSize );
}
// Set Input Timeout
@@ -1060,7 +1060,7 @@ bool CSelectableCore::ProcessBuffer( THandle * Handle, bool Force )
while (Handle->InBuffer->FindStr( Handle->InMarker, Handle->InMarkerLen, Pos ))
{
// Show Packet
Len = Handle->InBuffer->Peek( &Data, 0, Pos+1 );
Len = Handle->InBuffer->Peek( &Data, 0, Pos+Handle->InMarkerLen+1 );
if (Log) Log->Output( DebugLevel, dlHigh, OutputDisplay, Data, Len, "%s: Handle '%s' - IN-M:", Name, Handle->Name );
// Write buffer to Outputs
@@ -1181,7 +1181,7 @@ int CSelectableCore::Input( const char * ChannelName, const char * Data, int Len
if (ChildHandle->OutBuffer)
{
// Write to buffer
BytesWritten = ChildHandle->OutBuffer->Push( Data, Len );
BytesWritten = ChildHandle->OutBuffer->Push( true, Data, Len );
// Add to select write list
if (BytesWritten) {
@@ -1210,7 +1210,7 @@ int CSelectableCore::Input( const char * ChannelName, const char * Data, int Len
if (Handle->OutBuffer)
{
// Write to buffer
BytesWritten = Handle->OutBuffer->Push( Data, Len );
BytesWritten = Handle->OutBuffer->Push( true, Data, Len );
// Add to select write list
if (BytesWritten) {