~ubuntu-branches/ubuntu/quantal/sunpinyin/quantal

« back to all changes in this revision

Viewing changes to src/slm/sim_slm.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:
1
1
/*
2
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 
 * 
 
3
 *
4
4
 * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
5
 
 * 
 
5
 *
6
6
 * The contents of this file are subject to the terms of either the GNU Lesser
7
7
 * General Public License Version 2.1 only ("LGPL") or the Common Development and
8
8
 * Distribution License ("CDDL")(collectively, the "License"). You may not use this
9
9
 * file except in compliance with the License. You can obtain a copy of the CDDL at
10
10
 * http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at
11
 
 * http://www.opensource.org/licenses/lgpl-license.php. See the License for the 
 
11
 * http://www.opensource.org/licenses/lgpl-license.php. See the License for the
12
12
 * specific language governing permissions and limitations under the License. When
13
13
 * distributing the software, include this License Header Notice in each file and
14
14
 * include the full text of the License in the License file as well as the
15
15
 * following notice:
16
 
 * 
 
16
 *
17
17
 * NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
18
18
 * (CDDL)
19
19
 * For Covered Software in this distribution, this License shall be governed by the
21
21
 * Any litigation relating to this License shall be subject to the jurisdiction of
22
22
 * the Federal Courts of the Northern District of California and the state courts
23
23
 * of the State of California, with venue lying in Santa Clara County, California.
24
 
 * 
 
24
 *
25
25
 * Contributor(s):
26
 
 * 
 
26
 *
27
27
 * If you wish your version of this file to be governed by only the CDDL or only
28
28
 * the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to
29
29
 * include this software in this distribution under the [CDDL or LGPL Version 2.1]
32
32
 * Version 2.1, or to extend the choice of license to its licensees as provided
33
33
 * above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL
34
34
 * Version 2 license, then the option applies only if the new code is made subject
35
 
 * to such option by the copyright holder. 
 
35
 * to such option by the copyright holder.
36
36
 */
37
37
 
38
38
#ifndef _SIM_SLM_H
52
52
    struct TLeaf {
53
53
        TSIMWordId id;
54
54
        union {
55
 
                FREQ_TYPE freq; //for builder, not for use
56
 
                PR_TYPE pr;
 
55
            FREQ_TYPE freq;     //for builder, not for use
 
56
            PR_TYPE pr;
57
57
        };
58
 
    public:
59
 
        TLeaf(TSIMWordId theId=0, FREQ_TYPE fr=0) : id(theId), freq(fr)
60
 
            { }
61
 
        bool operator< (const TLeaf & r) const
62
 
            { return id <  r.id; }
63
 
        bool operator> (const TLeaf & r) const
64
 
            { return id >  r.id; }
 
58
public:
 
59
        TLeaf(TSIMWordId theId = 0, FREQ_TYPE fr = 0) : id(theId), freq(fr)
 
60
        { }
 
61
        bool operator<(const TLeaf & r) const
 
62
        { return id < r.id; }
 
63
        bool operator>(const TLeaf & r) const
 
64
        { return id > r.id; }
65
65
        bool operator==(const TLeaf & r) const
66
 
            { return id == r.id; }
 
66
        { return id == r.id; }
67
67
    };
68
68
 
69
69
    struct TNode : public TLeaf {
70
70
        int child;
71
71
        PR_TYPE bow;
72
 
    public:
73
 
        TNode(TSIMWordId theId=0, int ch=0, FREQ_TYPE fr=0, PR_TYPE theBOW=0.0)
 
72
public:
 
73
        TNode(TSIMWordId theId = 0,
 
74
              int ch = 0,
 
75
              FREQ_TYPE fr = 0,
 
76
              PR_TYPE theBOW = 0.0)
74
77
            : TLeaf(theId, fr), child(ch), bow(theBOW)
75
 
            { }
 
78
        { }
76
79
    };
77
80
 
78
81
public:
79
82
    bool Load(const char* fname);
80
83
    void Free();
81
84
 
82
 
    unsigned
83
 
    isUseLogPr() const
 
85
    unsigned isUseLogPr() const
84
86
    { return bUseLogPr; }
85
87
 
86
88
    double getPr(int n, TSIMWordId* hw);
94
96
 
95
97
protected:
96
98
    int N;
97
 
    unsigned bUseLogPr;
98
99
    int* sz;
99
100
    void** level;
100
 
 
 
101
    unsigned bUseLogPr;
101
102
};
102
103
 
103
104
 
104
105
template<class _NodeT_>
105
 
_NodeT_* binary_find(_NodeT_* base, int h, int t, const _NodeT_ & val)
106
 
{
 
106
_NodeT_* binary_find(_NodeT_* base, int h, int t, const _NodeT_ & val){
107
107
    while (h < t) {
108
 
        int m = (h+t)/2;
109
 
        _NodeT_* pm = base+m;
 
108
        int m = (h + t) / 2;
 
109
        _NodeT_* pm = base + m;
110
110
        if (*pm < val)
111
 
            h = m+1;
 
111
            h = m + 1;
112
112
        else if (*pm == val)
113
113
            return pm;
114
114
        else
118
118
}
119
119
 
120
120
template <class _NodeT_>
121
 
_NodeT_* binary_find_id(_NodeT_ *ph, _NodeT_* pt, TSIMWordId id)
122
 
{
 
121
_NodeT_* binary_find_id(_NodeT_ *ph, _NodeT_* pt, TSIMWordId id){
123
122
    int h = 0, t = pt - ph;
124
123
    while (h < t) {
125
 
        int m = (h+t)/2;
 
124
        int m = (h + t) / 2;
126
125
        _NodeT_ * pm = ph + m;
127
126
        if (pm->id == id)
128
127
            return pm;
129
128
        else if (pm->id < id)
130
 
            h = m+1;
 
129
            h = m + 1;
131
130
        else
132
131
            t = m;
133
132
    }