summaryrefslogtreecommitdiffstats
path: root/src/PYLibPinyin.cc
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2011-09-30 10:54:25 +0800
committerPeng Wu <alexepico@gmail.com>2011-12-22 12:23:13 +0800
commitfd1f18c48e6fbec50e8c908552c446c60363a94b (patch)
treebd4c990af0302f7ed5235ccbc1e2018810b6c167 /src/PYLibPinyin.cc
parent5eafd4293c651be31bd1fdc8e406f8db48dcd8af (diff)
downloadibus-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.cc45
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. */