add get_shengmu/yunmu_string
[platform/upstream/libpinyin.git] / src / storage / facade_chewing_table.h
index e411589..572ce04 100644 (file)
 
 namespace pinyin{
 
+/**
+ * FacadeChewingTable:
+ *
+ * The facade class of chewing large table.
+ *
+ */
+
 class FacadeChewingTable{
 private:
     ChewingLargeTable * m_system_chewing_table;
     ChewingLargeTable * m_user_chewing_table;
 
+    void reset() {
+        if (m_system_chewing_table) {
+            delete m_system_chewing_table;
+            m_system_chewing_table = NULL;
+        }
+
+        if (m_user_chewing_table) {
+            delete m_user_chewing_table;
+            m_user_chewing_table = NULL;
+        }
+    }
 public:
-    /* constructor/destructor */
+    /**
+     * FacadeChewingTable::FacadeChewingTable:
+     *
+     * The constructor of the FacadeChewingTable.
+     *
+     */
     FacadeChewingTable() {
         m_system_chewing_table = NULL;
         m_user_chewing_table = NULL;
     }
 
-    /* set options method */
+    /**
+     * FacadeChewingTable::~FacadeChewingTable:
+     *
+     * The destructor of the FacadeChewingTable.
+     *
+     */
+    ~FacadeChewingTable() {
+        reset();
+    }
+
+    /**
+     * FacadeChewingTable::set_options:
+     * @options: the pinyin options.
+     * @returns: whether the setting options is successful.
+     *
+     * Set the options of the system and user chewing table.
+     *
+     */
     bool set_options(pinyin_option_t options) {
         bool result = false;
         if (m_system_chewing_table)
@@ -49,9 +89,20 @@ public:
         return result;
     }
 
-    /* load/store method */
+    /**
+     * FacadeChewingTable::load:
+     * @options: the pinyin options.
+     * @system: the memory chunk of the system chewing table.
+     * @user: the memory chunk of the user chewing table.
+     * @returns: whether the load operation is successful.
+     *
+     * Load the system or user chewing table from the memory chunks.
+     *
+     */
     bool load(pinyin_option_t options, MemoryChunk * system,
               MemoryChunk * user){
+        reset();
+
         bool result = false;
         if (system) {
             m_system_chewing_table = new ChewingLargeTable(options);
@@ -64,9 +115,39 @@ public:
         return result;
     }
 
-    /* search method */
+    /**
+     * FacadeChewingTable::store:
+     * @new_user: the memory chunk to store the user chewing table.
+     * @returns: whether the store operation is successful.
+     *
+     * Store the user chewing table to the memory chunk.
+     *
+     */
+    bool store(MemoryChunk * new_user) {
+        if (NULL == m_user_chewing_table)
+            return false;
+        return m_user_chewing_table->store(new_user);
+    }
+
+    /**
+     * FacadeChewingTable::search:
+     * @phrase_length: the length of the phrase to be searched.
+     * @keys: the pinyin key of the phrase to be searched.
+     * @ranges: the array of GArrays to store the matched phrase token.
+     * @returns: the search result of enum SearchResult.
+     *
+     * Search the phrase tokens according to the pinyin keys.
+     *
+     */
     int search(int phrase_length, /* in */ ChewingKey keys[],
                /* out */ PhraseIndexRanges ranges) const {
+
+        /* clear ranges. */
+        for (size_t i = 0; i < PHRASE_INDEX_LIBRARY_COUNT; ++i) {
+            if (ranges[i])
+                g_array_set_size(ranges[i], 0);
+        }
+
         int result = SEARCH_NONE;
 
         if (NULL != m_system_chewing_table)
@@ -80,18 +161,54 @@ public:
         return result;
     }
 
-    /* add/remove index method */
+    /**
+     * FacadeChewingTable::add_index:
+     * @phrase_length: the length of the phrase to be added.
+     * @keys: the pinyin keys of the phrase to be added.
+     * @token: the token of the phrase to be added.
+     * @returns: the add result of enum ErrorResult.
+     *
+     * Add the phrase token to the user chewing table.
+     *
+     */
     int add_index(int phrase_length, /* in */ ChewingKey keys[],
                   /* in */ phrase_token_t token) {
-        assert(NULL != m_user_chewing_table);
+        if (NULL == m_user_chewing_table)
+            return ERROR_NO_USER_TABLE;
         return m_user_chewing_table->add_index(phrase_length, keys, token);
     }
 
+    /**
+     * FacadeChewingTable::remove_index:
+     * @phrase_length: the length of the phrase to be removed.
+     * @keys: the pinyin keys of the phrase to be removed.
+     * @token: the token of the phrase to be removed.
+     * @returns: the remove result of enum ErrorResult.
+     *
+     * Remove the phrase token from the user chewing table.
+     *
+     */
     int remove_index(int phrase_length, /* in */ ChewingKey keys[],
                      /* in */ phrase_token_t token) {
-        assert(NULL != m_user_chewing_table);
+        if (NULL == m_user_chewing_table)
+            return ERROR_NO_USER_TABLE;
         return m_user_chewing_table->remove_index(phrase_length, keys, token);
     }
+
+    /**
+     * FacadeChewingTable::mask_out:
+     * @mask: the mask.
+     * @value: the value.
+     * @returns: whether the mask out operation is successful.
+     *
+     * Mask out the matched chewing index.
+     *
+     */
+    bool mask_out(phrase_token_t mask, phrase_token_t value) {
+        if (NULL == m_user_chewing_table)
+            return false;
+        return m_user_chewing_table->mask_out(mask, value);
+    }
 };
 
 };