summaryrefslogtreecommitdiffstats
path: root/src/lookup/phonetic_lookup_heap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lookup/phonetic_lookup_heap.h')
-rw-r--r--src/lookup/phonetic_lookup_heap.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/lookup/phonetic_lookup_heap.h b/src/lookup/phonetic_lookup_heap.h
index 13a2360..25e69fe 100644
--- a/src/lookup/phonetic_lookup_heap.h
+++ b/src/lookup/phonetic_lookup_heap.h
@@ -54,13 +54,14 @@ public:
/* return true if the item is stored into m_elements. */
bool eval_item(const trellis_value_t * item) {
+
/* min heap here, and always push heap. */
/* still have space */
if (m_nelem < nbest) {
m_elements[m_nelem] = *item;
m_nelem ++;
- push_heap(begin(), end(), trellis_value_more_than<nbest>);
+ std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_more_than<nbest>);
return true;
}
@@ -69,9 +70,9 @@ public:
/* compare new item */
if (item->m_poss > min->m_poss) {
- pop_heap(begin(), end(), trellis_value_more_than<nbest>);
+ std_lite::pop_heap(m_elements, m_elements + m_nelem, trellis_value_more_than<nbest>);
m_elements[m_nelem - 1] = *item;
- push_heap(begin(), end(), trellis_value_more_than<nbest>);
+ std_lite::push_heap(m_elements, m_elements + m_nelem, trellis_value_more_than<nbest>);
return true;
}
@@ -97,8 +98,20 @@ public:
const trellis_value_t * begin() { return &m_element; }
const trellis_value_t * end() { return &m_element + 1; }
+ bool number() {
+ m_element.m_current_index = 0;
+ return true;
+ }
+
/* return true if the item is stored into m_element. */
bool eval_item(const trellis_value_t * item) {
+
+ /* no item yet. */
+ if (0 == m_element.m_sentence_length) {
+ m_element = *item;
+ return true;
+ }
+
if (trellis_value_less_than<1>(&m_element, item)) {
m_element = *item;
return true;