--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/apputils/src/BAMATCH.CPP Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,268 @@
+// Copyright (c) 1997-2009 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:
+// Started by Brendan, January 1996
+// Descended from HCIMATCH.CPP
+// Incremental matcher class
+//
+//
+
+#include <bamatch.h>
+#include <baflpan.h>
+#include <bamdesca.h>
+
+
+
+EXPORT_C RTextBuf::RTextBuf()
+ : iPtr(NULL,0), iText(NULL)
+/** Default constructor. */
+ {}
+
+
+EXPORT_C RTextBuf::~RTextBuf()
+/** Destructor. */
+ {
+ Close();
+ }
+
+
+EXPORT_C void RTextBuf::SetMaxLengthL(TInt aMaxLength)
+/** Sets the maximum length of the text that the object can store.
+
+Attempts to store text beyond the maximum length cause a panic, as
+with descriptors. */
+ {
+ __ASSERT_ALWAYS(aMaxLength>0,Panic(EBafPanicTextBufOutOfRange));
+ Close();
+ iText=new(ELeave) TText[aMaxLength+1];
+ iPtr.Set(iText,0,aMaxLength);
+ }
+
+EXPORT_C void RTextBuf::Close()
+ {
+ delete [] iText;
+ iText=NULL;
+ iPtr.Set(NULL,0,0);
+ }
+
+// class RIncrMatcherBase
+
+EXPORT_C RIncrMatcherBase::~RIncrMatcherBase()
+/** Virtual destructor, for reimplementation by derived classes. */
+ {}
+
+TBool RIncrMatcherBase::DoIsMatch(const TDesC& aQuery,TCompareFunc aCompare) const
+ {
+ const TDes& des=MatchDes();
+ TInt l=des.Length();
+ return l>aQuery.Length() ? EFalse : aCompare(aQuery.Ptr(),l,des.Ptr(),l)==0;
+ }
+
+TInt RIncrMatcherBase::DoFirstMatchingIndex(TInt& aIndex,const MDesCArray& aDesArray,TCompareFunc aCompare) const
+ {
+ TInt noElements=aDesArray.MdcaCount();
+ __ASSERT_ALWAYS(aIndex>=0 && aIndex<noElements,Panic(EBafPanicMatcherOutOfRange));
+ do
+ {
+ if (DoIsMatch(aDesArray.MdcaPoint(aIndex),aCompare))
+ return KErrNone;
+ } while (++aIndex<noElements);
+ return KErrNotFound;
+ }
+
+void RIncrMatcherBase::DoSetBestMatch(const TDesC& aBuf,TCompareFunc aCompare)
+ {
+ TDes& des=MatchDes();
+ des.SetLength(Min(des.Length(),aBuf.Length()));
+ while (!DoIsMatch(aBuf,aCompare))
+ DeleteLastChar();
+ }
+
+
+EXPORT_C TBool RIncrMatcherBase::IsMatch(const TDesC& aQuery) const
+/**Tests for match, using a binary comparison.
+
+@param aQuery Text to match
+@return ETrue if match found, else EFalse */
+ {
+ return DoIsMatch(aQuery,Mem::Compare);
+ }
+
+
+EXPORT_C TBool RIncrMatcherBase::IsMatchC(const TDesC& aQuery) const
+/** Tests for match, using locale collation rules.
+
+@param aQuery Text to match
+@return ETrue if match found, else EFalse */
+ {
+ return DoIsMatch(aQuery,Mem::CompareC);
+ }
+
+EXPORT_C TBool RIncrMatcherBase::IsMatchF(const TDesC& aQuery) const
+/** Tests for match, using locale folding rules.
+
+@param aQuery Text to match
+@return ETrue if match found, else EFalse */
+ {
+ return DoIsMatch(aQuery,Mem::CompareF);
+ }
+
+EXPORT_C TInt RIncrMatcherBase::FirstMatchingIndex(TInt& aResultIndex,const MDesCArray& aDesArray,TInt aStartIndex) const
+/** Finds the first match in an array, using a binary comparison.
+
+@param aResult On return, index of the first match in aDesArray
+@param aDesArray Array of descriptors to search
+@param aStartIndex Index of aDesArray at which to begin search
+@return KErrNone if success or KErrNotFound if no match is found */
+ {
+ aResultIndex=aStartIndex;
+ return DoFirstMatchingIndex(aResultIndex,aDesArray,Mem::Compare);
+ }
+
+EXPORT_C TInt RIncrMatcherBase::FirstMatchingIndexC(TInt& aResultIndex,const MDesCArray& aDesArray,TInt aStartIndex) const
+/** Finds the first match in an array, using locale collation rules.
+
+@param aResult On return, index of the first match in aDesArray
+@param aDesArray Array of descriptors to search
+@param aStartIndex Index of aDesArray at which to begin search
+@return KErrNone if success or KErrNotFound if no match is found */
+ {
+ aResultIndex=aStartIndex;
+ return DoFirstMatchingIndex(aResultIndex,aDesArray,Mem::CompareC);
+ }
+
+EXPORT_C TInt RIncrMatcherBase::FirstMatchingIndexF(TInt& aResultIndex,const MDesCArray& aDesArray,TInt aStartIndex) const
+/** Finds the first match in an array, using locale folding rules.
+
+@param aResult On return, index of the first match in aDesArray
+@param aDesArray Array of descriptors to search
+@param aStartIndex Index of aDesArray at which to begin search
+@return KErrNone if success or KErrNotFound if no match is found */
+ {
+ aResultIndex=aStartIndex;
+ return DoFirstMatchingIndex(aResultIndex,aDesArray,Mem::CompareF);
+ }
+
+EXPORT_C void RIncrMatcherBase::SetBestMatch(const TDesC& aBuf)
+/** Sets the match text to the best match between the match text and the passed
+buffer, using a binary comparision.
+
+For example, if the original match text is "goose" and the passed buffer is
+"gooSE", the match text would be changed to "goo".
+
+@param aBuf Text to match */
+ {
+ DoSetBestMatch(aBuf,Mem::Compare);
+ }
+
+EXPORT_C void RIncrMatcherBase::SetBestMatchC(const TDesC& aBuf)
+/** Sets the match text to the best match between the match text and the passed
+buffer, using locale collation rules.
+
+@param aBuf Text to match */
+ {
+ DoSetBestMatch(aBuf,Mem::CompareC);
+ }
+
+EXPORT_C void RIncrMatcherBase::SetBestMatchF(const TDesC& aBuf)
+/** Sets the match text to the best match between the match text and the passed
+buffer, using locale folding rules.
+
+@param aBuf Text to match */
+ {
+ DoSetBestMatch(aBuf,Mem::CompareF);
+ }
+
+EXPORT_C void RIncrMatcherBase::AppendChar(TChar aLetter)
+/** Appends a character to the end of the match text.
+
+@param aLetter Character to append */
+ {
+ TDes& des=MatchDes();
+ __ASSERT_ALWAYS(des.Length()<des.MaxLength(),Panic(EBafPanicMatcherOutOfRange));
+ des.Append(aLetter);
+ }
+
+EXPORT_C void RIncrMatcherBase::DeleteLastChar()
+/** Deletes the final character in the match text. */
+ {
+ TDes& des=MatchDes();
+ TInt l=des.Length();
+ if (--l>=0)
+ {
+ des[l]=0;
+ des.SetLength(l);
+ }
+ }
+
+EXPORT_C RIncrMatcherPtr::RIncrMatcherPtr()
+ : iDesPtr(NULL)
+/** Default constructor. */
+ {
+ }
+
+EXPORT_C RIncrMatcherPtr::RIncrMatcherPtr(TDes& aDes)
+ : iDesPtr(&aDes)
+/** Constructor that initialises the object with the text to be matched against.
+
+@param aDes Text to be matched against */
+ {
+ }
+
+EXPORT_C RIncrMatcherPtr::~RIncrMatcherPtr()
+/** Destructor. */
+ {
+ }
+
+EXPORT_C TDes& RIncrMatcherPtr::MatchDes()
+/** Gets the match text.
+
+@return Match text */
+ {
+ return(*iDesPtr);
+ }
+
+EXPORT_C const TDes& RIncrMatcherPtr::MatchDes() const
+/** Gets the match text.
+
+@return Match text */
+ {
+ return(*iDesPtr);
+ }
+
+
+EXPORT_C RIncrMatcherTextBuf::RIncrMatcherTextBuf()
+/** Default constructor. */
+ {
+ }
+
+EXPORT_C RIncrMatcherTextBuf::~RIncrMatcherTextBuf()
+/** Destructor.*/
+ {
+ }
+
+EXPORT_C TDes& RIncrMatcherTextBuf::MatchDes()
+/** Gets the match text.
+
+@return Match text */
+ {
+ return(iTextBuf.Text());
+ }
+
+EXPORT_C const TDes& RIncrMatcherTextBuf::MatchDes() const
+/** Gets the match text.
+
+@return Match text */
+ {
+ return(iTextBuf.Text());
+ }