refine asserts in large tables
authorPeng Wu <alexepico@gmail.com>
Thu, 21 Jun 2012 05:18:18 +0000 (13:18 +0800)
committerPeng Wu <alexepico@gmail.com>
Thu, 21 Jun 2012 05:18:18 +0000 (13:18 +0800)
src/include/novel_types.h
src/storage/chewing_large_table.cpp
src/storage/phrase_large_table.cpp

index 014c11a..706afd4 100644 (file)
@@ -78,6 +78,7 @@ enum ErrorResult{
     ERROR_OK = 0,                /* operate ok */
     ERROR_INSERT_ITEM_EXISTS,    /* item already exists */
     ERROR_REMOVE_ITEM_DONOT_EXISTS, /* item don't exists */
+    ERROR_PHRASE_TOO_LONG,       /* the phrase is too long */
     ERROR_NO_SUB_PHRASE_INDEX,   /* sub phrase index is not loaded */
     ERROR_NO_ITEM,               /* item has a null slot */
     ERROR_OUT_OF_RANGE,          /* beyond the end of the sub phrase index */
index 9185976..ff53b75 100644 (file)
@@ -490,7 +490,8 @@ int ChewingBitmapIndexLevel::remove_index(int phrase_length,
 int ChewingLengthIndexLevel::add_index(int phrase_length,
                                        /* in */ ChewingKey keys[],
                                        /* in */ phrase_token_t token) {
-    assert(phrase_length + 1 < MAX_PHRASE_LENGTH);
+    if (!(phrase_length + 1 < MAX_PHRASE_LENGTH))
+        return ERROR_PHRASE_TOO_LONG;
 
     if (m_chewing_array_indexes->len <= phrase_length)
         g_array_set_size(m_chewing_array_indexes, phrase_length + 1);
@@ -532,7 +533,8 @@ int ChewingLengthIndexLevel::add_index(int phrase_length,
 int ChewingLengthIndexLevel::remove_index(int phrase_length,
                                           /* in */ ChewingKey keys[],
                                           /* in */ phrase_token_t token) {
-    assert(phrase_length + 1 < MAX_PHRASE_LENGTH);
+    if (!(phrase_length + 1 < MAX_PHRASE_LENGTH))
+        return ERROR_PHRASE_TOO_LONG;
 
     if (m_chewing_array_indexes->len <= phrase_length)
         return ERROR_REMOVE_ITEM_DONOT_EXISTS;
index 195024e..1207b17 100644 (file)
@@ -242,7 +242,9 @@ int PhraseBitmapIndexLevel::remove_index( int phrase_length, /* in */ ucs4_t phr
 }
 
 int PhraseLengthIndexLevel::add_index( int phrase_length, /* in */ ucs4_t phrase[], /* in */ phrase_token_t token){
-    assert(phrase_length + 1 < MAX_PHRASE_LENGTH);
+    if (!(phrase_length + 1 < MAX_PHRASE_LENGTH))
+        return ERROR_PHRASE_TOO_LONG;
+
     if ( m_phrase_array_indexes -> len <= phrase_length )
         g_array_set_size(m_phrase_array_indexes, phrase_length + 1);
 
@@ -280,7 +282,9 @@ int PhraseLengthIndexLevel::add_index( int phrase_length, /* in */ ucs4_t phrase
 }
 
 int PhraseLengthIndexLevel::remove_index( int phrase_length, /* in */ ucs4_t phrase[], /* out */ phrase_token_t & token){
-    assert(phrase_length + 1 < MAX_PHRASE_LENGTH);
+    if (!(phrase_length + 1 < MAX_PHRASE_LENGTH))
+        return ERROR_PHRASE_TOO_LONG;
+
     if ( m_phrase_array_indexes -> len <= phrase_length )
         return ERROR_REMOVE_ITEM_DONOT_EXISTS;
 #define CASE(len) case len:                                             \