summaryrefslogtreecommitdiffstats
path: root/src/lookup
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2017-01-19 17:24:29 +0800
committerPeng Wu <alexepico@gmail.com>2017-01-19 17:24:29 +0800
commit581156b5e80b3be00131d2338d7dc6424f91af34 (patch)
treec136e27857df565febaaf40616696368e2d2c86e /src/lookup
parent05e009b90626d989349e9cf60e2af45aac4a4ffe (diff)
downloadlibpinyin-581156b5e80b3be00131d2338d7dc6424f91af34.tar.gz
libpinyin-581156b5e80b3be00131d2338d7dc6424f91af34.tar.xz
libpinyin-581156b5e80b3be00131d2338d7dc6424f91af34.zip
move get_top_results function
Diffstat (limited to 'src/lookup')
-rw-r--r--src/lookup/phonetic_lookup.cpp33
-rw-r--r--src/lookup/phonetic_lookup.h35
2 files changed, 32 insertions, 36 deletions
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<gint32 nbest>
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<nbest>);
+
+ while (end != begin) {
+ trellis_value_t * one = *begin;
+ g_ptr_array_add(topresults, one);
+
+ std_lite::pop_heap(begin, end, trellis_value_less_than<nbest>);
+ --end;
+
+ if (topresults->len >= num)
+ break;
+ }
+
+ /* dump_all_values(topresults); */
+
+ return true;
+}
template <gint32 nbest>
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>(nbest, tails, candidates);
g_ptr_array_free(candidates, TRUE);
return true;