--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/inc/TFixedDigitString.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2005-2007 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: Fixed digit string handler class
+*
+*/
+
+
+#ifndef VPBKENGUTILS_TFIXEDDIGITSTRING_H
+#define VPBKENGUTILS_TFIXEDDIGITSTRING_H
+
+// INCLUDES
+#include <e32std.h>
+
+namespace VPbkEngUtils {
+
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATIONS
+
+/**
+ * Fixed-length digit string.
+ * Phone number matching helper class: encodes decimal digit characters to BCD
+ * (Binary Coded Decimal) format for efficient matching.
+ */
+class TFixedDigitString
+ {
+ public:
+ /**
+ * Default constructor. Resets this digit string to empty.
+ */
+ TFixedDigitString();
+
+ /**
+ * Returns the length of this digit string.
+ * @return the number of digits in this digit string,
+ */
+ TInt Length() const;
+
+ /**
+ * Returns true if this digit string is empty.
+ */
+ TBool IsEmpty() const;
+
+ /**
+ * Returns the maximum number of digits this object may contain.
+ */
+ static TInt MaxLength();
+
+ /**
+ * Returns non-modifiable decimal digit at position aIndex.
+ *
+ * @pre aIndex >= 0 && aIndex < Length()
+ * @post result >= 0 && result <= 9
+ */
+ TInt operator[](TInt aIndex) const;
+
+ /**
+ * Compares the digits in this string to another digit string.
+ *
+ * @param aOther the other digit string to compare this string with.
+ * @param aNumDigits the number of digits to compare. Zero means
+ * all digits are compared.
+ * @pre Result is undefined if aNumDigits < 0 || aNumDigits > MaxLength().
+ * @return true if aNumDigits digits match
+ */
+ TBool Compare(const TFixedDigitString& aOther, TInt aNumDigits) const;
+
+ /**
+ * Resets this digit string to empty.
+ * @post Length() == 0
+ */
+ void Reset();
+
+ /**
+ * Encodes digit characters from text to this digit string.
+ *
+ * @param aDigitsText text to encode decimal digit characters from.
+ * Nondigit characters are skipped. The encoded
+ * and skipped characters are removed from the
+ * parameter. At maximum MaxLength() digits
+ * are encoded.
+ */
+ void EncodeDigits(TPtrC& aDigitsText);
+
+ private: // Implementation
+ enum
+ {
+ KBitsPerDigit = 4,
+ KMaxDigits = 8*sizeof(TUint) / KBitsPerDigit,
+ KMaxBits = KMaxDigits * KBitsPerDigit,
+ KNaNBCD = 0xf,
+ KNaN = -1
+ };
+ inline TBool DoCompare(const TFixedDigitString& aOther, TInt aNumDigits) const;
+
+ private: // Data
+ /// Own. Bcd digits to be compared
+ TUint iBcdDigits;
+ };
+
+
+// INLINE FUNCTIONS
+
+inline TInt TFixedDigitString::MaxLength()
+ {
+ return KMaxDigits;
+ }
+
+/**
+ * Inline implementation of Compare.
+ */
+inline TBool TFixedDigitString::DoCompare
+ (const TFixedDigitString& aOther, TInt aNumDigits) const
+ {
+ const TUint mask = ~TUint(0) >> ((KBitsPerDigit*(KMaxDigits - aNumDigits)) % (KMaxBits));
+ if ((iBcdDigits ^ aOther.iBcdDigits) & mask)
+ return EFalse;
+ else
+ return ETrue;
+ }
+
+#ifdef NDEBUG
+// Inline version of TFixedDigitString::Compare for non-debug builds
+inline TBool TFixedDigitString::Compare
+ (const TFixedDigitString& aOther, TInt aNumDigits) const
+ {
+ return DoCompare(aOther, aNumDigits);
+ }
+#endif
+
+
+} // namespace VPbkEngUtils
+
+#endif // VPBKENGUTILS_TFIXEDDIGITSTRING_H
+