phonebookengines_old/contactsmodel/tsrc/T_rndutils.h
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/T_rndutils.h	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,75 @@
+// Copyright (c) 2004-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:
+//
+
+#ifndef __T_RNDUTILS_H__
+#define __T_RNDUTILS_H__
+
+
+#include "T_UTILS.H"
+#include "t_utils2.h"
+
+const TInt KDigramNumberOfNonLetters =  3;	// space, -, null
+const TInt KDigramNumberOfLetters =  26 ;
+const TInt KDigramNumberOfChars =  KDigramNumberOfLetters*2+ KDigramNumberOfNonLetters;
+
+/** Used to create randomly generated words using n-grams found in the specified data file.
+	Using n-grams lead to much more realistic words and thus makes it obvious a descriptor
+	is data and not noise.
+	This implementation only supports digrams */
+	
+class CWordNgrams : public CBase, public MRandomWordGenerator
+	{
+	public:
+		HBufC* WordLC();
+		
+	protected: 
+		
+		TBool AddLetter(TDes& aWord);
+		void ConstructL(const TDesC& aFilename, TInt aNgramSize = 2, TBool aUseNarrowChar = ETrue);
+		virtual TChar NextLetter(const TDesC& aWord) = 0;
+		virtual void SetNgram(const TDesC8& aNgram, TUint aNumber) = 0;
+		virtual void SetNgram(const TDesC16& aNgram, TUint aNumber) = 0;
+
+	};
+	
+
+/** Implementation of CWordNgrams which uses digram frequencies (letter pairs)
+	to generate random words */
+class CWordDigrams : public CWordNgrams
+	{
+	public:
+		static CWordDigrams* NewLC(const TDesC& aFilename, TInt64& aRandSeed );
+		virtual ~CWordDigrams();
+		
+	protected: 
+		void ConstructL(const TDesC& aFilename);
+		void SetNgram(const TDesC8& aNgram, TUint aNumber);
+		void SetNgram(const TDesC16& aNgram, TUint aNumber); // empty function
+		TChar NextLetter(const TDesC& aWord);
+
+	private:
+		CWordDigrams(TInt64& aRandSeed);
+		static TInt Index(const TChar c);
+		static TChar Char(TInt i);
+		
+	private:
+		TInt64& iRandSeed;
+		TUint8 iDigrams[KDigramNumberOfChars][KDigramNumberOfChars];
+		TUint16 iSizes[KDigramNumberOfChars];
+	};
+
+
+
+#endif