/** * @file ngram_malloc.c * * * @brief N-gram構造体の初期メモリ確保と解放 * * * * @brief Initial memory allocation and free for N-gram stucture * * * @author Akinobu LEE * @date Wed Feb 16 16:48:56 2005 * * $Revision: 1.8 $ * */ /* * Copyright (c) 1991-2012 Kawahara Lab., Kyoto University * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology * Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology * All rights reserved */ #include #include /** * Allocate a new N-gram structure. * * @return pointer to the newly allocated structure. */ NGRAM_INFO * ngram_info_new() { NGRAM_INFO *new; new = (NGRAM_INFO *)mymalloc(sizeof(NGRAM_INFO)); new->n = 0; new->wname = NULL; new->d = NULL; new->bo_wt_1 = NULL; new->p_2 = NULL; new->bos_eos_swap = FALSE; new->mroot = NULL; return(new); } static void free_ngram_tuple(NGRAM_TUPLE_INFO *t) { if (t->is24bit) { if (t->bgn_upper) free(t->bgn_upper); if (t->bgn_lower) free(t->bgn_lower); } else { if (t->bgn) free(t->bgn); } if (t->num) free(t->num); if (t->nnid2wid) free(t->nnid2wid); free(t->prob); if (t->bo_wt) free(t->bo_wt); if (t->nnid2ctid_upper) free(t->nnid2ctid_upper); if (t->nnid2ctid_lower) free(t->nnid2ctid_lower); } /** * Free N-gram data. * * @param ndata [in] N-gram data */ void ngram_info_free(NGRAM_INFO *ndata) { int i; WORD_ID w; /* bin test only */ /* free word names */ if (ndata->from_bin) { if (ndata->wname) { if (ndata->wname[0]) free(ndata->wname[0]); free(ndata->wname); } } else { if (ndata->wname) { for(w=0;wmax_word_num;w++) { if (ndata->wname[w]) free(ndata->wname[w]); } free(ndata->wname); } } /* free 2-gram for the 1st pass */ if (ndata->bo_wt_1) free(ndata->bo_wt_1); if (ndata->p_2) free(ndata->p_2); /* free n-gram */ if (ndata->d) { for(i=0;in;i++) { free_ngram_tuple(&(ndata->d[i])); } free(ndata->d); } /* free name index tree */ if (ndata->mroot) mybfree2(&(ndata->mroot)); /* free whole */ free(ndata); }