diff options
author | Peng Wu <alexepico@gmail.com> | 2015-04-08 16:34:52 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2015-04-08 16:34:52 +0800 |
commit | 9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9 (patch) | |
tree | 63f7820c555e2f81c9fb70f093b3cd189b6320d2 /src | |
parent | 8f7571b2c5ac37e2741833e0e56567fac2ccd98f (diff) | |
download | libpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.tar.gz libpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.tar.xz libpinyin-9a6dfc762edd7ce29a9ef3d225dc8bd51bc6fcb9.zip |
use MemoryChunk::mmap
Diffstat (limited to 'src')
-rw-r--r-- | src/pinyin.cpp | 48 |
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); |