diff options
author | Peng Wu <alexepico@gmail.com> | 2011-09-30 10:54:25 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2011-12-22 12:23:13 +0800 |
commit | fd1f18c48e6fbec50e8c908552c446c60363a94b (patch) | |
tree | bd4c990af0302f7ed5235ccbc1e2018810b6c167 /src/PYLibPinyin.cc | |
parent | 5eafd4293c651be31bd1fdc8e406f8db48dcd8af (diff) | |
download | ibus-libpinyin-fd1f18c48e6fbec50e8c908552c446c60363a94b.tar.gz ibus-libpinyin-fd1f18c48e6fbec50e8c908552c446c60363a94b.tar.xz ibus-libpinyin-fd1f18c48e6fbec50e8c908552c446c60363a94b.zip |
add lazy init
Diffstat (limited to 'src/PYLibPinyin.cc')
-rw-r--r-- | src/PYLibPinyin.cc | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/src/PYLibPinyin.cc b/src/PYLibPinyin.cc index e4d1b84..a7097fe 100644 --- a/src/PYLibPinyin.cc +++ b/src/PYLibPinyin.cc @@ -30,24 +30,59 @@ std::unique_ptr<LibPinyinBackEnd> LibPinyinBackEnd::m_instance; static LibPinyinBackEnd libpinyin_backend; LibPinyinBackEnd::LibPinyinBackEnd () { - m_pinyin_context = pinyin_init ("/usr/share/libpinyin/data", NULL); - m_chewing_context = pinyin_init ("/usr/share/libpinyin/data", NULL); + m_pinyin_context = NULL; + m_chewing_context = NULL; } LibPinyinBackEnd::~LibPinyinBackEnd () { - pinyin_fini(m_pinyin_context); - pinyin_fini(m_chewing_context); + if (m_pinyin_context) + pinyin_fini(m_pinyin_context); + m_pinyin_context = NULL; + if (m_chewing_context) + pinyin_fini(m_chewing_context); + m_chewing_context = NULL; +} + +pinyin_instance_t * +LibPinyinBackEnd::allocPinyinInstance () +{ + if (NULL == m_pinyin_context) { + m_pinyin_context = pinyin_init ("/usr/share/libpinyin/data", NULL); + } + return pinyin_alloc_instance (m_pinyin_context); +} + +void +LibPinyinBackEnd::freePinyinInstance (pinyin_instance_t *instance) +{ + pinyin_free_instance (instance); +} + +pinyin_instance_t * +LibPinyinBackEnd::allocChewingInstance () +{ + if (NULL == m_chewing_context) { + m_chewing_context = pinyin_init ("/usr/share/libpinyin/data", NULL); + } + return pinyin_alloc_instance (m_chewing_context); +} + +void +LibPinyinBackEnd::freeChewingInstance (pinyin_instance_t *instance) +{ + pinyin_free_instance (instance); } void LibPinyinBackEnd::init (void) { g_assert (NULL == m_instance.get ()); LibPinyinBackEnd * backend = new LibPinyinBackEnd; - m_instance.reset(backend); + m_instance.reset (backend); } void LibPinyinBackEnd::finalize (void) { + m_instance.reset (); } /* Here are the fuzzy pinyin options conversion table. */ |