Julius 4.1.5
libsent/src/ngram/ngram_malloc.c
説明を見る。
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/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 
00045   return(new);
00046 }
00047 
00048 static void
00049 free_ngram_tuple(NGRAM_TUPLE_INFO *t)
00050 {
00051   if (t->is24bit) {
00052     if (t->bgn_upper) free(t->bgn_upper);
00053     if (t->bgn_lower) free(t->bgn_lower);
00054   } else {
00055     if (t->bgn) free(t->bgn);
00056   }
00057   if (t->num) free(t->num);
00058   if (t->nnid2wid) free(t->nnid2wid);
00059   free(t->prob);
00060   if (t->bo_wt) free(t->bo_wt);
00061   if (t->nnid2ctid_upper) free(t->nnid2ctid_upper);
00062   if (t->nnid2ctid_lower) free(t->nnid2ctid_lower);
00063 }
00069 void
00070 ngram_info_free(NGRAM_INFO *ndata)
00071 {
00072   int i;
00073   /* bin test only */
00074   /* free word names */
00075   if (ndata->from_bin) {
00076     free(ndata->wname[0]);
00077     free(ndata->wname);
00078   } else {
00079     WORD_ID w;
00080     for(w=0;w<ndata->max_word_num;w++) {
00081       free(ndata->wname[w]);
00082     }
00083     free(ndata->wname);
00084   }
00085   /* free 2-gram for the 1st pass */
00086   if (ndata->bo_wt_1) free(ndata->bo_wt_1);
00087   if (ndata->p_2) free(ndata->p_2);
00088   /* free n-gram */
00089   if (ndata->d) {
00090     for(i=0;i<ndata->n;i++) {
00091       free_ngram_tuple(&(ndata->d[i]));
00092     }
00093     free(ndata->d);
00094   }
00095   /* free name index tree */
00096   free_ptree(ndata->root);
00097   /* free whole */
00098   free(ndata);
00099 }