summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2011-09-08 18:16:27 +0800
committerPeng Wu <alexepico@gmail.com>2011-09-08 18:16:27 +0800
commit72bd72e041428dd5c503d26a3feaad8eaa10a155 (patch)
tree4abd1c63b18a209b4ce32e66cb71f08252f59f07
parent03838c2f47ab836302e7d7aa85cc37e093fdbb45 (diff)
downloadlibpinyin-72bd72e041428dd5c503d26a3feaad8eaa10a155.tar.gz
libpinyin-72bd72e041428dd5c503d26a3feaad8eaa10a155.tar.xz
libpinyin-72bd72e041428dd5c503d26a3feaad8eaa10a155.zip
begin to polish pinyin public api
-rw-r--r--src/pinyin.cpp39
-rw-r--r--src/pinyin.h20
2 files changed, 39 insertions, 20 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 8ff947f..afe359a 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -103,11 +103,11 @@ void pinyin_fini(pinyin_context_t * context){
delete context;
}
-bool pinyin_alloc_auxiliary_arrays(pinyin_context_t * context,
- PinyinKeyVector * pinyin_keys,
- PinyinKeyPosVector * pinyin_poses,
- CandidateConstraints * constraints,
- MatchResults * match_results){
+static bool pinyin_alloc_auxiliary_arrays(pinyin_context_t * context,
+ PinyinKeyVector * pinyin_keys,
+ PinyinKeyPosVector * pinyin_poses,
+ CandidateConstraints * constraints,
+ MatchResults * match_results){
*pinyin_keys = g_array_new(FALSE, FALSE, sizeof(PinyinKey));
*pinyin_poses = g_array_new(FALSE, FALSE, sizeof(PinyinKeyPos));
@@ -117,11 +117,11 @@ bool pinyin_alloc_auxiliary_arrays(pinyin_context_t * context,
return true;
}
-bool pinyin_free_auxiliary_arrays(pinyin_context_t * context,
- PinyinKeyVector * pinyin_keys,
- PinyinKeyPosVector * pinyin_poses,
- CandidateConstraints * constraints,
- MatchResults * match_results){
+static bool pinyin_free_auxiliary_arrays(pinyin_context_t * context,
+ PinyinKeyVector * pinyin_keys,
+ PinyinKeyPosVector * pinyin_poses,
+ CandidateConstraints * constraints,
+ MatchResults * match_results){
g_array_free(*pinyin_keys, TRUE);
*pinyin_keys = NULL;
g_array_free(*pinyin_poses, TRUE);
@@ -134,6 +134,25 @@ bool pinyin_free_auxiliary_arrays(pinyin_context_t * context,
return true;
}
+pinyin_instance_t * pinyin_get_instance(pinyin_context_t * context){
+ pinyin_instance_t * instance = new pinyin_instance_t;
+ instance->m_context = context;
+ pinyin_alloc_auxiliary_arrays
+ (instance->m_context, &(instance->m_pinyin_keys),
+ &(instance->m_pinyin_poses),
+ &(instance->m_constraints),
+ &(instance->m_match_results));
+ return instance;
+}
+
+void pinyin_release_instance(pinyin_instance_t * instance){
+ pinyin_free_auxiliary_arrays
+ (instance->m_context, &(instance->m_pinyin_keys),
+ &(instance->m_pinyin_poses),
+ &(instance->m_constraints),
+ &(instance->m_match_results));
+ delete instance;
+}
/* copy from custom to context->m_custom. */
bool pinyin_set_options(pinyin_context_t * context,
diff --git a/src/pinyin.h b/src/pinyin.h
index dae5e55..45fa9fd 100644
--- a/src/pinyin.h
+++ b/src/pinyin.h
@@ -34,19 +34,19 @@ extern "C" {
typedef struct _pinyin_context_t pinyin_context_t;
+typedef struct {
+ pinyin_context_t * m_context;
+ PinyinKeyVector m_pinyin_keys;
+ PinyinKeyPosVector m_pinyin_poses;
+ CandidateConstraints m_constraints;
+ MatchResults m_match_results;
+} pinyin_instance_t;
+
pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir);
void pinyin_fini(pinyin_context_t * context);
-bool pinyin_alloc_auxiliary_arrays(pinyin_context_t * context,
- PinyinKeyVector * pinyin_keys,
- PinyinKeyPosVector * pinyin_poses,
- CandidateConstraints * constraints,
- MatchResults * match_results);
-bool pinyin_free_auxiliary_arrays(pinyin_context_t * context,
- PinyinKeyVector * pinyin_keys,
- PinyinKeyPosVector * pinyin_poses,
- CandidateConstraints * constraints,
- MatchResults * match_results);
+pinyin_instance_t * pinyin_get_instance(pinyin_context_t * context);
+void pinyin_release_instance(pinyin_instance_t * instance);
bool pinyin_set_options(pinyin_context_t * context,
PinyinCustomSettings * custom);