Logo Search packages:      
Sourcecode: yaskkserv version File versions  Download package

SkkJisyo Class Reference

#include <skk_jisyo.hpp>

List of all members.


Detailed Description

SKK 辞書を扱うクラスです。.

メモ

辞書生成メソッドではバッファリングによる高速化を期待するため I/O に cstdio を使用します。見出しに対するエントリを取得する Search() メソッ ドではバッファリングする必要がないので mmap を使用します。

以上のように、本クラスでは潤沢なリソースを要求します。

辞書について

yaskkserv では辞書を SKK の辞書から専用形式に変換して使用します。変 換は内部的に 2 段階ありますが、一般にユーザが 1 段階目の辞書に触れる ことはありません。

1 段階目

2 段階目

変換の内容は以下の通りです。

特殊エントリ

先頭一文字が「ひらがな(0xa4)」または「ASCII(0x21-0x7e)」でない文字は 特殊エントリとして扱われます。

structure 辞書の構造

 +---------------+------------------------------------+ <-- SEEK_TOP (STATE_NORMAL)
 |               | normal                             |
 |               | 通常エントリ                       |
 |               | (昇順ソート。存在しない場合もある) | <-- SEEK_BOTTOM (STATE_NORMAL)
 | dictionary    +------------------------------------+ <-- SEEK_TOP (STATE_SPECIAL)
 |               | special                            |
 |               | 特殊エントリ                       |
 |               | (昇順ソート。存在しない場合もある) | <-- SEEK_BOTTOM (STATE_SPECIAL)
 +---------------+------------------------------------+
 |               | terminator and alignment           |
 | index data    | 1 - 4 バイトの 0 ターミネート領域  |
 |               +------------------------------------+ <-- インデックスデータオフセット
 | (1 段階目では | struct IndexDataHeader             |
 |  存在しない)  |              +                     |
 |               | index data  インデックスデータ     |
 +---------------+------------------------------------+
 |               | terminator and alignment           |
 |               | 1 - 4 バイトの 0 ターミネート領域  |
 | information   +------------------------------------+ <--- ファイルサイズ - sizeof(Information)
 |               |                                    |
 |               | struct Information 辞書情報        |
 |               |                                    |
 +---------------+------------------------------------+

辞書情報


struct Information

 object[0]  : ビットフラグ
 object[1]  : リザーブ
 object[2]  : リザーブ
 object[3]  : リザーブ
 object[4]  : リザーブ
 object[5]  : リザーブ
 object[6]  : インデックスデータへのオフセット
 object[7]  : インデックスデータサイズ
 object[8]  : special 行数
 object[9]  : special サイズ
 object[10] : normal 行数
 object[11] : normal サイズ
 object[12] : ブロックアラインメントサイズ
 object[13] : バージョン
 object[14] : object サイズ
 object[15] : identifier

インデックスデータについて

インデックスデータは以下の要素から構成されます。(参考数値は 2005年10 月12 日(水) あたりの SKK-JISYO.total+zipcode の値です。)

Block/BlockShort の可変長配列と文字列格納領域は、通常エントリと特殊 エントリで共用します。特殊エントリのものは通常エントリの後に追加され ます。 FixedArray は通常エントリだけが使用します。

 +----------------------------------------------------+
 |                                                    |
 |  struct IndexDataHeader                            |
 |                                                    |
 |          header[0]  : ビットフラグ                 |
 |          header[1]  : header サイズ                |
 |          header[2]  : ブロックサイズ               |
 |          header[3]  : normal_block_length          |
 |          header[4]  : special_block_length         |
 |          header[5]  : normal_string_length         |
 |          header[6]  : special_string_length        |
 |          header[7]  : 特殊エントリへのオフセット   |
 |                                                    |
 +----------------------------------------------------+
 |                                                    |
 |  FixedArray fixed_array[256]                       |
 |                                                    |
 |     通常エントリの探索ヒント情報です。             |
 |                                                    |
 +----------------------------------------------------+
 |                                                    |
 |  Block block[block_length]                         |
 |  BlockShort block[block_length]                    |
 |                                                    |
 |     ブロック情報を保持します。                     |
 |     アラインメントされた辞書では BlockShort を     |
 |     使用することでサイズを 1/4 にすることが        |
 |     できます。                                     |
 |                                                    |
 +----------------------------------------------------+
 |                                                    |
 |  char string[string_length]                        |
 |                                                    |
 |     可変長文字列です。終端コードとしてスペースを   |
 |     使用します。つまり "AA BBB CCCC DDDDD " と     |
 |     いった文字列になります。                       |
 |                                                    |
 |     文字列は block 配列と同じ数(block_length 個)   |
 |     存在します。                                   |
 |                                                    |
 |     この文字列は対応するブロックの最後の見出し     |
 |     です。これによりブロック内に探索文字列が       |
 |     存在するかどうかを調べます。                   |
 |                                                    |
 +----------------------------------------------------+

