Esempio n. 1
0
int ThesaurusDict::load(const char* filename)
{
	m_file = csr_mmap_file(filename,1);
	if(!m_file)
		return -1; //can not load dict.
	csr_offset_t tm_size = csr_mmap_size(m_file);
	u1* ptr = (u1*)csr_mmap_map(m_file);
	u1* ptr_end = ptr + tm_size;

	_csr_thesaurusdict_fileheader* head_ = (_csr_thesaurusdict_fileheader*)ptr;
	if(strncmp(head_->mg,thdt_head_mgc,4) == 0) {
		if(head_->version == 1) {
			ptr += sizeof(_csr_thesaurusdict_fileheader);
			if(ptr >= ptr_end) return -4; //file broken
			m_da.clear();
			m_da.set_array(ptr,head_->darts_size);
			ptr += m_da.unit_size()*head_->darts_size;
			if(ptr >= ptr_end) return -4; //file broken.
			m_stringpool = ptr;
			ptr += head_->pool_size;
			if(ptr > ptr_end) return -4; //file broken.
		}else{
			return -2;
		}
	}else
		return -3; //bad format

	return 0;
}
Esempio n. 2
0
int SynonymsDict::load(const char* filename)
{
	m_file = csr_mmap_file(filename,0);
	if(!m_file)
		return -1; //can not load dict.
	csr_offset_t tm_size = csr_mmap_size(m_file);
	u1* ptr = (u1*)csr_mmap_map(m_file);
	u1* ptr_end = ptr + tm_size;
	_csr_synonymsdict_fileheader* head_ = (_csr_synonymsdict_fileheader*)ptr;
	if(strncmp(head_->mg,head_mgc,4) == 0) {
		if(head_->version == 1) {
			ptr += sizeof(_csr_synonymsdict_fileheader);
			if(ptr >= ptr_end) return -4; //file broken.
			array_ = (_csr_sybarray_trie*)ptr;
			ptr += sizeof(_csr_sybarray_trie)* head_->darts_size;
			if(ptr >= ptr_end) return -4; //file broken.
			string_pool = (char*)ptr;
			ptr += sizeof(char)*head_->pool_size;
			if(ptr > ptr_end) return -4; //file broken.
		}else{
			return -2; //unsupported version.
		}
	}else
		return -3; //bad format
    
	return 0;
}