41
40
/// to the appropriate alphabet file, with sizes given by the
42
41
/// language model.
44
class CAlphabetManager : public CNodeManager {
47
CAlphabetManager(CDasherInterfaceBase *pInterface, CNodeCreationManager *pNCManager, CLanguageModel *pLanguageModel, CLanguageModel::Context iLearnContext);
50
/// Does nothing - alphabet manager isn't reference counted.
53
virtual void Ref() {};
56
/// Does nothing - alphabet manager isn't reference counted.
59
virtual void Unref() {};
43
class CAlphabetManager {
46
CAlphabetManager(CDasherInterfaceBase *pInterface, CNodeCreationManager *pNCManager, CLanguageModel *pLanguageModel);
50
class CAlphNode : public CDasherNode {
52
int mgrId() {return 0;}
53
CAlphNode(CDasherNode *pParent, int iLbnd, int iHbnd, CDasherNode::SDisplayInfo *pDispInfo, CAlphabetManager *pMgr);
54
CLanguageModel::Context iContext;
56
/// Delete any storage alocated for this node
59
virtual CLanguageModel::Context CloneAlphContext(CLanguageModel *pLanguageModel);
60
CDasherNode *RebuildParent(int iNewOffset);
61
///Have to call this from CAlphabetManager, and from CGroupNode on a _different_ CAlphNode, hence public...
62
virtual std::vector<unsigned int> *GetProbInfo();
63
virtual int ExpectedNumChildren();
64
CAlphabetManager *m_pMgr;
65
virtual CDasherNode *RebuildSymbol(CAlphNode *pParent, symbol iSymbol, unsigned int iLbnd, unsigned int iHbnd)=0;
66
virtual CGroupNode *RebuildGroup(CAlphNode *pParent, SGroupInfo *pInfo, unsigned int iLbnd, unsigned int iHbnd)=0;
68
std::vector<unsigned int> *m_pProbInfo;
70
class CSymbolNode : public CAlphNode {
72
CSymbolNode(CDasherNode *pParent, int iLbnd, int iHbnd, CDasherNode::SDisplayInfo *pDispInfo, CAlphabetManager *pMgr, symbol iSymbol);
75
/// Provide children for the supplied node
78
virtual void PopulateChildren();
79
virtual CDasherNode *RebuildParent();
80
virtual void Output(Dasher::VECTOR_SYMBOL_PROB* pAdded, int iNormalization);
83
virtual void SetFlag(int iFlag, bool bValue);
85
virtual bool GameSearchNode(std::string strTargetUtf8Char);
86
virtual void GetContext(CDasherInterfaceBase *pInterface, std::vector<symbol> &vContextSymbols, int iOffset, int iLength);
87
virtual symbol GetAlphSymbol();
89
virtual CDasherNode *RebuildSymbol(CAlphNode *pParent, symbol iSymbol, unsigned int iLbnd, unsigned int iHbnd);
90
virtual CGroupNode *RebuildGroup(CAlphNode *pParent, SGroupInfo *pInfo, unsigned int iLbnd, unsigned int iHbnd);
93
class CGroupNode : public CAlphNode {
95
CGroupNode(CDasherNode *pParent, int iLbnd, int iHbnd, CDasherNode::SDisplayInfo *pDispInfo, CAlphabetManager *pMgr, SGroupInfo *pGroup);
98
/// Provide children for the supplied node
100
virtual CDasherNode *RebuildParent();
101
virtual void PopulateChildren();
102
virtual int ExpectedNumChildren();
103
virtual bool GameSearchNode(std::string strTargetUtf8Char);
104
virtual CDasherNode *RebuildSymbol(CAlphNode *pParent, symbol iSymbol, unsigned int iLbnd, unsigned int iHbnd);
105
virtual CGroupNode *RebuildGroup(CAlphNode *pParent, SGroupInfo *pInfo, unsigned int iLbnd, unsigned int iHbnd);
106
std::vector<unsigned int> *GetProbInfo();
108
SGroupInfo *m_pGroup;
62
113
/// Get a new root node owned by this manager
65
virtual CDasherNode *GetRoot(CDasherNode *pParent, int iLower, int iUpper, void *pUserData);
68
/// Provide children for the supplied node
71
virtual void PopulateChildren( CDasherNode *pNode );
72
void PopulateChildrenWithSymbol( CDasherNode *pNode, int iExistingSymbol, CDasherNode *pExistingChild );
75
/// Delete any storage alocated for this node
78
virtual void ClearNode( CDasherNode *pNode );
80
virtual void Output( CDasherNode *pNode, Dasher::VECTOR_SYMBOL_PROB* pAdded, int iNormalization);
81
virtual void Undo( CDasherNode *pNode );
83
virtual CDasherNode *RebuildParent(CDasherNode *pNode);
85
virtual void SetFlag(CDasherNode *pNode, int iFlag, bool bValue);
93
struct SAlphabetData {
96
CLanguageModel *pLanguageModel;
97
CLanguageModel::Context iContext;
105
void BuildContext(std::string strContext, bool bRoot, CLanguageModel::Context &oContext, symbol &iSymbol);
107
void RecursiveIterateGroup(CDasherNode *pParent, SGroupInfo *pInfo, std::vector<symbol> *pSymbols, std::vector<unsigned int> *pCProb, int iMin, int iMax, symbol iExistingSymbol, CDasherNode *pExistingChild);
109
CDasherNode *CreateGroupNode(CDasherNode *pParent, SGroupInfo *pInfo, std::vector<unsigned int> *pCProb, unsigned int iStart, unsigned int iEnd, unsigned int iMin, unsigned int iMax);
110
CDasherNode *CreateSymbolNode(CDasherNode *pParent, symbol iSymbol, std::vector<unsigned int> *pCProb, unsigned int iStart, unsigned int iEnd, unsigned int iMin, unsigned int iMax, symbol iExistingSymbol, CDasherNode *pExistingChild);
114
/// bEnteredLast - true if this "root" node should be considered as entering the preceding symbol
115
/// Offset is the index of the character which _child_ nodes (i.e. between which this root allows selection)
116
/// will enter. (Also used to build context for preceding characters.)
117
virtual CAlphNode *GetRoot(CDasherNode *pParent, int iLower, int iUpper, bool bEnteredLast, int iOffset);
121
/// Factory method for CAlphNode construction, so subclasses can override.
123
virtual CSymbolNode *makeSymbol(CDasherNode *pParent, int iLbnd, int iHbnd, CDasherNode::SDisplayInfo *pDispInfo, symbol iSymbol);
124
virtual CGroupNode *makeGroup(CDasherNode *pParent, int iLbnd, int iHbnd, CDasherNode::SDisplayInfo *pDispInfo, SGroupInfo *pGroup);
126
virtual CDasherNode *CreateSymbolNode(CAlphNode *pParent, symbol iSymbol, unsigned int iLbnd, unsigned int iHbnd);
127
virtual CLanguageModel::Context CreateSymbolContext(CAlphNode *pParent, symbol iSymbol);
128
virtual CGroupNode *CreateGroupNode(CAlphNode *pParent, SGroupInfo *pInfo, unsigned int iLbnd, unsigned int iHbnd);
112
130
CLanguageModel *m_pLanguageModel;
113
131
CNodeCreationManager *m_pNCManager;
135
void IterateChildGroups(CAlphNode *pParent, SGroupInfo *pParentGroup, CAlphNode *buildAround);
114
137
CLanguageModel::Context m_iLearnContext;
115
138
CDasherInterfaceBase *m_pInterface;