~ubuntu-branches/ubuntu/raring/sunpinyin/raring

« back to all changes in this revision

Viewing changes to src/lexicon/pytrie_gen.h

  • Committer: Package Import Robot
  • Author(s): YunQiang Su
  • Date: 2012-03-30 15:31:55 UTC
  • mfrom: (1.1.3) (1.2.7 sid)
  • Revision ID: package-import@ubuntu.com-20120330153155-qgls77sogzgtg9zp
Tags: 2.0.3+git20120222-1
* Team upload: git snapshot 20120222.
   - fix breaks if LDFLAGS in environment contains
       multiple words (Closese #646001).
   - rm patches merged to upstream:
       append-os-environ-toenv.patch
       fix-ftbfs-on-sh.patch
       remove-10-candidate-words-limitation.patch
   - refresh disable-lm-dict-compile.patch.
* Bump stardard version to 3.9.3: no modify needed.
* add libsunpinyin3-dbg and python-sunpinyin packages.
* debian/compat to 9, multiarch it.
* rewrite debian/rules with dh 7 format.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    class TWordInfo;
27
27
 
28
28
    union TWordId {
29
 
        unsigned int                        m_all;
30
 
        struct TAnony {                     //Some compiler do not support anonymous defaultly
 
29
        unsigned int m_all;
 
30
        struct TAnony {                     //Some compiler do not support anonymous defaultly
31
31
        #ifdef WORDS_BIGENDIAN
32
 
            unsigned    m_bHide    : 1;
33
 
            unsigned    m_cost     : 5;
34
 
            unsigned    m_csLevel  : 2;
35
 
            unsigned    m_id       : WORD_ID_WIDTH;
 
32
            unsigned m_bHide    : 1;
 
33
            unsigned m_cost     : 5;
 
34
            unsigned m_csLevel  : 2;
 
35
            unsigned m_id       : WORD_ID_WIDTH;
36
36
        #else
37
 
            unsigned    m_id       : WORD_ID_WIDTH;
38
 
            unsigned    m_csLevel  : 2;
39
 
            unsigned    m_cost     : 5;
40
 
            unsigned    m_bHide    : 1;
 
37
            unsigned m_id       : WORD_ID_WIDTH;
 
38
            unsigned m_csLevel  : 2;
 
39
            unsigned m_cost     : 5;
 
40
            unsigned m_bHide    : 1;
41
41
        #endif
42
42
        } anony;
43
43
 
44
 
    public:
45
 
        TWordId() : m_all(0) { }
46
 
        TWordId(const TWordId& b) : m_all(b.m_all) { }
47
 
        TWordId(unsigned id, unsigned cost = 0, unsigned hide = 0, unsigned cslvl = 0)
48
 
            {
49
 
                anony.m_id=id;
50
 
                anony.m_cost=cost;
51
 
                anony.m_bHide= (hide)?1:0;
52
 
                anony.m_csLevel=cslvl;
53
 
            }
54
 
 
55
 
        bool operator< (const TWordId& b) const 
56
 
            { return anony.m_id <  b.anony.m_id; }
57
 
 
58
 
        bool operator==(const TWordId& b) const 
59
 
            { return anony.m_id == b.anony.m_id; }
60
 
 
61
 
        operator unsigned int() const 
62
 
            { return anony.m_id; }
 
44
public:
 
45
        TWordId() : m_all(0) {
 
46
        }
 
47
        TWordId(const TWordId &b) : m_all(b.m_all) {
 
48
        }
 
49
        TWordId(unsigned id,
 
50
                unsigned cost = 0,
 
51
                unsigned hide = 0,
 
52
                unsigned cslvl = 0){
 
53
            anony.m_id = id;
 
54
            anony.m_cost = cost<31? cost: 31;
 
55
            anony.m_bHide = (hide) ? 1 : 0;
 
56
            anony.m_csLevel = cslvl<3? cslvl: 3;
 
57
        }
 
58
 
 
59
        bool operator<(const TWordId& b) const
 
60
        { return anony.m_id < b.anony.m_id; }
 
61
 
 
62
        bool operator==(const TWordId& b) const
 
63
        { return anony.m_id == b.anony.m_id; }
 
64
 
 
65
        operator unsigned int() const
 
66
        { return anony.m_id; }
63
67
    };
64
68
 
65
69
    typedef std::set<TWordId>               CWordSet;
70
74
    typedef std::vector<std::string>        CLexicon;
71
75
 
72
76
    class TWordInfo {
73
 
    public:
74
 
        TWordId                             m_id;
75
 
        double                              m_cost;
76
 
        bool                                m_bSeen;
77
 
 
78
 
        TWordInfo(TWordId id = 0, double cost = 0.0, bool seen=false)
79
 
            : m_id(id), m_cost(cost), m_bSeen(seen)
80
 
            {
81
 
                if (m_id.anony.m_bHide) {
82
 
                    m_bSeen = false;
83
 
                }
84
 
                m_cost = cost + m_id.anony.m_cost;
85
 
            }
86
 
 
87
 
        bool
88
 
        operator< (const TWordInfo& b) const
89
 
            {
90
 
                double fa = (m_bSeen)?(m_cost - 5000.0):(m_cost);
91
 
                double fb = (b.m_bSeen)?(b.m_cost - 5000.0):(b.m_cost);
92
 
                return (fa < fb);
93
 
            }
 
77
public:
 
78
        TWordId m_id;
 
79
        double m_cost;
 
80
        bool m_bSeen;
 
81
 
 
82
        TWordInfo(TWordId id = 0, double cost = 0.0, bool seen = false)
 
83
            : m_id(id), m_cost(cost), m_bSeen(seen){
 
84
            if (m_id.anony.m_bHide) {
 
85
                m_bSeen = false;
 
86
            }
 
87
            m_cost = cost + m_id.anony.m_cost;
 
88
        }
 
89
 
 
90
        bool operator<(const TWordInfo& b) const {
 
91
            double fa = (m_bSeen) ? (m_cost - 5000.0) : (m_cost);
 
92
            double fb = (b.m_bSeen) ? (b.m_cost - 5000.0) : (b.m_cost);
 
93
            return(fa < fb);
 
94
        }
94
95
    };
95
96
 
96
97
    class PNodeSet {
97
 
    public:
 
98
public:
98
99
        PNodeSet(const CNodeSet *pns) : m_pns(pns) { }
99
100
 
100
101
        PNodeSet(const PNodeSet& another) : m_pns(another.m_pns) { }
101
102
 
102
 
        const CNodeSet*
103
 
        operator->(void) { return m_pns; }
 
103
        const CNodeSet*operator->(void) { return m_pns; }
104
104
 
105
 
        const CNodeSet&
106
 
        operator*(void) { return *m_pns; }
 
105
        const CNodeSet&operator*(void) { return *m_pns; }
107
106
 
108
107
        bool
109
 
        operator< (const PNodeSet& another) const;
 
108
        operator<(const PNodeSet& another) const;
110
109
 
111
110
        bool
112
111
        operator==(const PNodeSet& another) const;
113
112
 
114
 
    protected:
 
113
protected:
115
114
        const CNodeSet *    m_pns;
116
115
    };
117
116
 
118
117
    typedef std::map<PNodeSet, TNode*>     CStateMap;
119
118
 
120
119
    class TNode {
121
 
    public:
122
 
        static CNodeList    m_AllNodes;
123
 
    public:
124
 
        bool                m_bExpanded;
125
 
        bool                m_bFullSyllableTransfer;
126
 
        CWordSet            m_WordIdSet;
127
 
        CTrans              m_Trans;
128
 
        CNodeSet            m_cmbNodes;
129
 
    public:
 
120
public:
 
121
        static CNodeList m_AllNodes;
 
122
public:
 
123
        bool m_bExpanded;
 
124
        bool m_bFullSyllableTransfer;
 
125
        CWordSet m_WordIdSet;
 
126
        CTrans m_Trans;
 
127
        CNodeSet m_cmbNodes;
 
128
public:
130
129
        TNode();
131
130
    };
132
131
 
133
132
protected:
134
 
    CStateMap               m_StateMap;
135
 
    TNode                   m_RootNode;
136
 
    CLexicon                m_Lexicon;
 
133
    CStateMap m_StateMap;
 
134
    TNode m_RootNode;
 
135
    CLexicon m_Lexicon;
137
136
 
138
137
public:
139
138
    CPinyinTrieMaker();
149
148
    bool
150
149
    threadNonCompletePinyin(void);
151
150
 
152
 
    void
153
 
    print(FILE* fp, TNode* root, std::string& pinyin);
154
 
 
155
151
    bool
156
152
    write(const char* fileName, CWordEvaluator* psrt, bool revert_endian);
157
153
 
163
159
    insertTransfer(TNode* pnode, unsigned s);
164
160
 
165
161
    TNode*
166
 
    addCombinedTransfers (TNode *pnode, unsigned s, const CNodeSet& nodes);
 
162
    addCombinedTransfers(TNode *pnode, unsigned s, const CNodeSet& nodes);
167
163
 
168
 
    void 
 
164
    void
169
165
    combineInitialTrans(TNode *pnode);
170
166
 
171
167
    void