From 581156b5e80b3be00131d2338d7dc6424f91af34 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Thu, 19 Jan 2017 17:24:29 +0800 Subject: move get_top_results function --- src/lookup/phonetic_lookup.cpp | 33 --------------------------------- src/lookup/phonetic_lookup.h | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/lookup/phonetic_lookup.cpp b/src/lookup/phonetic_lookup.cpp index 8f48755..03cce60 100644 --- a/src/lookup/phonetic_lookup.cpp +++ b/src/lookup/phonetic_lookup.cpp @@ -66,39 +66,6 @@ static bool trellis_value_less_than(trellis_value_t * lhs, return lhs->m_poss < rhs->m_poss; } -/* use maximum heap to get the topest results. */ -bool get_top_results(size_t num, - /* out */ GPtrArray * topresults, - /* in */ GPtrArray * candidates) { - g_ptr_array_set_size(topresults, 0); - - if (0 == candidates->len) - return false; - - trellis_value_t ** begin = - (trellis_value_t **) &g_ptr_array_index(candidates, 0); - trellis_value_t ** end = - (trellis_value_t **) &g_ptr_array_index(candidates, candidates->len); - - std_lite::make_heap(begin, end, trellis_value_less_than); - - while (end != begin) { - trellis_value_t * one = *begin; - g_ptr_array_add(topresults, one); - - std_lite::pop_heap(begin, end, trellis_value_less_than); - --end; - - if (topresults->len >= num) - break; - } - - /* dump_all_values(topresults); */ - - return true; -} - - int ForwardPhoneticConstraints::add_constraint(size_t start, size_t end, phrase_token_t token) { diff --git a/src/lookup/phonetic_lookup.h b/src/lookup/phonetic_lookup.h index fc8272f..aab8a00 100644 --- a/src/lookup/phonetic_lookup.h +++ b/src/lookup/phonetic_lookup.h @@ -127,12 +127,41 @@ struct trellis_constraint_t { typedef phrase_token_t lookup_key_t; /* Key: lookup_key_t, Value: int m, index to m_steps_content[i][m] */ typedef GHashTable * LookupStepIndex; - /* Array of trellis_node */ +/* Array of trellis_node */ typedef GArray * LookupStepContent; +/* use maximum heap to get the topest results. */ +template bool get_top_results(size_t num, /* out */ GPtrArray * topresults, - /* in */ GPtrArray * candidates); + /* in */ GPtrArray * candidates) { + g_ptr_array_set_size(topresults, 0); + + if (0 == candidates->len) + return false; + + trellis_value_t ** begin = + (trellis_value_t **) &g_ptr_array_index(candidates, 0); + trellis_value_t ** end = + (trellis_value_t **) &g_ptr_array_index(candidates, candidates->len); + + std_lite::make_heap(begin, end, trellis_value_less_than); + + while (end != begin) { + trellis_value_t * one = *begin; + g_ptr_array_add(topresults, one); + + std_lite::pop_heap(begin, end, trellis_value_less_than); + --end; + + if (topresults->len >= num) + break; + } + + /* dump_all_values(topresults); */ + + return true; +} template class ForwardPhoneticTrellis { @@ -285,7 +314,7 @@ public: GPtrArray * candidates = g_ptr_array_new(); get_candidates(tail_index, candidates); - get_top_results(nbest, tails, candidates); + get_top_results(nbest, tails, candidates); g_ptr_array_free(candidates, TRUE); return true; -- cgit