author | mikek |
Sun, 27 Jun 2010 21:43:55 +0100 | |
branch | GCC_SURGE |
changeset 181 | bd8f1e65581b |
parent 0 | a41df078684a |
permissions | -rw-r--r-- |
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" // which accompanies this distribution, and is available // at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. // // Contributors: // // Description: // e32\debug\crashMonitor\src\scmbytestreamutil.cpp // some utility classes for writing data to flash buffer // // /** @file @internalTechnology */ #include "scmbytestreamutil.h" #include "scmtrace.h" namespace Debug { /** * TByteStreamBase Constructor * @param aBuffer - pointer to buffer that this utility will use */ TByteStreamBase::TByteStreamBase(TUint8* aBuffer) : iBuffer(aBuffer) , iPos(0) { } /** * SetPosition * @param aBuffer - Sets iPos * @return void */ void TByteStreamBase::SetPosition(TInt aPos) { iPos = aPos; } /** * CurrentPosition * @param aBuffer - Returns the current value of iPos * @return Tint */ TInt TByteStreamBase::CurrentPosition() const { return iPos; } /** * TByteStreamReader Constructor * @param aBuffer - pointer to buffer that this utility will use */ TByteStreamReader::TByteStreamReader(TUint8* aBuffer) : TByteStreamBase(aBuffer) { } /** * Constructor for TByteStreamWriter * @param aBuffer buffer for writing * @param aPhysEnabled whether or not physical writing to another media is enabled */ TByteStreamWriter::TByteStreamWriter(TUint8* aBuffer, TBool aPhysEnabled) : TByteStreamBase(aBuffer) , iPhysEnabled(aPhysEnabled) , iBytesWritten(0) { } /** * Writes a byte to the buffer * @param aValue Byte to write */ void TByteStreamWriter::WriteByte(TUint8 aValue) { if(iBuffer) { iBuffer[iPos++] = aValue; ++iBytesWritten; } } /** * Resets the byte counter back to zero */ void TByteStreamWriter::ResetBytesWritten() { iBytesWritten = 0; } /** * TCachedByteStreamWriter Constructor * @param aBuffer - pointer to buffer that this utility will use * @param aCacheSize - suggested length of cache to use if greater than EMaxCache * cache length of EMaxCache will be used */ TCachedByteStreamWriter::TCachedByteStreamWriter(TUint8* aCacheBuffer, TInt aCacheSize, TBool aPhysEnabled) : TByteStreamWriter(NULL, aPhysEnabled) , iCacheSize(aCacheSize) , iCacheBuffer(aCacheBuffer) , iPhysicalWriter(NULL) { } /** * FlushCache * Writes the contents of the cache to buffer amd/or to physical writer implementation * if one is currently set * @return void */ TInt TCachedByteStreamWriter::FlushCache() { TInt padCount = iCacheSize - iPos; if(padCount > 0) { for(TInt i=0;i<padCount;i++) { iCacheBuffer[iPos++] = 0; } } if(iPhysEnabled) { if(iPhysicalWriter) // do we have a writer to send the cache data to { iPhysicalWriter->DoPhysicalWrite(iCacheBuffer, iBytesWritten, iPos); } } iPos = 0; return KErrNone; } /** * Writes a byte to the cached buffer * @param aValue Byte to write */ void TCachedByteStreamWriter::WriteByte(TUint8 aValue) { if(iPos == iCacheSize) { FlushCache(); } iCacheBuffer[iPos++] = aValue; ++iBytesWritten; } /** * CurrentPosition * @param aBuffer - need to return the position in buffer plus the write pos into cache * @return Tint */ TInt TCachedByteStreamWriter::CurrentPosition() const { return iBytesWritten; } /** * SetWriterImpl * @param aPhysicalWriter - sets the physical writer implementation to be used when the cache is flushed * pass NULL to remove a previous writer implementation * @return void */ void TCachedByteStreamWriter::SetWriterImpl(MPhysicalWriterImpl* aPhysicalWriter) { iPhysicalWriter = aPhysicalWriter; } } //eof