summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2024-07-03 09:52:08 +0800
committerPeng Wu <alexepico@gmail.com>2024-07-03 09:52:08 +0800
commit9393d69535c4bb2ccd5967fa47b12436b7b37711 (patch)
tree4a0054c133c7b1493f09569260d5a84c64452f69 /src
parent4604435480d4b9e4f2f61106b550801012255d14 (diff)
downloadlibpinyin-9393d69535c4bb2ccd5967fa47b12436b7b37711.tar.gz
libpinyin-9393d69535c4bb2ccd5967fa47b12436b7b37711.tar.xz
libpinyin-9393d69535c4bb2ccd5967fa47b12436b7b37711.zip
Update class UserTableInfo
Diffstat (limited to 'src')
-rw-r--r--src/storage/table_info.cpp25
-rw-r--r--src/storage/table_info.h5
2 files changed, 30 insertions, 0 deletions
diff --git a/src/storage/table_info.cpp b/src/storage/table_info.cpp
index 41c7da0..ae51fc3 100644
--- a/src/storage/table_info.cpp
+++ b/src/storage/table_info.cpp
@@ -28,6 +28,9 @@
using namespace pinyin;
+/* clean the user history data after several crashes */
+#define OPEN_COUNTER_LIMIT 6
+
#if 0
static const pinyin_table_info_t reserved_tables[] = {
{RESERVED, NULL, NULL, NULL, NOT_USED},
@@ -303,11 +306,13 @@ TABLE_PHONETIC_TYPE SystemTableInfo2::get_table_phonetic_type() {
UserTableInfo::UserTableInfo() {
m_binary_format_version = 0;
m_model_data_version = 0;
+ m_open_counter = 0;
}
void UserTableInfo::reset() {
m_binary_format_version = 0;
m_model_data_version = 0;
+ m_open_counter = 0;
}
bool UserTableInfo::load(const char * filename) {
@@ -341,6 +346,11 @@ bool UserTableInfo::load(const char * filename) {
if (EOF != num)
format = to_table_database_format_type (str);
+ int counter = 0;
+ num = fscanf(input, "open counter:%d\n", &counter);
+ if (1 != num)
+ counter = 0;
+
#if 0
printf("binver:%d modelver:%d\n", binver, modelver);
#endif
@@ -348,6 +358,7 @@ bool UserTableInfo::load(const char * filename) {
m_binary_format_version = binver;
m_model_data_version = modelver;
m_table_database_format_type = format;
+ m_open_counter = counter;
fclose(input);
@@ -369,6 +380,7 @@ bool UserTableInfo::save(const char * filename) {
fprintf(output, "model data version:%d\n", m_model_data_version);
fprintf(output, "database format:%s\n",
from_table_database_format_type (m_table_database_format_type));
+ fprintf(output, "open counter:%d\n", m_open_counter);
fclose(output);
@@ -387,6 +399,9 @@ bool UserTableInfo::is_conform(const SystemTableInfo2 * sysinfo) {
if (sysinfo->m_table_database_format_type != m_table_database_format_type)
return false;
+ if (m_open_counter > OPEN_COUNTER_LIMIT)
+ return false;
+
return true;
}
@@ -396,3 +411,13 @@ bool UserTableInfo::make_conform(const SystemTableInfo2 * sysinfo) {
m_table_database_format_type = sysinfo->m_table_database_format_type;
return true;
}
+
+int UserTableInfo::get_open_counter() {
+ if (m_open_counter > OPEN_COUNTER_LIMIT)
+ return 0;
+ return m_open_counter;
+}
+
+void UserTableInfo::set_open_counter(int counter) {
+ m_open_counter = counter;
+}
diff --git a/src/storage/table_info.h b/src/storage/table_info.h
index 4b8f252..ea61db0 100644
--- a/src/storage/table_info.h
+++ b/src/storage/table_info.h
@@ -98,6 +98,7 @@ private:
int m_binary_format_version;
int m_model_data_version;
TABLE_DATABASE_FORMAT_TYPE m_table_database_format_type;
+ int m_open_counter;
private:
void reset();
@@ -112,6 +113,10 @@ public:
bool is_conform(const SystemTableInfo2 * sysinfo);
bool make_conform(const SystemTableInfo2 * sysinfo);
+
+ int get_open_counter();
+
+ void set_open_counter(int counter);
};
};