write get length
authorPeng Wu <alexepico@gmail.com>
Mon, 5 Nov 2012 05:55:34 +0000 (13:55 +0800)
committerPeng Wu <alexepico@gmail.com>
Mon, 5 Nov 2012 05:56:49 +0000 (13:56 +0800)
src/storage/chewing_large_table.cpp
src/storage/phrase_large_table2.cpp

index 8eb43d3..68eb3ed 100644 (file)
@@ -53,6 +53,9 @@ public:
                   /* in */ phrase_token_t token);
     int remove_index(int phrase_length, /* in */ ChewingKey keys[],
                      /* in */ phrase_token_t token);
+
+    /* get length method */
+    int get_length() const;
 };
 
 
@@ -85,6 +88,9 @@ public:
     int add_index(/* in */ ChewingKey keys[], /* in */ phrase_token_t token);
     int remove_index(/* in */ ChewingKey keys[],
                      /* in */ phrase_token_t token);
+
+    /* get length method */
+    int get_length() const;
 };
 
 };
@@ -890,3 +896,31 @@ store(MemoryChunk * new_chunk, table_offset_t offset, table_offset_t & end) {
     end = offset + m_chunk.size();
     return true;
 }
+
+
+/* get length method */
+
+int ChewingLengthIndexLevel::get_length() const {
+    int length = m_chewing_array_indexes->len;
+
+    /* trim trailing zero. */
+    for (int i = length - 1; i >= 0; --i) {
+        void * array = g_array_index(m_chewing_array_indexes, void *, i);
+
+        if (NULL != array)
+            break;
+
+        --length;
+    }
+
+    return length;
+}
+
+template<size_t phrase_length>
+int ChewingArrayIndexLevel<phrase_length>::get_length() const {
+    IndexItem * chunk_begin = NULL, * chunk_end = NULL;
+    chunk_begin = (IndexItem *) m_chunk.begin();
+    chunk_end = (IndexItem *) m_chunk.end();
+
+    return chunk_end - chunk_begin;
+}
index 7d3d83b..7a045e4 100644 (file)
@@ -678,7 +678,6 @@ int PhraseLengthIndexLevel2::get_length() const {
     return length;
 }
 
-
 template<size_t phrase_length>
 int PhraseArrayIndexLevel2<phrase_length>::get_length() const {
     IndexItem * chunk_begin = NULL, * chunk_end = NULL;