diff -r 8ce15fced3a6 -r cad71a31b7fc srsf/sicc/src/nsssicustomcommanddata.cpp --- a/srsf/sicc/src/nsssicustomcommanddata.cpp Thu Aug 19 09:56:14 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,320 +0,0 @@ -/* -* Copyright (c) 2004-2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Private serialization functions for Custom Commands -* -*/ - - -// INCLUDE FILES -#include -#include "nsssicustomcommanddata.h" -#include "rubydebug.h" - -// LOCAL FUNCTION PROTOTYPES -void CleanupForPointerArrays( TAny* anArray ); -void CleanupResetAndDestroyAndDeletePushL( RPointerArray* anArray ); - - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CleanupForPointerArrays -// -// Cleanup function for RPointerArray, which calls ResetAndDestroy() -// before deleting. -// -// Returns: None -// ----------------------------------------------------------------------------- -// -void CleanupForPointerArrays( - TAny* anArray) // Pointer to RPointerArray - { - RPointerArray *array = (RPointerArray *)anArray; - array->ResetAndDestroy(); - delete array; - } - -// ----------------------------------------------------------------------------- -// CleanupResetAndDestroyAndDeletePushL -// -// Pushes the RPointerArray to the cleanup stack, so that -// both the container and its contents are deleted in case of a leave. -// -// Returns: None -// ----------------------------------------------------------------------------- -// -void CleanupResetAndDestroyAndDeletePushL( - RPointerArray *anArray) // Array to be destroyed and deleted - { - TCleanupItem cleanupItem( CleanupForPointerArrays, (TAny *)anArray ); - CleanupStack::PushL( cleanupItem ); - } - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::ExternalizeDesCArrayL -// Externalizes a string array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CBufFlat* SICustomCommandData::ExternalizeDesCArrayL( - const MDesCArray& aArray) - { - - CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize); - CleanupStack::PushL(dataCopyBuffer); - RBufWriteStream stream; - stream.Open(*dataCopyBuffer); - CleanupClosePushL(stream); - - // Write the number of strings - stream.WriteInt32L(aArray.MdcaCount()); - - // Write strings: First string length, then the characters - for( TInt k = 0; k < aArray.MdcaCount(); k++ ) - { - TPtrC text( aArray.MdcaPoint( k ) ); - - stream.WriteInt32L( text.Length() ); - - if ( text.Length() > 0 ) - { - stream.WriteL( text ); - } - } - - CleanupStack::PopAndDestroy(1); //stream - CleanupStack::Pop(); //dataCopyBuffer; - return dataCopyBuffer; - } - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::InternalizeDesCArrayL -// Internalizes a string array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MDesCArray *SICustomCommandData::InternalizeDesCArrayL( - const TDesC8& aBuffer) - { - CDesCArrayFlat* phraseArray = new CDesCArrayFlat(KExpandSize); - CleanupStack::PushL(phraseArray); - - RDesReadStream stream; - stream.Open(aBuffer); - CleanupClosePushL(stream); - - TInt count = stream.ReadInt32L(); - - TInt phraseBufLength = KDefaultPhraseLen; - HBufC *phraseBuf = HBufC::NewLC( phraseBufLength ); - TPtr phrase = phraseBuf->Des(); - - for( TInt k = 0; k < count; k++ ) - { - TInt length = stream.ReadInt32L(); - - if ( length > phraseBufLength ) - { - CleanupStack::PopAndDestroy( phraseBuf ); - phraseBuf = HBufC::NewLC( length ); - phraseBufLength = length; - phrase.Set( phraseBuf->Des() ); - } - - stream.ReadL( phrase, length ); - phraseArray->AppendL( phrase ); - phrase.Zero(); - } - - CleanupStack::PopAndDestroy(2); //phraseBuf, stream - CleanupStack::Pop(phraseArray); //phraseArray; - return phraseArray; - } - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::ExternalizeDesCArrayArrayL -// Externalizes an array of string arrays. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CBufFlat* SICustomCommandData::ExternalizeDesCArrayArrayL( - const RPointerArray& aArrayArray) - { - CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize); - CleanupStack::PushL(dataCopyBuffer); - RBufWriteStream stream; - stream.Open(*dataCopyBuffer); - CleanupClosePushL(stream); - - stream.WriteInt32L(aArrayArray.Count()); - - for( TInt arrayK = 0; arrayK < aArrayArray.Count(); arrayK++ ) - { - const MDesCArray& aArray = *aArrayArray[ arrayK ]; - // Write the number of strings - stream.WriteInt32L(aArray.MdcaCount()); - - // Write strings: First string length, then the characters - for( TInt k = 0; k < aArray.MdcaCount(); k++ ) - { - TPtrC text( aArray.MdcaPoint( k ) ); - - stream.WriteInt32L( text.Length() ); - - if ( text.Length() > 0 ) - { - stream.WriteL( text ); - } - } - } - - CleanupStack::PopAndDestroy(1); //stream - CleanupStack::Pop(); //dataCopyBuffer; - return dataCopyBuffer; - - } - - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::InternalizeDesCArrayArrayL -// Internalizes an array of string arrays array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -RPointerArray *SICustomCommandData::InternalizeDesCArrayArrayL( - const TDesC8& aBuffer) - { - RPointerArray* phraseArrayArray = new (ELeave) RPointerArray(KExpandSize); - CleanupResetAndDestroyAndDeletePushL(phraseArrayArray); - - RDesReadStream stream; - stream.Open(aBuffer); - CleanupClosePushL(stream); - - TInt arrayCount = stream.ReadInt32L(); - - TInt phraseBufLength = KDefaultPhraseLen; - HBufC *phraseBuf = HBufC::NewL( phraseBufLength ); - TPtr phrase = phraseBuf->Des(); - CleanupStack::PushL( phraseBuf ); - - for( TInt arrayK = 0; arrayK < arrayCount; arrayK++ ) - { - - TInt count = stream.ReadInt32L(); - - CDesCArrayFlat* phraseArray = new CDesCArrayFlat(KExpandSize); - CleanupStack::PushL( phraseArray ); - - for( TInt k = 0; k < count; k++ ) - { - TInt length = stream.ReadInt32L(); - - if ( length > phraseBufLength ) - { - HBufC* newPhraseBuf = HBufC::NewL( length ); - - CleanupStack::Pop( phraseArray ); - CleanupStack::PopAndDestroy( phraseBuf ); - - phraseBuf = newPhraseBuf; - phraseBufLength = length; - phrase.Set( phraseBuf->Des() ); - - CleanupStack::PushL( phraseBuf ); - CleanupStack::PushL( phraseArray ); - } - - stream.ReadL( phrase, length ); - phraseArray->AppendL( phrase ); - phrase.Zero(); - } - - User::LeaveIfError( phraseArrayArray->Append( phraseArray ) ); - CleanupStack::Pop( phraseArray ); - } - - CleanupStack::PopAndDestroy(2); //phraseBuf, stream - CleanupStack::Pop(1); //phraseArrayArray - return phraseArrayArray; - } - - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::InternalizeDesCArrayArrayL -// Internalizes an array of string arrays array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -HBufC8* SICustomCommandData::ReadMessageDataLC( TMMFMessage& aMessage, TInt aSlot ) - { - // MMF messages have 2 slots - if ( aSlot != 1 && aSlot != 2 ) - { - RUBY_DEBUG0( "SICustomCommandData::ReadMessageDataLC Leaving with KErrArgument" ); - User::Leave( KErrArgument ); - } - - - TInt size = 0; - - if ( aSlot == 1 ) - { - size = aMessage.SizeOfData1FromClient(); - } - else - { - size = aMessage.SizeOfData2FromClient(); - } - - HBufC8* data = HBufC8::NewLC( size ); - TPtr8 ptr = data->Des(); - - if ( aSlot == 1 ) - { - aMessage.ReadData1FromClientL( ptr ); - } - else{ - aMessage.ReadData2FromClientL( ptr ); - } - - return( data ); - } - - -// ----------------------------------------------------------------------------- -// CSpeakerIndependentCustomCommandParser::InternalizePronunArrayL -// Internalizes an array of string arrays array. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void SICustomCommandData::InternalizePronunArrayL( - const TDesC8& aData, - TInt aCount, - RArray& aArray ) - { - const TSIPronunciationID* pronunPtr = (const TSIPronunciationID*)aData.Ptr(); - - for ( TInt k = 0; k < aCount; k++ ) - { - User::LeaveIfError( aArray.Append( *pronunPtr ) ); - pronunPtr++; - } - } - - -// End of File