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