summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2015-04-08 16:34:52 +0800
committerPeng Wu <alexepico@gmail.com>2015-04-08 16:34:52 +0800
commit9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9 (patch)
tree63f7820c555e2f81c9fb70f093b3cd189b6320d2 /src
parent8f7571b2c5ac37e2741833e0e56567fac2ccd98f (diff)
downloadlibpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.tar.gz
libpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.tar.xz
libpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.zip
use MemoryChunk::mmap
Diffstat (limited to 'src')
-rw-r--r--src/pinyin.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 6f0f2cc..9d76f91 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -197,10 +197,19 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
MemoryChunk * chunk = new MemoryChunk;
filename = g_build_filename
(context->m_system_dir, SYSTEM_PINYIN_INDEX, NULL);
+
+#ifdef LIBPINYIN_USE_MMAP
+ if (!chunk->mmap(filename)) {
+ fprintf(stderr, "mmap %s failed!\n", filename);
+ return NULL;
+ }
+#else
if (!chunk->load(filename)) {
fprintf(stderr, "open %s failed!\n", filename);
return NULL;
}
+#endif
+
g_free(filename);
/* load user chewing table */
@@ -223,10 +232,19 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
chunk = new MemoryChunk;
filename = g_build_filename
(context->m_system_dir, SYSTEM_PHRASE_INDEX, NULL);
+
+#ifdef LIBPINYIN_USE_MMAP
+ if (!chunk->mmap(filename)) {
+ fprintf(stderr, "mmap %s failed!\n", filename);
+ return NULL;
+ }
+#else
if (!chunk->load(filename)) {
fprintf(stderr, "open %s failed!\n", filename);
return NULL;
}
+#endif
+
g_free(filename);
/* load user phrase table */
@@ -298,7 +316,14 @@ bool pinyin_load_phrase_library(pinyin_context_t * context,
/* check bin file in system dir. */
gchar * chunkfilename = g_build_filename(context->m_system_dir,
systemfilename, NULL);
- chunk->load(chunkfilename);
+#ifdef LIBPINYIN_USE_MMAP
+ if (!chunk->mmap(chunkfilename))
+ fprintf(stderr, "mmap %s failed!\n", chunkfilename);
+#else
+ if (!chunk->load(chunkfilename))
+ fprintf(stderr, "open %s failed!\n", chunkfilename);
+#endif
+
g_free(chunkfilename);
context->m_phrase_index->load(index, chunk);
@@ -325,7 +350,7 @@ bool pinyin_load_phrase_library(pinyin_context_t * context,
gchar * chunkfilename = g_build_filename(context->m_user_dir,
userfilename, NULL);
- /* check bin file exists. if not, create a new one. */
+ /* check bin file exists. if not, create a new one. */
if (chunk->load(chunkfilename)) {
context->m_phrase_index->load(index, chunk);
} else {
@@ -644,7 +669,14 @@ bool pinyin_save(pinyin_context_t * context){
/* check bin file in system dir. */
gchar * chunkfilename = g_build_filename(context->m_system_dir,
systemfilename, NULL);
- chunk->load(chunkfilename);
+#ifdef LIBPINYIN_USE_MMAP
+ if (!chunk->mmap(chunkfilename))
+ fprintf(stderr, "mmap %s failed!\n", chunkfilename);
+#else
+ if (!chunk->load(chunkfilename))
+ fprintf(stderr, "open %s failed!\n", chunkfilename);
+#endif
+
g_free(chunkfilename);
context->m_phrase_index->diff(i, chunk, log);
@@ -826,7 +858,15 @@ bool pinyin_mask_out(pinyin_context_t * context,
/* check bin file in system dir. */
gchar * chunkfilename = g_build_filename(context->m_system_dir,
systemfilename, NULL);
- chunk->load(chunkfilename);
+
+#ifdef LIBPINYIN_USE_MMAP
+ if (!chunk->mmap(chunkfilename))
+ fprintf(stderr, "mmap %s failed!\n", chunkfilename);
+#else
+ if (!chunk->load(chunkfilename))
+ fprintf(stderr, "open %s failed!\n", chunkfilename);
+#endif
+
g_free(chunkfilename);
context->m_phrase_index->load(index, chunk);