Definition at line 199 of file skk_jisyo.hpp.


Public Types

enum  { IDENTIFIER = 0x7fedc000 }
enum  JisyoType { JISYO_TYPE_UNKNOWN, JISYO_TYPE_SKK_RAW, JISYO_TYPE_CLASS_SKK_JISYO, JISYO_TYPE_CLASS_SKK_DICTIONARY }
enum  SeekPosition {
  SEEK_POSITION_TOP, SEEK_POSITION_BOTTOM, SEEK_POSITION_NEXT, SEEK_POSITION_PREVIOUS,
  SEEK_POSITION_BEGINNING_OF_LINE
}
enum  State { STATE_NORMAL, STATE_SPECIAL, STATE_LENGTH }

Public Member Functions

bool close ()
bool createDictionaryIndex (int block_size, bool alignment_flag=false, bool block_short_flag=false)
 辞書インデックスをオブジェクト内に生成します。生成に失敗した場合は偽を返します。
bool createDictionaryIndexAndDictionaryForClassSkkJisyo (int block_size, const char *filename_destination, bool alignment_flag=false, bool block_short_flag=false)
 辞書インデックスをオブジェクト内に生成し、 filename_destination が指定されていれば class SkkJisyo 形式の辞書を書き出します。変換に失敗した場合は偽を返します。
char * getBuffer ()
bool getDictionaryIndexInformation (FixedArray *&fixed_array, Block *&block, BlockShort *&block_short, char *&string, int &normal_block_length, int &normal_string_size, int &special_block_length, int &special_string_size)
 辞書インデックスの情報を得ます。取得に失敗した場合は偽を返し、 DEBUG_ASSERT が有効ならばアサートします。
int getFixedArrayIndex ()
const char * getHenkanmojiretsuPointer ()
 index が行頭位置にあるとして、「変換文字列」のポインタを返します。
int getHenkanmojiretsuSize ()
 index が行頭位置にあるとして、「変換文字列」のサイズを返します。サイズに改行文字は含みません。
int getIndex ()
void getInformation (Information &information)
int getLineSize ()
 index が行頭位置にあるとして、 1 行のサイズを返します。サイズに改行文字は含みません。
char * getMidasiPointer ()
int getMidasiSize ()
State getState ()
bool open (const char *filename)
 辞書をオープンします。正常にオープンできれば真を返します。失敗した場合は偽を返し、 DEBUG_ASSERT が有効ならばアサートします。
bool search (const char *midasi)
 指定文字を探索します。本メソッドは内部でステートを変更することに注意が必要です。「見出し」はスペースでターミネートされます。見付からなければ偽を返します。
bool seek (SeekPosition position)
 指定位置にシークします。バッファ外をアクセスしようとした場合に偽を返します。
void setIndex (int index)
void setState (State state)

Static Public Member Functions

static bool createDictionaryForClassSkkDictionary (const char *filename_source, const char *filename_destination, int block_size, bool alignment_flag=false, bool block_short_flag=false)
 SKK 辞書を block_size の class SkkDictionary 形式の辞書へ変換します。変換に失敗した場合は偽を返します。.
static bool createDictionaryForClassSkkJisyo (const char *filename_source, const char *filename_destination)
 SKK 辞書を class SkkJisyo 形式の辞書へ変換します。変換に失敗した場合は偽を返します。.
static bool getIndexDataHeader (const char *filename, IndexDataHeader &index_data_header)
 指定した辞書ファイルから IndexDataHeader を取得します。取得に失敗した場合は偽を返します。
