diff options
author | Peng Wu <alexepico@gmail.com> | 2016-05-26 14:39:02 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2016-05-26 14:39:02 +0800 |
commit | fe9dd3a94f281231394ac2141ce586cb1addac3c (patch) | |
tree | 8fb34fd3465bdf66d7ded24f42237a234426343a /src/lookup/pinyin_lookup2.cpp | |
parent | f359b1153ec6ab2f3f557515660616fb907835c6 (diff) | |
download | libpinyin-fe9dd3a94f281231394ac2141ce586cb1addac3c.tar.gz libpinyin-fe9dd3a94f281231394ac2141ce586cb1addac3c.tar.xz libpinyin-fe9dd3a94f281231394ac2141ce586cb1addac3c.zip |
update *constraint methods
Diffstat (limited to 'src/lookup/pinyin_lookup2.cpp')
-rw-r--r-- | src/lookup/pinyin_lookup2.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/lookup/pinyin_lookup2.cpp b/src/lookup/pinyin_lookup2.cpp index 9f29dc4..df27596 100644 --- a/src/lookup/pinyin_lookup2.cpp +++ b/src/lookup/pinyin_lookup2.cpp @@ -625,34 +625,31 @@ bool PinyinLookup2::train_result2(ChewingKeyVector keys, int PinyinLookup2::add_constraint(CandidateConstraints constraints, - size_t index, + size_t start, size_t end, phrase_token_t token) { - if (m_phrase_index->get_phrase_item(token, m_cached_phrase_item)) + if (end > constraints->len) return 0; - size_t phrase_length = m_cached_phrase_item.get_phrase_length(); - if ( index + phrase_length > constraints->len ) - return 0; - - for (size_t i = index; i < index + phrase_length; ++i){ + for (size_t i = start; i < end; ++i){ clear_constraint(constraints, i); } /* store one step constraint */ lookup_constraint_t * constraint = &g_array_index - (constraints, lookup_constraint_t, index); + (constraints, lookup_constraint_t, start); constraint->m_type = CONSTRAINT_ONESTEP; constraint->m_token = token; + constraint->m_end = end; /* propagate no search constraint */ - for (size_t i = 1; i < phrase_length; ++i){ - constraint = &g_array_index(constraints, lookup_constraint_t, index + i); + for (size_t i = start + 1; i < end; ++i){ + constraint = &g_array_index(constraints, lookup_constraint_t, i); constraint->m_type = CONSTRAINT_NOSEARCH; - constraint->m_constraint_step = index; + constraint->m_constraint_step = start; } - return phrase_length; + return end - start; } bool PinyinLookup2::clear_constraint(CandidateConstraints constraints, @@ -675,16 +672,13 @@ bool PinyinLookup2::clear_constraint(CandidateConstraints constraints, assert(constraint->m_type == CONSTRAINT_ONESTEP); phrase_token_t token = constraint->m_token; - if (m_phrase_index->get_phrase_item(token, m_cached_phrase_item)) - return false; - - size_t phrase_length = m_cached_phrase_item.get_phrase_length(); - for ( size_t i = 0; i < phrase_length; ++i){ - if (index + i >= constraints->len) + size_t end = contraint->m_end; + for (size_t i = index; i < end; ++i){ + if (i >= constraints->len) continue; constraint = &g_array_index - (constraints, lookup_constraint_t, index + i); + (constraints, lookup_constraint_t, i); constraint->m_type = NO_CONSTRAINT; } |