Julius 4.2
libsent/src/ngram/ngram_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/ngram2.h>
00027 
00033 NGRAM_INFO *
00034 ngram_info_new()
00035 {
00036   NGRAM_INFO *new;
00037 
00038   new = (NGRAM_INFO *)mymalloc(sizeof(NGRAM_INFO));
00039   new->n = 0;
00040   new->d = NULL;
00041   new->bo_wt_1 = NULL;
00042   new->p_2 = NULL;
00043   new->bos_eos_swap = FALSE;
00044   new->mroot = NULL;
00045 
00046   return(new);
00047 }
00048 
00049 static void
00050 free_ngram_tuple(NGRAM_TUPLE_INFO *t)
00051 {
00052   if (t->is24bit) {
00053     if (t->bgn_upper) free(t->bgn_upper);
00054     if (t->bgn_lower) free(t->bgn_lower);
00055   } else {
00056     if (t->bgn) free(t->bgn);
00057   }
00058   if (t->num) free(t->num);
00059   if (t->nnid2wid) free(t->nnid2wid);
00060   free(t->prob);
00061   if (t->bo_wt) free(t->bo_wt);
00062   if (t->nnid2ctid_upper) free(t->nnid2ctid_upper);
00063   if (t->nnid2ctid_lower) free(t->nnid2ctid_lower);
00064 }
00070 void
00071 ngram_info_free(NGRAM_INFO *ndata)
00072 {
00073   int i;
00074   /* bin test only */
00075   /* free word names */
00076   if (ndata->from_bin) {
00077     free(ndata->wname[0]);
00078     free(ndata->wname);
00079   } else {
00080     WORD_ID w;
00081     for(w=0;w<ndata->max_word_num;w++) {
00082       free(ndata->wname[w]);
00083     }
00084     free(ndata->wname);
00085   }
00086   /* free 2-gram for the 1st pass */
00087   if (ndata->bo_wt_1) free(ndata->bo_wt_1);
00088   if (ndata->p_2) free(ndata->p_2);
00089   /* free n-gram */
00090   if (ndata->d) {
00091     for(i=0;i<ndata->n;i++) {
00092       free_ngram_tuple(&(ndata->d[i]));
00093     }
00094     free(ndata->d);
00095   }
00096   /* free name index tree */
00097   if (ndata->mroot) mybfree2(&(ndata->mroot));
00098   /* free whole */
00099   free(ndata);
00100 }