static bool getInformation (const char *filename, Information &information)
 指定した辞書ファイルから Information を取得します。取得に失敗した場合は偽を返します。
static bool getJisyoType (const char *filename, JisyoType &type)

Private Member Functions

SkkJisyooperator= (SkkJisyo &source)
 SkkJisyo (SkkJisyo &source)

Static Private Member Functions

static bool append_information (FILE *file, int block_alignment_size, int normal_size, int normal_lines, int special_size, int special_lines, int index_data_size, int index_data_offset)
static bool append_terminator (FILE *file)
static bool create_dictionary_for_class_skk_jisyo (const char *filename_destination, const char *buffer, int filesize, int okuri_ari_index, int okuri_nasi_index)
static bool create_dictionary_for_class_skk_jisyo_sort_and_write (const char *filename_destination, const char *filename_normal, const char *filename_special, int okuri_ari_lines, int okuri_nasi_lines, int special_okuri_nasi_lines)
static bool create_dictionary_for_class_skk_jisyo_sort_core (FILE *file, char *buffer, int filesize, int lines)
static bool create_dictionary_for_class_skk_jisyo_write_temporary (const char *buffer, int filesize, int normal_fd, int special_fd, int okuri_ari_index, int okuri_nasi_index, int &okuri_ari_lines, int &okuri_nasi_lines, int &special_okuri_nasi_lines)
static bool create_dictionary_for_class_skk_jisyo_write_temporary_encoded (FILE *file, const char *buffer, int index, int filesize, const char *line_buffer, int encoded_size)
static bool create_dictionary_for_class_skk_jisyo_write_temporary_raw (FILE *file, const char *buffer, int index, int line_size)
static bool create_dictionary_index_and_dictionary_for_class_skk_jisyo_normal (SkkJisyo &object, FILE *aligned_block_dictionary, FixedArray *fixed_array, Block *block, BlockShort *block_short, char *string, int &block_length, int &string_size, int block_size_maximum, bool alignment_flag)
 辞書インデックスを取得します。同時にアラインメントされた辞書を作成できます。取得に失敗した場合は偽を返します。このとき DEBUG_ASSERT が有効ならばアサートします。
static bool create_dictionary_index_and_dictionary_for_class_skk_jisyo_normal_core (SkkJisyo &object, FILE *aligned_block_dictionary, FixedArray *fixed_array, Block *block, BlockShort *block_short, char *string, int *count_work, int &string_size, int block_size_maximum, bool alignment_flag, int line, int top_line, int index, int top_offset, int top_fixed_array, int block_length)
static bool create_dictionary_index_and_dictionary_for_class_skk_jisyo_special (SkkJisyo &object, FILE *aligned_block_dictionary, Block *block, BlockShort *block_short, char *string, int &block_length, int &string_size, int block_size_maximum, bool alignment_flag)
static bool create_dictionary_index_and_dictionary_for_class_skk_jisyo_special_core (SkkJisyo &object, FILE *aligned_block_dictionary, Block *block, BlockShort *block_short, char *string, int &string_size, int block_size_maximum, bool alignment_flag, int line, int top_line, int index, int top_offset, int block_length, int top_file_offset)
static bool get_index (const char *buffer, int filesize, int &okuri_ari_index, int &okuri_nasi_index)
 okuri_ari_index と okuri_nasi_index を求めます。失敗した場合は偽を返します。

Private Attributes

Block * block_
BlockShort * block_short_
char * buffer_table_ [STATE_LENGTH]
char * filename_buffer_
FixedArray * fixed_array_
int index_table_ [STATE_LENGTH]
Information information_
SkkMmap * mmap_
int normal_block_length_
int normal_string_size_
bool open_failure_flag_
int size_table_ [STATE_LENGTH]
int special_block_length_
int special_string_size_
State state_
char * string_

Classes

struct  ArrayInt32
 array[0] は常にビットフラグを示すことに注意が必要です。 More...
struct  Block
struct  BlockShort
struct  FixedArray
struct  IndexDataHeader
struct  Information

The documentation for this class was generated from the following file:

Generated by  Doxygen 1.6.0   Back to index