00001 00018 /* 00019 * Copyright (c) 1991-2007 Kawahara Lab., Kyoto University 00020 * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology 00021 * Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology 00022 * All rights reserved 00023 */ 00024 00025 #include <sent/stddefs.h> 00026 #include <sent/vocabulary.h> 00027 00028 00034 WORD_INFO * 00035 word_info_new() 00036 { 00037 WORD_INFO *new; 00038 00039 new = (WORD_INFO *)mymalloc(sizeof(WORD_INFO)); 00040 new->mroot = NULL; 00041 00042 return(new); 00043 } 00044 00050 void 00051 word_info_free(WORD_INFO *winfo) 00052 { 00053 /* free each word info */ 00054 if (winfo->mroot != NULL) mybfree2(&(winfo->mroot)); 00055 /* free word info */ 00056 free(winfo->wname); 00057 free(winfo->woutput); 00058 free(winfo->wseq); 00059 free(winfo->wlen); 00060 free(winfo->wton); 00061 #ifdef CLASS_NGRAM 00062 free(winfo->cprob); 00063 #endif 00064 free(winfo->is_transparent); 00065 /* free whole */ 00066 free(winfo); 00067 } 00068 00074 void 00075 winfo_init(WORD_INFO *winfo) 00076 { 00077 int n; 00078 00079 n = MAXWSTEP; 00080 winfo->wlen = (unsigned char *)mymalloc(sizeof(unsigned char)*n); 00081 winfo->wname = (char **)mymalloc(sizeof(char *)*n); 00082 winfo->woutput = (char **)mymalloc(sizeof(char *)*n); 00083 winfo->wseq = (HMM_Logical ***)mymalloc(sizeof(HMM_Logical **)*n); 00084 winfo->wton = (WORD_ID *)mymalloc(sizeof(WORD_ID)*n); 00085 #ifdef CLASS_NGRAM 00086 winfo->cprob = (LOGPROB *)mymalloc(sizeof(LOGPROB)*n); 00087 winfo->cwnum = 0; 00088 #endif 00089 winfo->is_transparent = (boolean *)mymalloc(sizeof(boolean)*n); 00090 winfo->maxnum = n; 00091 winfo->num = 0; 00092 winfo->head_silwid = winfo->tail_silwid = WORD_INVALID; 00093 winfo->maxwn = 0; 00094 winfo->maxwlen = 0; 00095 winfo->errnum = 0; 00096 winfo->errph_root = NULL; 00097 } 00098 00104 boolean 00105 winfo_expand(WORD_INFO *winfo) 00106 { 00107 int n; 00108 00109 n = winfo->maxnum; 00110 if (n >= MAX_WORD_NUM) { 00111 jlog("Error: voca_malloc: maximum dict size exceeded limit (%d)\n", MAX_WORD_NUM); 00112 return FALSE; 00113 } 00114 n *= 2; 00115 if (n > MAX_WORD_NUM) n = MAX_WORD_NUM; 00116 00117 winfo->wlen = (unsigned char *)myrealloc(winfo->wlen, sizeof(unsigned char)*n); 00118 winfo->wname = (char **)myrealloc(winfo->wname, sizeof(char *)*n); 00119 winfo->woutput = (char **)myrealloc(winfo->woutput, sizeof(char *)*n); 00120 winfo->wseq = (HMM_Logical ***)myrealloc(winfo->wseq, sizeof(HMM_Logical **)*n); 00121 winfo->wton = (WORD_ID *)myrealloc(winfo->wton, sizeof(WORD_ID)*n); 00122 #ifdef CLASS_NGRAM 00123 winfo->cprob = (LOGPROB *)myrealloc(winfo->cprob, sizeof(LOGPROB)*n); 00124 #endif 00125 winfo->is_transparent = (boolean *)myrealloc(winfo->is_transparent, sizeof(boolean)*n); 00126 winfo->maxnum = n; 00127 00128 return TRUE; 00129 } 00130