/* the returned sentence should be freed by g_free(). */
-bool pinyin_get_guessed_setence(pinyin_context_t * context,
+bool pinyin_get_guessed_sentence(pinyin_context_t * context,
char ** sentence);
bool pinyin_parse_one(pinyin_context_t * context,
return true;
}
+bool FacadePhraseIndex::diff(guint8 phrase_index, MemoryChunk * oldchunk,
+ MemoryChunk * newlog){
+ SubPhraseIndex * & sub_phrases = m_sub_phrase_indices[phrase_index];
+ if ( !sub_phrases )
+ return false;
+
+ SubPhraseIndex old_sub_phrases;
+ old_sub_phrases.load(oldchunk, 0, oldchunk->size());
+ PhraseIndexLogger logger;
+
+ bool retval = sub_phrases->diff(&old_sub_phrases, &logger);
+ logger.store(newlog);
+ return retval;
+}
+
+bool FacadePhraseIndex::merge(guint8 phrase_index, MemoryChunk * log){
+ SubPhraseIndex * & sub_phrases = m_sub_phrase_indices[phrase_index];
+ if ( !sub_phrases )
+ return false;
+
+ PhraseIndexLogger logger;
+ logger.load(log);
+
+ return sub_phrases->merge(&logger);
+}
+
bool SubPhraseIndex::load(MemoryChunk * chunk,
table_offset_t offset, table_offset_t end){
//save the memory chunk
bool store(MemoryChunk * new_chunk,
table_offset_t offset, table_offset_t & end);
+ /* switch to logger format to reduce user storage */
+ bool diff(SubPhraseIndex * oldone, PhraseIndexLogger * logger);
+ bool merge(PhraseIndexLogger * logger);
+
/* get token range in this sub phrase */
int get_range(/* out */ PhraseIndexRange & range);
* from m_total_freq
*/
int remove_phrase_item(phrase_token_t token, /* out */ PhraseItem * & item);
+
};
class FacadePhraseIndex{
bool store(guint8 phrase_index, MemoryChunk * new_chunk);
bool unload(guint8 phrase_index);
+ /* load/store logger format.
+ the ownership of oldchunk and log is transfered to here. */
+ bool diff(guint8 phrase_index, MemoryChunk * oldchunk,
+ MemoryChunk * newlog);
+ bool merge(guint8 phrase_index, MemoryChunk * log);
+
/* compat all SubPhraseIndex m_phrase_content memory usage.*/
bool compat();
m_total_freq -= item->get_unigram_frequency();
return result;
}
+
};
};
}
public:
PhraseIndexLogger():m_offset(0){
- m_chunk = NULL;
+ m_chunk = new MemoryChunk;
}
~PhraseIndexLogger(){
size_t len = 0;
m_chunk->get_content(offset, &len, sizeof(size_t));
offset += sizeof(size_t);
- newone->set_content(0, m_chunk->begin() + offset, len);
+ newone->set_content(0, ((char *)m_chunk->begin()) + offset, len);
offset += len;
break;
}
size_t len = 0;
m_chunk->get_content(offset, &len, sizeof(size_t));
offset += sizeof(size_t);
- oldone->set_content(0, m_chunk->begin() + offset, len);
+ oldone->set_content(0, ((char *)m_chunk->begin()) + offset, len);
offset += len;
break;
}
offset += sizeof(size_t);
m_chunk->get_content(offset, &newlen, sizeof(size_t));
offset += sizeof(size_t);
- oldone->set_content(0, m_chunk->begin() + offset, oldlen);
+ oldone->set_content(0, ((char *)m_chunk->begin()) + offset,
+ oldlen);
offset += oldlen;
- newone->set_content(0, m_chunk->begin() + offset, newlen);
+ newone->set_content(0, ((char *)m_chunk->begin()) + offset, newlen);
offset += newlen;
break;
}