blob: 0a1c16caab84b10fdedadf08647a9e1032008d84 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/*
* Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
* Contact: http://www.qt-project.org/legal
* 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
|