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

« back to all changes in this revision

Viewing changes to src/slm/ids2ngram/idngram.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_IDNGRAM_H
44
44
template<int N>
45
45
class CSIM_Idngram {
46
46
public:
47
 
        TSIMWordId ids[N];
 
47
    TSIMWordId ids[N];
48
48
public:
49
 
        CSIM_Idngram()
50
 
                { for (int i=0; i<N; ++i) ids[i] = 0; }
51
 
        CSIM_Idngram & operator= (const CSIM_Idngram& r)
52
 
                {
53
 
                        for (int i=0; i<N; ++i)
54
 
                                ids[i] = r.ids[i];
55
 
                        return *this;
56
 
                }
57
 
        bool operator< (const CSIM_Idngram& r) const
58
 
                {
59
 
                        for (int i=0; i<N; ++i) {
60
 
                                if (ids[i] < r.ids[i])
61
 
                                         return true;
62
 
                                else if (ids[i] > r.ids[i])
63
 
                                        return false;
64
 
                        }
65
 
                        return false;
66
 
                }
67
 
 
68
 
        bool operator> (const CSIM_Idngram& r) const
69
 
        {
70
 
                        for (int i=0; i<N; ++i) {
71
 
                                if (ids[i] > r.ids[i])
72
 
                                        return true;
73
 
                                else if (ids[i] < r.ids[i])
74
 
                                        return false;
75
 
                        }
76
 
                        return false;
77
 
        }
78
 
 
79
 
        bool operator==(const CSIM_Idngram& r) const
80
 
        {
81
 
                        for (int i=0; i<N; ++i)
82
 
                                if (ids[i] != r.ids[i]) return false;
83
 
                        return true;
84
 
        }
 
49
    CSIM_Idngram()
 
50
    { for (int i = 0; i < N; ++i) ids[i] = 0; }
 
51
    CSIM_Idngram & operator=(const CSIM_Idngram& r){
 
52
        for (int i = 0; i < N; ++i)
 
53
            ids[i] = r.ids[i];
 
54
        return *this;
 
55
    }
 
56
    bool operator<(const CSIM_Idngram& r) const {
 
57
        for (int i = 0; i < N; ++i) {
 
58
            if (ids[i] < r.ids[i])
 
59
                return true;
 
60
            else if (ids[i] > r.ids[i])
 
61
                return false;
 
62
        }
 
63
        return false;
 
64
    }
 
65
 
 
66
    bool operator>(const CSIM_Idngram& r) const {
 
67
        for (int i = 0; i < N; ++i) {
 
68
            if (ids[i] > r.ids[i])
 
69
                return true;
 
70
            else if (ids[i] < r.ids[i])
 
71
                return false;
 
72
        }
 
73
        return false;
 
74
    }
 
75
 
 
76
    bool operator==(const CSIM_Idngram& r) const {
 
77
        for (int i = 0; i < N; ++i)
 
78
            if (ids[i] != r.ids[i]) return false;
 
79
        return true;
 
80
    }
85
81
};
86
82
 
87
83
 
88
84
template<int N>
89
85
class CSIM_IdngramFreq : public CSIM_Idngram<N> {
90
86
public:
91
 
        CSIM_IdngramFreq()
92
 
                : CSIM_Idngram<N>(), freq(0) { }
93
 
        CSIM_IdngramFreq& operator= (const CSIM_IdngramFreq& r)
94
 
                {
95
 
                        for (int i=0; i<N; ++i)
96
 
                                this->ids[i] = r.ids[i];
97
 
                        freq = r.freq;
98
 
                        return *this;
99
 
                }
100
 
        bool read(FILE *fp, size_t& start_offset, size_t last_offset)
101
 
                {
102
 
                        if (start_offset + size() <= last_offset) {
103
 
                                fseek(fp, start_offset, SEEK_SET);
104
 
                                if (fread(this->ids, sizeof(TSIMWordId), N, fp) == N && fread(&freq, sizeof(unsigned int), 1, fp)  == 1) {
105
 
                                        start_offset += size();
106
 
                                        return true;
107
 
                                }
108
 
                        }
109
 
                        return false;
110
 
                }
 
87
    CSIM_IdngramFreq()
 
88
        : CSIM_Idngram<N>(), freq(0) { }
 
89
    CSIM_IdngramFreq& operator=(const CSIM_IdngramFreq& r){
 
90
        for (int i = 0; i < N; ++i)
 
91
            this->ids[i] = r.ids[i];
 
92
        freq = r.freq;
 
93
        return *this;
 
94
    }
 
95
    bool read(FILE *fp, size_t& start_offset, size_t last_offset){
 
96
        if (start_offset + size() <= last_offset) {
 
97
            fseek(fp, start_offset, SEEK_SET);
 
98
            if (fread(this->ids, sizeof(TSIMWordId), N,
 
99
                      fp) == N &&
 
100
                fread(&freq, sizeof(unsigned int), 1, fp) == 1) {
 
101
                start_offset += size();
 
102
                return true;
 
103
            }
 
104
        }
 
105
        return false;
 
106
    }
111
107
 
112
108
protected:
113
 
        size_t size() { return N*sizeof(TSIMWordId) + sizeof(unsigned int); }
 
109
    size_t size() { return N * sizeof(TSIMWordId) + sizeof(unsigned int); }
114
110
 
115
111
public:
116
 
        unsigned int freq;
 
112
    unsigned int freq;
117
113
};
118
114
 
119
115
#endif