lowlevellibsandfws/apputils/inc/BAMATCH.H
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/apputils/inc/BAMATCH.H	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,253 @@
+// Copyright (c) 2003-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:
+// Incremental matcher class
+// 
+//
+
+#if !defined (__BAMATCH_H__)
+#define __BAMATCH_H__
+
+#if !defined(__E32STD_H__)
+#include <e32std.h>
+#endif
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#if !defined(__BAMDESCA_H__)
+#include <bamdesca.h>
+#endif
+
+
+class RTextBuf
+/** A simple class that encapsulates a text string.
+
+As with the descriptor classes, the class sets a maximum length for the encapsulated 
+string, which cannot be exceeded. The class might be preferred to a descriptor 
+in some circumstances as its maximum length can be increased (unlike a TBuf), 
+and it can be created on the stack (unlike an HBufC) . 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C RTextBuf();
+	IMPORT_C ~RTextBuf();
+public:
+	inline TPtr& Text();
+	inline const TPtr& Text() const;
+	inline TInt MaxLength() const;
+	inline void SetText(const TDesC &aDes);
+	IMPORT_C void SetMaxLengthL(TInt aMaxLength);
+	IMPORT_C void Close();
+private:
+	TPtr iPtr;
+	TText* iText;
+	};
+
+
+
+class RIncrMatcherBase
+/** Base class for incremental matcher classes.
+
+An incremental matcher compares two text buffers from left-to-right. For example, 
+the match between "garage" and "gander" is "ga".
+
+The class provides the interface for getting and setting the text to be matched 
+against, and for performing match tests. Each type of match test is available 
+in three versions, one using binary comparison, one using locale collation 
+rules (comparison of strings to produce a dictionary-like ('lexicographic') 
+ordering, e.g. ignoring punctuation), and one using locale folding rules (e.g. 
+ignoring case). 
+
+"bafl.lib" 
+@since 5.0
+@publishedAll
+@released
+*/
+	{
+public:
+    IMPORT_C virtual ~RIncrMatcherBase();
+protected:
+	/** Default constructor. */
+	inline RIncrMatcherBase() {}
+protected:
+	/** Gets the match text.
+	
+	@return Match text */
+	virtual TDes& MatchDes()=0;
+
+	/** Gets the match text.
+	
+	@return Match text */
+	virtual const TDes& MatchDes() const=0; 
+public:
+	inline TInt MaxLength() const;
+	inline TInt MatchLength() const;
+	inline TPtrC MatchText() const;
+//
+	inline void Clear();
+	IMPORT_C void DeleteLastChar();
+	IMPORT_C void AppendChar(TChar aLetter);
+	inline void SetMatchText(const TDesC& aText);
+//
+	IMPORT_C void SetBestMatch(const TDesC& aBuf);
+	IMPORT_C void SetBestMatchC(const TDesC& aBuf);
+	IMPORT_C void SetBestMatchF(const TDesC& aBuf);
+	IMPORT_C TBool IsMatch(const TDesC& aBuf) const;
+	IMPORT_C TBool IsMatchC(const TDesC& aBuf) const;
+	IMPORT_C TBool IsMatchF(const TDesC& aBuf) const;
+	IMPORT_C TInt FirstMatchingIndex(TInt& aResult,const MDesCArray& aDesArray,TInt aStartIndex=0) const;
+	IMPORT_C TInt FirstMatchingIndexC(TInt& aResult,const MDesCArray& aDesArray,TInt aStartIndex=0) const;
+	IMPORT_C TInt FirstMatchingIndexF(TInt& aResult,const MDesCArray& aDesArray,TInt aStartIndex=0) const;
+private:
+	typedef TInt (*TCompareFunc)(const TText*,TInt,const TText*,TInt);
+	TBool DoIsMatch(const TDesC& aQuery,TCompareFunc aCompare) const;
+	TInt DoFirstMatchingIndex(TInt& aIndex,const MDesCArray& aDesArray,TCompareFunc aCompare) const;
+	void DoSetBestMatch(const TDesC& aBuf,TCompareFunc aCompare);
+	};
+
+
+class RIncrMatcherPtr : public RIncrMatcherBase
+/** Incrementally matches text against a descriptor, accessed via a pointer.
+
+The class does not take a copy of the text to match against, but only stores 
+the pointer. 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C RIncrMatcherPtr();
+	IMPORT_C RIncrMatcherPtr(TDes& aDes);
+    IMPORT_C virtual ~RIncrMatcherPtr();
+public:
+	inline void SetMatcherPtr(TDes& aDes);
+protected:
+	IMPORT_C TDes& MatchDes();
+	IMPORT_C const TDes& MatchDes() const;
+private:
+	TDes* iDesPtr;
+	};
+
+
+class RIncrMatcherTextBuf : public RIncrMatcherBase
+/** Incrementally matches text against a text buffer with variable maximum 
+length. 
+@publishedAll
+@released
+*/
+	{
+public:
+    IMPORT_C RIncrMatcherTextBuf();
+    IMPORT_C virtual ~RIncrMatcherTextBuf();
+	inline void SetMatcherLengthL(TInt aMaxLength);
+protected:
+	IMPORT_C TDes& MatchDes();
+	IMPORT_C const TDes& MatchDes() const;
+private:
+	RTextBuf iTextBuf;
+	};
+
+template <TInt aMaximumSize> 
+class RIncrMatcherBuf : public RIncrMatcherBase
+/**
+Incrementally matches text against a modifiable descriptor buffer.
+Set aMaximumSize to be the maximum size of this buffer. 
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Default constructor. */
+	RIncrMatcherBuf() {}
+protected:
+
+	/**	 Gets the match text.
+	 
+	  @return   Match text (non const) */
+	inline TDes& MatchDes() {return(iMatchBuf);}
+
+	/**	 Gets the match text.
+	 
+	  @return   Match text (const)*/
+	inline const TDes& MatchDes() const {return(iMatchBuf);}
+
+	/** Copy constructor.
+	
+	@param aMatcher RIncrMatcherBuf to copy */
+	inline RIncrMatcherBuf(const RIncrMatcherBuf& aMatcher) {iMatchBuf=aMatcher.iMatchBuf;}
+private:
+	TBuf<aMaximumSize> iMatchBuf;
+    };
+
+inline TPtr& RTextBuf::Text()
+/** Gets the text as a descriptor. 
+
+@return   Match text descriptor (non const) */
+	{return(iPtr);}
+
+inline const TPtr& RTextBuf::Text() const
+/** Gets the text as a descriptor. 
+
+@return   Match text descriptor (const) */
+	{return(iPtr);}
+
+inline TInt RTextBuf::MaxLength() const
+/** Gets the maximum length of the text. 
+
+@return The maximum length of the text.*/
+	{return(iPtr.MaxLength());}
+
+inline void RTextBuf::SetText(const TDesC &aDes)
+/** Sets the text. You must have set the maximum length appropriately first with
+SetMaxLengthL(). */
+	{iPtr.Copy(aDes);}
+
+inline TInt RIncrMatcherBase::MaxLength() const
+/** Gets the maximum length of the match text buffer. */
+	{return(MatchDes().MaxLength());}
+inline TInt RIncrMatcherBase::MatchLength() const
+/** Gets the current length of the match text buffer. */
+	{return(MatchDes().Length());}
+inline TPtrC RIncrMatcherBase::MatchText() const
+/** Gets the match text as a TPtrC. */
+	{return(TPtrC(MatchDes()));}
+inline void RIncrMatcherBase::SetMatchText(const TDesC& aText)
+/** Sets the match text.
+	
+@param aText String to which to set the match text. */
+	{MatchDes()=aText;}
+
+inline void RIncrMatcherBase::Clear()
+/** Clears the match text. */
+	{MatchDes().Zero();}
+
+inline void RIncrMatcherPtr::SetMatcherPtr(TDes& aDes)
+/** Sets the text to be matched against.
+	
+@param aDes Text to be matched against */
+	{iDesPtr=&aDes;}
+
+
+inline void RIncrMatcherTextBuf::SetMatcherLengthL(TInt aMaxLength)
+/** Sets the maximum length of text that can be stored through SetMatchText() 
+etc.
+	
+@param aMaxLength Maximum length of text that can be stored */
+	{iTextBuf.SetMaxLengthL(aMaxLength);}
+
+
+#endif