diff -r e8e3147d53eb -r b3431bff8c19 predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1FilterHelper.cpp --- 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& aPatternSequence) +void CPcsAlgorithm1FilterHelper::AddL(CPsData* aPsData, RPointerArray& aPatternSequence) { if(iSortType == EAlphabetical) { @@ -117,10 +117,12 @@ if(iMatchPatternPools.Count() == 0 ) { RPointerArray *tempPsDataArray = new (ELeave) RPointerArray (); - 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 seqBuf; - seqBuf.Append(*aSeq); - TInt j = 0; for( ; j < iMatchPatternDetails.Count(); j++) { - TBuf 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 seqBuf; - seqBuf.Append(*aSeq); - TInt j = 0; for( ; j < iMatchPatternDetails[aPatternIndex]->subPatternArray.Count(); j++) { - TBuf 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; iDes().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