summaryrefslogtreecommitdiffstats
path: root/src/storage/table_info.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/storage/table_info.cpp')
-rw-r--r--src/storage/table_info.cpp282
1 files changed, 0 insertions, 282 deletions
diff --git a/src/storage/table_info.cpp b/src/storage/table_info.cpp
deleted file mode 100644
index da240dc..0000000
--- a/src/storage/table_info.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * libzhuyin
- * Library to deal with zhuyin.
- *
- * Copyright (C) 2013 Peng Wu <alexepico@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "table_info.h"
-#include <stdio.h>
-#include <assert.h>
-#include <string.h>
-#include <locale.h>
-
-using namespace zhuyin;
-
-
-static const pinyin_table_info_t reserved_tables[] = {
- {RESERVED, NULL, NULL, NULL, NOT_USED},
- {TSI_DICTIONARY, "tsi.table", "tsi.bin", "tsi.dbin", SYSTEM_FILE},
- {USER_DICTIONARY, NULL, NULL, "user.bin", USER_FILE}
-};
-
-
-SystemTableInfo::SystemTableInfo() {
- m_binary_format_version = 0;
- m_model_data_version = 0;
- m_lambda = 0.;
-
- size_t i;
- for (i = 0; i < PHRASE_INDEX_LIBRARY_COUNT; ++i) {
- pinyin_table_info_t * table_info = &m_table_info[i];
-
- table_info->m_dict_index = i;
- table_info->m_table_filename = NULL;
- table_info->m_system_filename = NULL;
- table_info->m_user_filename = NULL;
- table_info->m_file_type = NOT_USED;
- }
-}
-
-SystemTableInfo::~SystemTableInfo() {
- reset();
-}
-
-void SystemTableInfo::reset() {
- m_binary_format_version = 0;
- m_model_data_version = 0;
- m_lambda = 0.;
-
- size_t i;
- for (i = 0; i < PHRASE_INDEX_LIBRARY_COUNT; ++i) {
- pinyin_table_info_t * table_info = &m_table_info[i];
-
- g_free((gchar *)table_info->m_table_filename);
- table_info->m_table_filename = NULL;
- g_free((gchar *)table_info->m_system_filename);
- table_info->m_system_filename = NULL;
- g_free((gchar *)table_info->m_user_filename);
- table_info->m_user_filename = NULL;
-
- table_info->m_file_type = NOT_USED;
- }
-}
-
-void SystemTableInfo::postfix_tables() {
- size_t i;
- for (i = 0; i < G_N_ELEMENTS(reserved_tables); ++i) {
- const pinyin_table_info_t * postfix = &reserved_tables[i];
-
- guint8 index = postfix->m_dict_index;
- pinyin_table_info_t * table_info = &m_table_info[index];
- assert(table_info->m_dict_index == index);
-
- table_info->m_table_filename = g_strdup(postfix->m_table_filename);
- table_info->m_system_filename = g_strdup(postfix->m_system_filename);
- table_info->m_user_filename = g_strdup(postfix->m_user_filename);
- table_info->m_file_type = postfix->m_file_type;
- }
-}
-
-static gchar * to_string(const char * str) {
- if (0 == strcmp(str, "NULL"))
- return NULL;
-
- return g_strdup(str);
-}
-
-static PHRASE_FILE_TYPE to_file_type(const char * str) {
-#define HANDLE(x) { \
- if (0 == strcmp(str, #x)) \
- return x; \
- }
-
- HANDLE(NOT_USED);
- HANDLE(SYSTEM_FILE);
- HANDLE(DICTIONARY);
- HANDLE(USER_FILE);
-
- assert(false);
-
-#undef HANDLE
-}
-
-bool SystemTableInfo::load(const char * filename) {
- reset();
-
- char * locale = setlocale(LC_NUMERIC, "C");
-
- FILE * input = fopen(filename, "r");
- if (NULL == input) {
- fprintf(stderr, "open %s failed.\n", filename);
- return false;
- }
-
- int binver = 0, modelver = 0;
- gfloat lambda = 0.;
-
- int num = fscanf(input, "binary format version:%d\n", &binver);
- if (1 != num) {
- fclose(input);
- return false;
- }
-
- num = fscanf(input, "model data version:%d\n", &modelver);
- if (1 != num) {
- fclose(input);
- return false;
- }
-
- num = fscanf(input, "lambda parameter:%f\n", &lambda);
- if (1 != num) {
- fclose(input);
- return false;
- }
-
-#if 0
- printf("binver:%d modelver:%d lambda:%f\n", binver, modelver, lambda);
-#endif
-
- m_binary_format_version = binver;
- m_model_data_version = modelver;
- m_lambda = lambda;
-
- int index = 0;
- char tablefile[256], sysfile[256], userfile[256], filetype[256];
- while (!feof(input)) {
- num = fscanf(input, "%d %256s %256s %256s %256s\n",
- &index, tablefile, sysfile, userfile, filetype);
-
- if (5 != num)
- continue;
-
- if (!(0 <= index && index < PHRASE_INDEX_LIBRARY_COUNT))
- continue;
-
- /* save into m_table_info. */
- pinyin_table_info_t * table_info = &m_table_info[index];
- assert(index == table_info->m_dict_index);
-
- table_info->m_table_filename = to_string(tablefile);
- table_info->m_system_filename = to_string(sysfile);
- table_info->m_user_filename = to_string(userfile);
-
- table_info->m_file_type = to_file_type(filetype);
- }
-
- fclose(input);
-
- /* postfix reserved tables. */
- postfix_tables();
-
- setlocale(LC_NUMERIC, locale);
-
- return true;
-}
-
-const pinyin_table_info_t * SystemTableInfo::get_table_info() {
- return m_table_info;
-}
-
-gfloat SystemTableInfo::get_lambda() {
- return m_lambda;
-}
-
-
-UserTableInfo::UserTableInfo() {
- m_binary_format_version = 0;
- m_model_data_version = 0;
-}
-
-void UserTableInfo::reset() {
- m_binary_format_version = 0;
- m_model_data_version = 0;
-}
-
-bool UserTableInfo::load(const char * filename) {
- reset();
-
- char * locale = setlocale(LC_NUMERIC, "C");
-
- FILE * input = fopen(filename, "r");
- if (NULL == input) {
- fprintf(stderr, "open %s failed.", filename);
- return false;
- }
-
- int binver = 0, modelver = 0;
-
- int num = fscanf(input, "binary format version:%d\n", &binver);
- if (1 != num) {
- fclose(input);
- return false;
- }
-
- num = fscanf(input, "model data version:%d\n", &modelver);
- if (1 != num) {
- fclose(input);
- return false;
- }
-
-#if 0
- printf("binver:%d modelver:%d\n", binver, modelver);
-#endif
-
- m_binary_format_version = binver;
- m_model_data_version = modelver;
-
- fclose(input);
-
- setlocale(LC_NUMERIC, locale);
-
- return true;
-}
-
-bool UserTableInfo::save(const char * filename) {
- char * locale = setlocale(LC_NUMERIC, "C");
-
- FILE * output = fopen(filename, "w");
- if (NULL == output) {
- fprintf(stderr, "write %s failed.\n", filename);
- return false;
- }
-
- fprintf(output, "binary format version:%d\n", m_binary_format_version);
- fprintf(output, "model data version:%d\n", m_model_data_version);
-
- fclose(output);
-
- setlocale(LC_NUMERIC, locale);
-
- return true;
-}
-
-bool UserTableInfo::is_conform(const SystemTableInfo * sysinfo) {
- if (sysinfo->m_binary_format_version != m_binary_format_version)
- return false;
-
- if (sysinfo->m_model_data_version != m_model_data_version)
- return false;
-
- return true;
-}
-
-bool UserTableInfo::make_conform(const SystemTableInfo * sysinfo) {
- m_binary_format_version = sysinfo->m_binary_format_version;
- m_model_data_version = sysinfo->m_model_data_version;
- return true;
-}