design flexible bi-gram
authorPeng Wu <alexepico@gmail.com>
Thu, 31 Mar 2011 09:35:01 +0000 (17:35 +0800)
committerPeng Wu <alexepico@gmail.com>
Thu, 31 Mar 2011 09:35:01 +0000 (17:35 +0800)
src/storage/flexible_ngram.h [new file with mode: 0644]

diff --git a/src/storage/flexible_ngram.h b/src/storage/flexible_ngram.h
new file mode 100644 (file)
index 0000000..f437b80
--- /dev/null
@@ -0,0 +1,78 @@
+
+
+#ifndef FLEXIBLE_NGRAM_H
+#define FLEXIBLE_NGRAM_H
+
+
+/* Note: the signature of the template parameters.
+ * struct MagicHeader, ArrayHeader, ArrayItem.
+ */
+
+typedef GArray * FlexibleBigramPhraseArray;
+
+template<typename ArrayHeader, typename ArrayItem>
+class FlexibleSingleGram{
+    template<typename MagicHeader, typename ArrayHeader,
+             typename ArrayItem>
+    friend class FlexibleBigram;
+private:
+    MemoryChunk m_chunk;
+    FlexibleSingleGram(void * buffer, size_t length);
+public:
+    /* Null Constructor */
+    FlexibleSingleGram();
+    /* retrieve all items */
+    bool retrieve_all(/* out */ FlexibleBigramPhraseArray array);
+
+    /* search method */
+    /* the array result contains many items */
+    bool search(/* in */ PhraseIndexRange * range,
+                /* out */ FlexibleBigramPhraseArray array);
+
+    /* get array item */
+    bool get_array_item(/* in */ phrase_token_t token,
+                        /* out */ ArrayItem & item);
+    /* set array item */
+    bool set_array_item(/* in */ phrase_token_t token,
+                        /* in */ const ArrayItem & item);
+
+    /* get array header */
+    bool get_array_header(/* out */ ArrayHeader & header);
+
+    /* set array header */
+    bool set_array_header(/* in */ const ArrayHeader & header);
+};
+
+template<typename MagicHeader, typename ArrayHeader,
+         typename ArrayItem>
+class FlexibleBigram{
+private:
+    DB * m_db;
+
+    void reset(){
+        if ( m_db ){
+            m_db->close(m_db, 0);
+            m_db = NULL;
+        }
+    }
+
+public:
+    FlexibleBigram(){
+        m_db = NULL;
+    }
+
+    ~FlexibleBigram(){
+        reset();
+    }
+
+    /* attach berkeley db on filesystem for training purpose. */
+    bool attach(const char * dbfile);
+    /* load/store one array. */
+    bool load(phrase_token_t index,
+              FlexibleSingleGram<ArrayHeader, ArrayItem> * & single_gram);
+    bool store(phrase_token_t index, FlexibleSingleGram * & single_gram);
+    /* array of phrase_token_t items, for parameter estimation. */
+    bool get_all_items(GArray * items);
+};
+
+#endif