summaryrefslogtreecommitdiffstats
path: root/src/storage/flexible_ngram.h
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2011-04-15 13:51:02 +0800
committerPeng Wu <alexepico@gmail.com>2011-04-15 13:51:02 +0800
commitf3e68a089ba76467a7adc15d657dd2f9552b2bc7 (patch)
tree964263bb8976cd699d6fc24cd7392e2e20052853 /src/storage/flexible_ngram.h
parent06f2399d0d425c51f383d1c0b5f8fd7dc823be7a (diff)
downloadlibpinyin-f3e68a089ba76467a7adc15d657dd2f9552b2bc7.tar.gz
libpinyin-f3e68a089ba76467a7adc15d657dd2f9552b2bc7.tar.xz
libpinyin-f3e68a089ba76467a7adc15d657dd2f9552b2bc7.zip
add get/set array header to flexible bi-gram
Diffstat (limited to 'src/storage/flexible_ngram.h')
-rw-r--r--src/storage/flexible_ngram.h49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/storage/flexible_ngram.h b/src/storage/flexible_ngram.h
index 10bad8f..3cce47d 100644
--- a/src/storage/flexible_ngram.h
+++ b/src/storage/flexible_ngram.h
@@ -231,14 +231,15 @@ public:
/* load/store one array. */
bool load(phrase_token_t index,
FlexibleSingleGram<ArrayHeader, ArrayItem> * & single_gram){
+ if ( !m_db )
+ return false;
+
DBT db_key;
memset(&db_key, 0, sizeof(DBT));
db_key.data = &index;
db_key.size = sizeof(phrase_token_t);
single_gram = NULL;
- if ( !m_db )
- return false;
DBT db_data;
memset(&db_data, 0, sizeof(DBT));
@@ -342,6 +343,50 @@ public:
int ret = m_db->put(m_db, NULL, &db_key, &db_data, 0);
return ret == 0;
}
+
+ bool get_array_header(phrase_token_t index, ArrayHeader & header){
+ if ( !m_db )
+ return false;
+
+ DBT db_key;
+ memset(&db_key, 0, sizeof(DBT));
+ db_key.data = &index;
+ db_key.size = sizeof(phrase_token_t);
+
+ DBT db_data;
+ memset(&db_data, 0, sizeof(DBT));
+ db_data.flags = DB_DBT_PARTIAL;
+ db_data.doff = 0;
+ db_data.dlen = sizeof(ArrayHeader);
+ int ret = m_db->get(m_db, NULL, &db_key, &db_data, 0);
+ if ( ret != 0 )
+ return false;
+
+ assert(db_data.size == sizeof(ArrayHeader));
+ memcpy(&header, db_data.data, sizeof(ArrayHeader));
+ return true;
+ }
+
+ bool set_array_header(phrase_token_t index, const ArrayHeader & header){
+ if ( !m_db )
+ return false;
+
+ DBT db_key;
+ memset(&db_key, 0, sizeof(DBT));
+ db_key.data = &index;
+ db_key.size = sizeof(phrase_token_t);
+ DBT db_data;
+ memset(&db_data, 0, sizeof(DBT));
+ db_data.data = (void *)&header;
+ db_data.size = sizeof(ArrayHeader);
+ db_data.flags = DB_DBT_PARTIAL;
+ db_data.doff = 0;
+ db_data.dlen = sizeof(ArrayHeader);
+
+ int ret = m_db->put(m_db, NULL, &db_key, &db_data, 0);
+ return ret == 0;
+ }
+
};
#endif