Julius 4.2
libsent/src/voca/voca_malloc.c
説明を見る。
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