libsent/src/voca/voca_malloc.c

Go to the documentation of this file.
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 

Generated on Tue Dec 18 15:59:57 2007 for Julius by  doxygen 1.5.4