diff options
-rw-r--r-- | src/pinyin.cpp | 39 | ||||
-rw-r--r-- | src/pinyin.h | 20 |
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); |