CDictionary::~CDictionary() { for(int i=0;i<CC_NUM;i++) {//delete the memory of word item array in the dictionary for(int j=0;j<m_IndexTable[i].nCount;j++) delete m_IndexTable[i].pWordItemHead[j].sWord; delete [] m_IndexTable[i].pWordItemHead; } DelModified(); }
/********************************************************************* * * Func Name : Load * * Description: Load the dictionary from the file .dct * * * Parameters : sFilename: the file name * * Returns : success or fail * Author : Kevin Zhang * History : * 1.create 2002-1-9 *********************************************************************/ bool CDictionary::Load(char *sFilename,bool bReset) { FILE *fp; int i,j,nBuffer[3]; if((fp=fopen(sFilename,"rb"))==NULL) return false;//fail while opening the file //Release the memory for new files for( i=0;i<CC_NUM;i++) {//delete the memory of word item array in the dictionary for( j=0;j<m_IndexTable[i].nCount;j++) delete m_IndexTable[i].pWordItemHead[j].sWord; delete [] m_IndexTable[i].pWordItemHead; } DelModified(); for(i=0;i<CC_NUM;i++) { fread(&(m_IndexTable[i].nCount),sizeof(int),1,fp); if(m_IndexTable[i].nCount>0) m_IndexTable[i].pWordItemHead=new WORD_ITEM[m_IndexTable[i].nCount]; else { m_IndexTable[i].pWordItemHead=0; continue; } j=0; while(j<m_IndexTable[i].nCount) { fread(nBuffer,sizeof(int),3,fp); m_IndexTable[i].pWordItemHead[j].sWord=new char[nBuffer[1]+1]; if(nBuffer[1])//String length is more than 0 { fread(m_IndexTable[i].pWordItemHead[j].sWord,sizeof(char),nBuffer[1],fp); } m_IndexTable[i].pWordItemHead[j].sWord[nBuffer[1]]=0; if(bReset)//Reset the frequency m_IndexTable[i].pWordItemHead[j].nFrequency=0; else m_IndexTable[i].pWordItemHead[j].nFrequency=nBuffer[0]; m_IndexTable[i].pWordItemHead[j].nWordLen=nBuffer[1]; m_IndexTable[i].pWordItemHead[j].nHandle=nBuffer[2]; j+=1;//Get next item in the original table. } } fclose(fp); return true; }
void CDictionary::ReleaseDict() { if(m_bReleased) return; //Release the memory for new files int i,j; for( i=0;i<CC_NUM;i++) {//delete the memory of word item array in the dictionary for( j=0;j<m_IndexTable[i].nCount;j++) { if(m_IndexTable[i].pWordItemHead[j].sWord!=NULL) { delete m_IndexTable[i].pWordItemHead[j].sWord; m_IndexTable[i].pWordItemHead[j].sWord=NULL; } } if(m_IndexTable[i].pWordItemHead!=NULL) { delete [] m_IndexTable[i].pWordItemHead; m_IndexTable[i].pWordItemHead=NULL; } } DelModified(); m_bReleased=true; }