diff -r cad71a31b7fc -r e36f3802f733 srsf/sispeechrecognitiondata/src/nsssispeechrecognitiondataclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/sispeechrecognitiondata/src/nsssispeechrecognitiondataclient.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,431 @@ +/* +* Copyright (c) 2004 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: This file contains definition of the SISpeechRecognitionDataClient structure and API. +* +*/ + + +// INCLUDE FILES +#include +#include "nsssispeechrecognitiondataclient.h" +#include "nsssispeechrecognitiondatadevasr.h" +#include "nsssispeechrecognitiondatatest.h" + +// CONSTANTS +const TInt32 KBinaryClientResultSetID = 0xAACF1235; + +// Does the CSIClientResultSet have an embedded CSIResultSet? +const TInt KNoResultSet = 0; +const TInt KYesResultSet = 1; + +// ----------------------------------------------------------------------------- +// CSIClientResult::~CSIClientResult +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResult::~CSIClientResult() +{ +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::CSIClientResult +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSIClientResult::CSIClientResult() + : iGrammarID(0), + iRuleID(0) +{ +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::CSIClientResult +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSIClientResult::CSIClientResult(TSIGrammarID aGrammarID, TSIRuleID aRuleID) + : iGrammarID(aGrammarID), + iRuleID(aRuleID) +{ +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSIClientResult::ConstructL() +{ +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResult* CSIClientResult::NewLC() +{ + CSIClientResult* self = new (ELeave) CSIClientResult(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResult* CSIClientResult::NewL() +{ + CSIClientResult* self = NewLC(); + CleanupStack::Pop(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResult* CSIClientResult::NewLC(TSIGrammarID aGrammarID, TSIRuleID aRuleID) +{ + CSIClientResult* self = new (ELeave) CSIClientResult(aGrammarID, aRuleID); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResult* CSIClientResult::NewL(TSIGrammarID aGrammarID, TSIRuleID aRuleID) +{ + CSIClientResult* self = NewLC(aGrammarID, aRuleID); + CleanupStack::Pop(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::SetGrammarID +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResult::SetGrammarID(TSIGrammarID aGrammarID) +{ + iGrammarID = aGrammarID; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::GrammarID +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C TSIGrammarID CSIClientResult::GrammarID() const +{ + return iGrammarID; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::SetRuleID +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResult::SetRuleID(TSIRuleID aRuleID) +{ + iRuleID = aRuleID; +} + +// ----------------------------------------------------------------------------- +// CSIClientResult::RuleID +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C TSIRuleID CSIClientResult::RuleID() const +{ + return iRuleID; +} + +/*****************************************************************************/ + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::~CSIClientResultSet +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResultSet::~CSIClientResultSet() +{ + iResultArray.ResetAndDestroy(); + iResultArray.Close(); + delete iSIResultSet; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::CSIClientResultSet +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSIClientResultSet::CSIClientResultSet() + : iMaxResults(0), + iResultCount(0), + iResultArray(10), + iSIResultSet(NULL) +{ +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSIClientResultSet::ConstructL() +{ + iSIResultSet = CSIResultSet::NewL(); +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResultSet* CSIClientResultSet::NewLC() +{ + CSIClientResultSet* self = new (ELeave) CSIClientResultSet(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIClientResultSet* CSIClientResultSet::NewL() +{ + CSIClientResultSet* self = NewLC(); + CleanupStack::Pop(); + return self; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::AddL +// Adds a result to the set. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::AddL( const CSIClientResult* aResult) + { + if ( iResultArray.Count() >= iMaxResults ) + { + User::Leave( KErrOverflow ); + } + + TInt error = iResultArray.Append(aResult); + User::LeaveIfError( error ); + } + + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::DeleteL +// Removes a result from the set. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::DeleteL(TInt aIndex) +{ + if(aIndex<0 || aIndex >= iResultArray.Count()) + User::Leave(KErrArgument); + iResultArray.Remove(aIndex); +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::SetMaxResultsL +// Sets the maximum number of results, which the client wants get. +// Less results may be returned for various reasons. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::SetMaxResultsL(TInt aMaxResults) +{ + iMaxResults = aMaxResults; + + while( iResultArray.Count() > iMaxResults ) + { + delete iResultArray[ iMaxResults ]; + iResultArray.Remove( iMaxResults ); + } +/* + for (TInt i = 0; i < aMaxResults; i++) + { + CSIClientResult* result = CSIClientResult::NewLC(); + User::LeaveIfError(iResultArray.Append(result)); + CleanupStack::Pop(); + } +*/ +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::MaxResults +// Returns the maximum number of results. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIClientResultSet::MaxResults() const +{ + return iMaxResults; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::AtL +// Used to get a result. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C const CSIClientResult& CSIClientResultSet::AtL(TInt aIndex) const +{ + + if(aIndex<0 || aIndex >= iResultArray.Count()) + User::Leave(KErrArgument); + return *(iResultArray[aIndex]); +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::SetResultCount +// Sets the actual number of results, as opposed to maximum number. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::SetResultCount(TInt aResultCount) +{ + iResultCount = aResultCount; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::ResultCount +// Gets the actual number of results, which is smaller or equal to maximum number. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CSIClientResultSet::ResultCount() const +{ + return iResultCount; +} + + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::SIClientResultSet +// Returns the nested lower-level result set. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C CSIResultSet& CSIClientResultSet::SIResultSet() const +{ + return *iSIResultSet; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::SetSIResultSet +// Sets the nested result set. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::SetSIResultSet(CSIResultSet* aSIResultSet) +{ + delete iSIResultSet; + iSIResultSet = aSIResultSet; +} + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::ExternalizeL +// Stores the object to the stream. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::ExternalizeL( RWriteStream& aStream ) const + { + // Write format ID + aStream.WriteInt32L( KBinaryClientResultSetID ); + + aStream.WriteInt32L( iMaxResults ); + aStream.WriteInt32L( iResultCount ); + + TInt count = iResultArray.Count(); + aStream.WriteInt32L( count ); + + for ( TInt k = 0; k < count; k++ ) + { + CSIClientResult* result = iResultArray[ k ]; + + aStream.WriteInt32L( result->GrammarID() ); + aStream.WriteInt32L( result->RuleID() ); + } + + if ( iSIResultSet == 0 ) + { + aStream.WriteInt32L( KNoResultSet ); + } + else + { + aStream.WriteInt32L( KYesResultSet ); + + iSIResultSet->ExternalizeL( aStream ); + } + } + +// ----------------------------------------------------------------------------- +// CSIClientResultSet::InternalizeL +// Restores the object from the stream. +// (other items were commented in the headers) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CSIClientResultSet::InternalizeL( RReadStream& aStream ) + { + if ( aStream.ReadInt32L() != KBinaryClientResultSetID ) + { + User::Leave( KErrCorrupt ); + } + + iMaxResults = aStream.ReadInt32L(); + iResultCount= aStream.ReadInt32L(); + + TInt count = aStream.ReadInt32L(); + + for ( TInt k( 0 ); k < count; k++ ) + { + CSIClientResult* result = CSIClientResult::NewLC(); + + result->SetGrammarID( (TSIGrammarID)aStream.ReadInt32L() ); + result->SetRuleID ( (TSIRuleID) aStream.ReadInt32L() ); + + AddL( result ); + + CleanupStack::Pop( result ); + } + + TInt32 hasNestedResultSet = aStream.ReadInt32L(); + + if ( hasNestedResultSet == KYesResultSet ) + { + iSIResultSet->InternalizeL( aStream ); + } + + } + +// End of File