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; }
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; }