--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/ptihangulcore/src/OssCombination.cpp Sun Mar 14 13:11:12 2010 +0000
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2005,2006 Choe Hwanjin
+* 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:
+*
+*/
+
+
+#include "OssCombination.h"
+#include "hangul.h"
+
+TInt CombinationOrderFunction(
+ const TOssCombinationItem& aFirst,
+ const TOssCombinationItem& aSecond)
+ {
+ TUint keyFirst=aFirst.iFirst<<16|aFirst.iSecond;
+ TUint keySecond=aSecond.iFirst<<16|aSecond.iSecond;
+ return keyFirst-keySecond;
+ }
+
+TBool TOssCombinationItem::operator == (const TOssCombinationItem& aCombination) const
+ {
+ return iFirst==aCombination.iFirst && iSecond==aCombination.iSecond;
+ }
+
+EXPORT_C COssCombination* COssCombination::NewLC()
+ {
+ COssCombination* self = new (ELeave) COssCombination();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+EXPORT_C COssCombination* COssCombination::NewL()
+ {
+ COssCombination* self = COssCombination::NewLC();
+ CleanupStack::Pop(); // self;
+ return self;
+ }
+
+COssCombination::COssCombination()
+ : iHangulCombination(NULL)
+ {
+ }
+
+void COssCombination::ConstructL()
+ {
+ }
+
+EXPORT_C COssCombination::~COssCombination()
+ {
+ iCombinationList.Reset();
+ iCombinationList.Close();
+ if (iHangulCombination)
+ hangul_combination_delete(iHangulCombination);
+ }
+
+EXPORT_C TInt COssCombination::AddCombinationL(
+ const TOssCombinationItem& aCombination)
+ {
+ TInt ret(KErrAlreadyExists);
+
+ TInt index=FindCombination(aCombination);
+ TLinearOrder<TOssCombinationItem> orderCombination(CombinationOrderFunction);
+
+ if (index==KErrNotFound)
+ {
+ //iCombinationList.Append(aCombination);
+ iCombinationList.InsertInOrderL(aCombination,orderCombination);
+ ret=KErrNone;
+ }
+
+ return ret;
+ }
+
+EXPORT_C TInt COssCombination::RemoveCombination(
+ const TOssCombinationItem& aCombination)
+ {
+ TInt ret(KErrNotFound);
+
+ TInt index=FindCombination(aCombination);
+ if (index!=KErrNotFound)
+ {
+ iCombinationList.Remove(index);
+ ret=KErrNone;
+ }
+ return ret;
+ }
+
+EXPORT_C TInt COssCombination::FindCombination(
+ const TOssCombinationItem& aCombination)
+ {
+ TInt ret(KErrNotFound);
+ for (TInt i=0;i<iCombinationList.Count();i++)
+ {
+ if (iCombinationList[i]==aCombination)
+ {
+ ret=i;
+ break;
+ }
+ }
+ return ret;
+ }
+
+TBool COssCombination::PopulateListL()
+ {
+ if (iHangulCombination)
+ {
+ hangul_combination_delete(iHangulCombination);
+ iHangulCombination=NULL;
+ }
+ iHangulCombination=hangul_combination_new();
+ TUint cnt=iCombinationList.Count();
+ TText* listFirst=new (ELeave) TText[cnt];
+ TText* listSecond=new (ELeave) TText[cnt];
+ TText* listResult=new (ELeave) TText[cnt];
+
+ for (TInt i=0;i<cnt;i++)
+ {
+ listFirst[i]=iCombinationList[i].iFirst;
+ listSecond[i]=iCombinationList[i].iSecond;
+ listResult[i]=iCombinationList[i].iResult;
+ }
+
+ TBool ret=hangul_combination_set_data(
+ iHangulCombination,
+ listFirst,
+ listSecond,
+ listResult,
+ cnt);
+
+ delete[] listFirst;
+ delete[] listSecond;
+ delete[] listResult;
+ return ret;
+ }