predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1FilterHelper.cpp
branchRCL_3
changeset 7 b3431bff8c19
parent 3 04ab22b956c2
child 12 4ae315f230bc
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1FilterHelper.cpp	Mon Mar 15 12:39:26 2010 +0200
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1FilterHelper.cpp	Wed Mar 31 21:13:53 2010 +0300
@@ -21,7 +21,7 @@
 #include "CPcsDebug.h"
 
 // Compare functions
-TBool ComparePsPattern ( const TPsPatternDetails& aFirst, const TPsPatternDetails& aSecond )
+TInt ComparePsPattern ( const TPsPatternDetails& aFirst, const TPsPatternDetails& aSecond )
 {
 	return (CPcsAlgorithm1Utils::MyCompareC(*(aFirst.matchPattern), *(aSecond.matchPattern)));
 }
@@ -109,7 +109,7 @@
 // CPcsAlgorithm1FilterHelper::AddL
 // 
 // ----------------------------------------------------------------------------
-void CPcsAlgorithm1FilterHelper::AddL(CPsData* psData, RPointerArray<TDesC>& aPatternSequence)
+void CPcsAlgorithm1FilterHelper::AddL(CPsData* aPsData, RPointerArray<TDesC>& aPatternSequence)
 {
 	if(iSortType == EAlphabetical)
 	{
@@ -117,10 +117,12 @@
 		if(iMatchPatternPools.Count() == 0 )
 		{
 			RPointerArray<CPsData> *tempPsDataArray = new (ELeave) RPointerArray<CPsData> ();
-        	iMatchPatternPools.Append(tempPsDataArray);
+			CleanupStack::PushL( tempPsDataArray );
+        	iMatchPatternPools.AppendL(tempPsDataArray);
+        	CleanupStack::Pop( tempPsDataArray );
 		}
 		// Add result to the result set
-		iMatchPatternPools[0]->Append(psData);
+		iMatchPatternPools[0]->AppendL(aPsData);
 		
 		// Update the count
 		iResultCount++;
@@ -128,33 +130,32 @@
 		// Update sequence list
 		for(TInt i = 0; i < aPatternSequence.Count(); i++)
 		{
-			TInt index = FindSequence(aPatternSequence[i]);
+			TInt index = FindSequence(*aPatternSequence[i]);
 			if ( index  == KErrNotFound )
 			{
 				// sequence not found, add it to array
 				TPsPatternDetails* temp = new ( ELeave ) TPsPatternDetails;
+				CleanupStack::PushL( temp );
 				
-				TInt len = aPatternSequence[i]->Length();
-				temp->matchPattern = HBufC::NewL(len);
-				temp->matchPattern->Des().Copy(*(aPatternSequence[i]));
+				temp->matchPattern = aPatternSequence[i]->AllocL();
 				
 				// First occurence should be -1 for alphabetical sort
 				// and pool index will be 0 as only one pool will be created
 				temp->firstOccurence = -1;
 				temp->poolIndex = 0;
 				
-				iMatchPatternDetails.Append(temp);	
+				iMatchPatternDetails.AppendL(temp);
+				CleanupStack::Pop( temp );
 			}
 		}
 	}
 	else
 	{
 		// PatternBased sort
-		TInt index = AddToPoolL(psData, aPatternSequence);
+		TInt index = AddToPoolL(aPsData, aPatternSequence);
 		
 		// Increment the total count
 		iResultCount++;	
-							
 	}
 }
 
@@ -186,7 +187,7 @@
 	
 		// Create the pattern for aPatternSequence[cnt] in  iMatchPatternDetails
 		// and return the index
-	    TInt indexInMatchPatternDetails = CreateMatchPatternDetailsAndPoolsL(aPatternSequence[cnt]);
+	    TInt indexInMatchPatternDetails = CreateMatchPatternDetailsAndPoolsL(*aPatternSequence[cnt]);
 		
 		//Add the data to the pool the first pattern pool.
 		// The data should be added only once
