srsf/nssvasapi/nssvasrecognition/src/nssvascadaptationitem.cpp
changeset 0 bf1d17376201
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/nssvasapi/nssvasrecognition/src/nssvascadaptationitem.cpp	Thu Dec 17 08:46:30 2009 +0200
@@ -0,0 +1,147 @@
+/*
+* 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:  CNssAdaptationItem handles speaker adaptation.
+*
+*/
+
+
+// INCLUDE FILES
+#include "nssvascadaptationitem.h"
+#include "rubydebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::CNssAdaptationItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CNssAdaptationItem::CNssAdaptationItem(
+    CNssRecognitionHandler* aRecHandlerHost,
+    CSIClientResultSet*  aRecResult)
+
+ :  iRecHandler( aRecHandlerHost ),
+    iIsActive  ( ETrue ),
+    iAdaptationData( aRecResult )
+
+    {
+    // Nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNssAdaptationItem* CNssAdaptationItem::NewL( CNssRecognitionHandler* aHandler, 
+                                                       CSIClientResultSet* aResultSet )
+    {
+    if ( !aHandler || !aResultSet )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    CNssAdaptationItem* self = new( ELeave ) CNssAdaptationItem( aHandler, aResultSet );
+    
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::~CNssAdaptationItem
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNssAdaptationItem::~CNssAdaptationItem()
+    {
+    if ( iAdaptationData )
+        {
+        delete iAdaptationData;
+        iAdaptationData = 0;
+        }
+
+    // Announce for the host recognition handler, that we no longer exist.
+    if ( iRecHandler )
+        {
+        iRecHandler->RemoveAdaptationItem( this );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::AdaptL
+// Starts adaptation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNssAdaptationItem::AdaptL( MNssAdaptationEventHandler* aHandler,
+                                          TInt aCorrect )
+    {
+    // This can happen, if the client has deleted the recognition handler.
+    if ( !iRecHandler )
+        {
+        User::Leave( KErrNotReady );
+        }
+
+    iRecHandler->AdaptL( aHandler, iAdaptationData, aCorrect );
+    }
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::AdaptL
+// Starts adaptation based on tag
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNssAdaptationItem::AdaptL( MNssAdaptationEventHandler* aHandler,
+                                          MNssTag& aTag )
+    {
+    TInt correctIndex( KErrNotFound );
+    
+    CNssSpeechItem* speechItem = static_cast<CNssSpeechItem*>( aTag.SpeechItem() );
+    CNssContext* context = static_cast<CNssContext*>( aTag.Context() );
+   
+    // Find the index for the correct result
+    for ( TInt iCounter = 0; iCounter < iAdaptationData->ResultCount(); iCounter++ )
+        {
+        const CSIClientResult& result = iAdaptationData->AtL( iCounter );
+        if ( ( result.GrammarID() == context->GrammarId() ) && ( result.RuleID() == speechItem->RuleID() ) )
+            {
+            correctIndex = iCounter;   
+            }
+        }
+    
+    // Leave with KErrNotFound if no match in grammar id and rule id
+    User::LeaveIfError( correctIndex );
+    
+    AdaptL( aHandler, correctIndex );
+    }
+
+// -----------------------------------------------------------------------------
+// CNssAdaptationItem::Disable
+// Host recognition handler calls this function, when it is destroyed.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CNssAdaptationItem::Disable()
+    {
+    if ( iIsActive )
+        {
+        RUBY_DEBUG0( "CNssAdaptationItem::Disable() is active" );
+
+        delete iAdaptationData;
+        iAdaptationData = 0;
+       
+        iRecHandler = 0;
+
+        iIsActive = EFalse;
+        }
+    }
+
+// End of File