summaryrefslogtreecommitdiff
path: root/inputmethods/dasher/PPMLanguageModel.h
Side-by-side diff
Diffstat (limited to 'inputmethods/dasher/PPMLanguageModel.h') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/dasher/PPMLanguageModel.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/inputmethods/dasher/PPMLanguageModel.h b/inputmethods/dasher/PPMLanguageModel.h
new file mode 100644
index 0000000..bd860b8
--- a/dev/null
+++ b/inputmethods/dasher/PPMLanguageModel.h
@@ -0,0 +1,122 @@
+// PPMLanguageModel.h
+//
+/////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 1999-2002 David Ward
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __PPMLanguageModel_h__
+#define __PPMLanguageModel_h__
+
+#include "NoClones.h"
+#include "MSVC_Unannoy.h"
+#include <vector>
+#include <stdio.h>
+
+#include "LanguageModel.h"
+
+static char dumpTrieStr[40000];
+const int MAX_ORDER = 5;
+const int maxcont =200;
+
+namespace Dasher {class CPPMLanguageModel;}
+class Dasher::CPPMLanguageModel : public Dasher::CLanguageModel, private NoClones
+{
+public:
+ CPPMLanguageModel(CAlphabet *_alphabet, int _normalization);
+ ~CPPMLanguageModel();
+
+ class CPPMnode {
+ public:
+ CPPMnode* find_symbol(int sym);
+ CPPMnode* add_symbol_to_node(int sym,int *update);
+ CPPMnode* child;
+ CPPMnode* next;
+ CPPMnode* vine;
+ short int count;
+ const short int symbol;
+ CPPMnode(int sym);
+ };
+
+ class CPPMContext : public CContext {
+ public:
+ CPPMContext(CPPMContext const &input) {head = input.head; order= input.order;}
+ CPPMContext(CPPMnode* _head=0, int _order=0) : head(_head),order(_order) {};
+ ~CPPMContext() {};
+ void dump();
+ CPPMnode* head;
+ int order;
+ };
+
+ void ReleaseContext(CContext*);
+ CContext* GetRootContext();
+ inline CContext* CloneContext(CContext*);
+ void EnterSymbol(CContext* context, modelchar Symbol);
+ //inline bool GetProbs(CContext*,std::vector<symbol> &newchars,std::vector<unsigned int> &groups,std::vector<unsigned int> &probs,double addprob);
+ bool GetProbs(CContext*, std::vector<unsigned int> &Probs, double AddProb);
+
+ void LearnSymbol(CContext* Context, modelchar Symbol);
+ void dump();
+
+private:
+ CPPMContext *m_rootcontext;
+ CPPMnode *root;
+ void AddSymbol(CPPMContext& context,int symbol);
+ void dumpSymbol(int symbol);
+ void dumpString( char *str, int pos, int len );
+ void dumpTrie( CPPMnode *t, int d );
+
+
+
+};
+
+////////////////////////////////////////////////////////////////////////
+// Inline functions
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+
+inline CPPMLanguageModel::CPPMnode::CPPMnode(int sym) : symbol(sym)
+{
+ child=next=vine=0;
+ count=1;
+}
+
+///////////////////////////////////////////////////////////////////
+
+inline void CPPMLanguageModel::CPPMContext::dump()
+ // diagnostic output
+{
+ // TODO uncomment this when headers sorted out
+ //dchar debug[128];
+ //Usprintf(debug,TEXT("head %x order %d\n"),head,order);
+ //DebugOutput(debug);
+}
+
+///////////////////////////////////////////////////////////////////
+
+inline CContext* CPPMLanguageModel::GetRootContext()
+{
+ CPPMContext * nc = new CPPMLanguageModel::CPPMContext(*m_rootcontext);
+ CContext *cont=static_cast<CContext *> (nc);
+ return cont;
+}
+
+///////////////////////////////////////////////////////////////////
+
+inline CContext* CPPMLanguageModel::CloneContext(CContext *copythis)
+{
+ CPPMContext *ppmcontext=static_cast<CPPMContext *> (copythis);
+ CPPMContext * nc = new CPPMLanguageModel::CPPMContext(*ppmcontext);
+ return static_cast<CContext *> (nc);
+}
+
+///////////////////////////////////////////////////////////////////
+
+inline void CPPMLanguageModel::ReleaseContext(CContext *release)
+{
+ delete release;
+}
+
+#endif /* #ifndef __PPMLanguageModel_H__ */