@@ -203,14 +204,14 @@
 	       	else
 	       	{
 	       		poolItemCount = -1;
-	       	}	
-	       		
+	       	}
+	    
 	    }
 	    else if(cnt > 0)
 		{
 		    // Check if aPatternSequence[cnt] is listed in subpatterns of aPatternSequence[0]
 		    // If not, then create a sub pattern and apped it to  iMatchPatternDetails for aPatternSequence[0]
-		 	TInt subSeq = FindSubSequence(aPatternSequence[cnt],matchpatterpoolIndexToAppend);
+		 	TInt subSeq = FindSubSequence(*aPatternSequence[cnt], matchpatterpoolIndexToAppend);
 		 	if(subSeq  == KErrNotFound )
 		 	{
 		 	
@@ -235,7 +236,7 @@
 // Returns the index of the sequence in iMatchPatternDetails
 // ----------------------------------------------------------------------------
 
-TInt CPcsAlgorithm1FilterHelper::CreateMatchPatternDetailsAndPoolsL(TDesC* aSeq)
+TInt CPcsAlgorithm1FilterHelper::CreateMatchPatternDetailsAndPoolsL(const TDesC& aSeq)
 {
 
 	TInt indexInMatchPatternDetails = FindSequence(aSeq);
@@ -245,8 +246,7 @@
 		TPsPatternDetails* tempPatternDetailsInstance = new ( ELeave ) TPsPatternDetails;
 		
 		//TInt len = aPatternSequence[cnt]->Length();
-		tempPatternDetailsInstance->matchPattern = HBufC::NewL(aSeq->Length());
-		tempPatternDetailsInstance->matchPattern->Des().Copy(*(aSeq));
+		tempPatternDetailsInstance->matchPattern = aSeq.AllocL();
 		tempPatternDetailsInstance->firstOccurence = -1; //RAVIKIRAN
 		
 		// Pools doesn't exist for this sequence..
@@ -353,17 +353,13 @@
 // Searches for for aSeq in iMatchPatternDetails and returns index 
 //  where input sequence is found. Returns -1 if not found
 // ----------------------------------------------------------------------------
-TInt CPcsAlgorithm1FilterHelper::FindSequence(TDesC* aSeq)
+TInt CPcsAlgorithm1FilterHelper::FindSequence(const TDesC& aSeq)
 {
-	TBuf<KPsQueryMaxLen> seqBuf;
-	seqBuf.Append(*aSeq);
-	
 	TInt j = 0;
 	for( ; j < iMatchPatternDetails.Count(); j++)
 	{
-		TBuf<KPsQueryMaxLen> matchPatternBuf;
-		matchPatternBuf.Copy((iMatchPatternDetails[j]->matchPattern->Des()));
-		if ( CPcsAlgorithm1Utils::MyCompareC(seqBuf, matchPatternBuf) == 0 )
+		const TDesC& matchPattern = *(iMatchPatternDetails[j]->matchPattern);
+		if ( CPcsAlgorithm1Utils::MyCompareC(aSeq, matchPattern) == 0 )
             break;
 	}
 	
@@ -379,17 +375,13 @@
 // and returns index where input sequence is found. 
 // Returns -1 if not found
 // ----------------------------------------------------------------------------
-TInt CPcsAlgorithm1FilterHelper::FindSubSequence(TDesC* aSeq,TInt aPatternIndex)
+TInt CPcsAlgorithm1FilterHelper::FindSubSequence(const TDesC& aSeq,TInt aPatternIndex)
 {
-	TBuf<KPsQueryMaxLen> seqBuf;
-	seqBuf.Append(*aSeq);
-	
 	TInt j = 0;
 	for( ; j < iMatchPatternDetails[aPatternIndex]->subPatternArray.Count(); j++)
 	{
-		TBuf<KPsQueryMaxLen> matchPatternBuf;
-		matchPatternBuf.Copy((iMatchPatternDetails[aPatternIndex]->subPatternArray[j]->matchPattern->Des()));
-		if ( CPcsAlgorithm1Utils::MyCompareC(seqBuf, matchPatternBuf) == 0 )
+		const TDesC& matchPattern = *(iMatchPatternDetails[aPatternIndex]->subPatternArray[j]->matchPattern);
+		if ( CPcsAlgorithm1Utils::MyCompareC(aSeq, matchPattern) == 0 )
             break;
 	}
 	
@@ -408,13 +400,13 @@
 // then, firstOccurence of all substring sequences ("A", "AB", "ABC") 
 //       in iMatchPatternDetails will be set to 2
 // ----------------------------------------------------------------------------
-void CPcsAlgorithm1FilterHelper::UpdateForSubSequencesL(TDesC& aSeq,TInt aFirstOccrVal)
+void CPcsAlgorithm1FilterHelper::UpdateForSubSequencesL(const TDesC& aSeq,TInt aFirstOccrVal)
 {
-    HBufC* tempSequence = HBufC::NewL(aSeq.Length() + 1);
-    for ( TInt i =0; i<aSeq.Length(); i++ )
+    TPtrC tempSequence;
+    for ( TInt i = 1; i <= aSeq.Length(); i++ )
 	{
 	    // Get the next substring in tempSequence
-		tempSequence->Des().Append(aSeq[i]);
+		tempSequence.Set( aSeq.Left(i) );
 	
 		// Find if this sequence exist in iMatchPatternDetails
 		TInt patternIndex = FindSequence(tempSequence);
@@ -423,14 +415,9 @@
 		if((patternIndex != KErrNotFound) && (iMatchPatternDetails[patternIndex]->firstOccurence == -1))
 		{
 			iMatchPatternDetails[patternIndex]->firstOccurence = aFirstOccrVal;
-		}	
-				
+		}
+	
 	}
-	delete tempSequence;
-	tempSequence = NULL;
-	
-	return;
-
 }
 // END OF FILE