summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2012-11-06 11:12:19 +0800
committerPeng Wu <alexepico@gmail.com>2012-11-06 11:20:32 +0800
commit92f204109d210d3670986fee625d9d708fb53a2d (patch)
treee2402bc0e3f89fda6ab00ca09544eb78f26169f5 /src
parented47add4965f5a22f697e1ec795be9e03065b18a (diff)
downloadlibpinyin-92f204109d210d3670986fee625d9d708fb53a2d.tar.gz
libpinyin-92f204109d210d3670986fee625d9d708fb53a2d.tar.xz
libpinyin-92f204109d210d3670986fee625d9d708fb53a2d.zip
re-factor remove index in progress
Diffstat (limited to 'src')
-rw-r--r--src/storage/chewing_large_table.cpp15
-rw-r--r--src/storage/phrase_large_table2.cpp14
2 files changed, 23 insertions, 6 deletions
diff --git a/src/storage/chewing_large_table.cpp b/src/storage/chewing_large_table.cpp
index 68eb3ed..7779aae 100644
--- a/src/storage/chewing_large_table.cpp
+++ b/src/storage/chewing_large_table.cpp
@@ -488,9 +488,18 @@ int ChewingBitmapIndexLevel::remove_index(int phrase_length,
[first_key.m_initial][first_key.m_middle]
[first_key.m_final][first_key.m_tone];
- if (length_array)
- return length_array->remove_index(phrase_length - 1, keys + 1, token);
- return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+ if (NULL == length_array)
+ return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+
+ int retval = length_array->remove_index(phrase_length - 1, keys + 1, token);
+
+ /* remove empty array. */
+ if (0 == length_array->get_length()) {
+ delete length_array;
+ length_array = NULL;
+ }
+
+ return retval;
}
int ChewingLengthIndexLevel::add_index(int phrase_length,
diff --git a/src/storage/phrase_large_table2.cpp b/src/storage/phrase_large_table2.cpp
index 7a045e4..7ed470f 100644
--- a/src/storage/phrase_large_table2.cpp
+++ b/src/storage/phrase_large_table2.cpp
@@ -292,10 +292,18 @@ int PhraseBitmapIndexLevel2::remove_index(int phrase_length,
PhraseLengthIndexLevel2 * & length_array =
m_phrase_length_indexes[first_key];
- if ( length_array )
- return length_array->remove_index(phrase_length, phrase, token);
+ if (NULL == length_array)
+ return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+
+ int retval = length_array->remove_index(phrase_length, phrase, token);
+
+ /* remove empty array. */
+ if (0 == length_array->get_length()) {
+ delete length_array;
+ length_array = NULL;
+ }
- return ERROR_REMOVE_ITEM_DONOT_EXISTS;
+ return retval;
}
int PhraseLengthIndexLevel2::add_index(int phrase_length,