--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/sispeechrecognitiondata/src/nsssispeechrecognitiondataclient.cpp Thu Dec 17 08:46:30 2009 +0200
@@ -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 <e32std.h>
+#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