OSDN Git Service

dfdab57907bf3da10766fb3fbe862440ff5758ec
[nmecab/NMeCabRepo2.git] / src / LibNMeCab / Core / CharInfo.cs
1 //  MeCab -- Yet Another Part-of-Speech and Morphological Analyzer
2 //
3 //  Copyright(C) 2001-2006 Taku Kudo <taku@chasen.org>
4 //  Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation
5 using System;
6 using System.Collections.Generic;
7 using System.Text;
8
9 namespace NMeCab.Core
10 {
11     public struct CharInfo
12     {
13         #region  Const/Field/Property
14
15         private readonly uint bits;
16
17         /// <summary>
18         /// 互換カテゴリ
19         /// </summary>
20         public uint Type
21         {
22             get { return BitUtils.GetBitField(this.bits, 0, 18); }
23         }
24
25         /// <summary>
26         /// デフォルトカテゴリ
27         /// </summary>
28         public uint DefaultType
29         {
30             get { return BitUtils.GetBitField(this.bits, 18, 8); }
31         }
32
33         /// <summary>
34         /// 長さ: 未知語の候補生成方法
35         /// </summary>
36         /// <value>
37         /// 1: 1文字までの文字列を未知語とする
38         /// 2: 2文字までの文字列を未知語とする
39         /// ...
40         /// n: n文字までの文字列を未知語とする
41         /// </value>
42         public uint Length
43         {
44             get { return BitUtils.GetBitField(this.bits, 18 + 8, 4); }
45         }
46
47         /// <summary>
48         /// グルーピング: 未知語の候補生成方法
49         /// </summary>
50         /// <value>
51         /// true: 同じ字種でまとめる
52         /// false: 同じ字種でまとめない
53         /// </value>
54         public bool Group
55         {
56             get { return BitUtils.GetFlag(this.bits, 18 + 8 + 4); }
57         }
58
59         /// <summary>
60         /// 動作タイミング
61         /// そのカテゴリにおいて, いつ未知語処理を動かすか
62         /// </summary>
63         /// <value>
64         /// true: 常に未知語処理を動かす
65         /// false: 既知語がある場合は, 未知語処理を動作させない
66         /// </value>
67         public bool Invoke
68         {
69             get { return BitUtils.GetFlag(this.bits, 18 + 8 + 4 + 1); }
70         }
71
72         #endregion
73
74         #region Constractor
75
76         public CharInfo(uint bits)
77         {
78             this.bits = bits;
79         }
80
81         #endregion
82
83         #region Method
84
85         /// <summary>
86         /// 互換カテゴリ判定
87         /// </summary>
88         /// <param name="c"></param>
89         /// <returns></returns>
90         public bool IsKindOf(CharInfo c)
91         {
92             return BitUtils.CompareAnd(this.bits, c.bits, 0, 18);
93         }
94
95         public override string ToString()
96         {
97             return string.Format("[Type:{0}][DefaultType:{1}][Length:{2}][Group:{3}][Invoke:{4}]",
98                                  this.Type,
99                                  this.DefaultType,
100                                  this.Length,
101                                  this.Group,
102                                  this.Invoke);
103         }
104
105         #endregion
106     }
107 }