00001 00017 /* 00018 * Copyright (c) 1991-2006 Kawahara Lab., Kyoto University 00019 * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology 00020 * Copyright (c) 2005-2006 Julius project team, Nagoya Institute of Technology 00021 * All rights reserved 00022 */ 00023 00024 #include <sent/stddefs.h> 00025 #include <sent/vocabulary.h> 00026 00027 00033 WORD_INFO * 00034 word_info_new() 00035 { 00036 WORD_INFO *new; 00037 00038 new = (WORD_INFO *)mymalloc(sizeof(WORD_INFO)); 00039 new->mroot = NULL; 00040 00041 return(new); 00042 } 00043 00049 void 00050 word_info_free(WORD_INFO *winfo) 00051 { 00052 WORD_ID w; 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 void 00105 winfo_expand(WORD_INFO *winfo) 00106 { 00107 int n; 00108 00109 n = winfo->maxnum; 00110 if (n >= MAX_WORD_NUM) { 00111 j_error("Error: maximum dict size exceeded limit (%d)\n", MAX_WORD_NUM); 00112 } 00113 n += MAXWSTEP; 00114 if (n > MAX_WORD_NUM) n = MAX_WORD_NUM; 00115 00116 winfo->wlen = (unsigned char *)myrealloc(winfo->wlen, sizeof(unsigned char)*n); 00117 winfo->wname = (char **)myrealloc(winfo->wname, sizeof(char *)*n); 00118 winfo->woutput = (char **)myrealloc(winfo->woutput, sizeof(char *)*n); 00119 winfo->wseq = (HMM_Logical ***)myrealloc(winfo->wseq, sizeof(HMM_Logical **)*n); 00120 winfo->wton = (WORD_ID *)myrealloc(winfo->wton, sizeof(WORD_ID)*n); 00121 #ifdef CLASS_NGRAM 00122 winfo->cprob = (LOGPROB *)myrealloc(winfo->cprob, sizeof(LOGPROB)*n); 00123 #endif 00124 winfo->is_transparent = (boolean *)myrealloc(winfo->is_transparent, sizeof(boolean)*n); 00125 winfo->maxnum = n; 00126 } 00127