Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

rdhmmdef_var.c

Go to the documentation of this file.
00001 
00017 /*
00018  * Copyright (c) 1991-2006 Kawahara Lab., Kyoto University
00019  * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
00020  * Copyright (c) 2005-2006 Julius project team, Nagoya Institute of Technology, Nagoya Institute of Technology
00021  * All rights reserved
00022  */
00023 
00024 /* currenty cannot treat other sub macros (~u,~i,~x) */
00025 
00026 #include <sent/stddefs.h>
00027 #include <sent/htk_hmm.h>
00028 
00029 extern char *rdhmmdef_token;    
00030 
00036 static HTK_HMM_Var *
00037 var_new()
00038 {
00039   HTK_HMM_Var *new;
00040 
00041   new = (HTK_HMM_Var *)mymalloc(sizeof(HTK_HMM_Var));
00042 
00043   new->name = NULL;
00044   new->vec = NULL;
00045   new->len = 0;
00046   new->next = NULL;
00047 
00048   return(new);
00049 }
00050 
00057 void
00058 var_add(HTK_HMM_INFO *hmm, HTK_HMM_Var *new)
00059 {
00060   HTK_HMM_Var *match;
00061 
00062   /* link data structure */
00063   new->next = hmm->vrstart;
00064   hmm->vrstart = new;
00065   
00066   if (new->name != NULL) {
00067     /* add index to search index tree */
00068     if (hmm->vr_root == NULL) {
00069       hmm->vr_root = aptree_make_root_node(new);
00070     } else {
00071       match = aptree_search_data(new->name, hmm->vr_root);
00072       if (strmatch(match->name, new->name)) {
00073         j_printerr("Error: ~v \"%s\" is already defined\n", new->name);
00074         rderr(NULL);
00075       } else {
00076         aptree_add_entry(new->name, new, match->name, &(hmm->vr_root));
00077       }
00078     }
00079   }
00080   
00081 }
00082 
00091 static HTK_HMM_Var *
00092 var_lookup(HTK_HMM_INFO *hmm, char *keyname)
00093 {
00094   HTK_HMM_Var *v;
00095 
00096   v = aptree_search_data(keyname, hmm->vr_root);
00097   if (strmatch(v->name, keyname)) {
00098     return v;
00099   } else {
00100     return NULL;
00101   }
00102 }
00103 
00117 static HTK_HMM_Var *
00118 var_read(FILE *fp)
00119 {
00120   HTK_HMM_Var *new;
00121   int i;
00122 
00123   new = var_new();
00124 
00125   /* read covariance matrix (diagonal vector) */
00126 
00127   if (!currentis("VARIANCE")) {
00128     j_printerr("variance matrix type \"%s\" not supported\n", rdhmmdef_token);
00129     rderr(NULL);
00130   } else {
00131     read_token(fp);
00132     NoTokErr("missing VARIANCE vector length");
00133     new->len = atoi(rdhmmdef_token);
00134     read_token(fp);
00135     new->vec = (VECT *)mybmalloc(sizeof(VECT) * new->len);
00136     /* needs comversion if integerized */
00137     for (i=0;i<new->len;i++) {
00138       NoTokErr("missing some VARIANCE element");
00139       new->vec[i] = (VECT)atof(rdhmmdef_token);
00140       read_token(fp);
00141     }
00142   }
00143 
00144   return (new);
00145 }
00146 
00160 HTK_HMM_Var *
00161 get_var_data(FILE *fp, HTK_HMM_INFO *hmm)
00162 {
00163   HTK_HMM_Var *tmp;
00164 
00165   if (currentis("~v")) {
00166     /* macro reference: lookup and return the pointer */
00167     read_token(fp);
00168     NoTokErr("missing VARIANCE macro name");
00169     tmp = var_lookup(hmm, rdhmmdef_token);
00170     if (tmp == NULL) {
00171       j_printerr("~v \"%s\" not defined\n", rdhmmdef_token);
00172       rderr(NULL);
00173     }
00174     read_token(fp);
00175     return tmp;
00176   } else if (currentis("VARIANCE")){
00177     /* definition: define variance data, and return the pointer */
00178     tmp = var_read(fp);
00179     tmp->name = NULL; /* no name */
00180     var_add(hmm, tmp);
00181     return tmp;
00182   } else {
00183     rderr("no variance data");
00184     return NULL;
00185   }
00186 }
00187 
00195 void
00196 def_var_macro(char *name, FILE *fp, HTK_HMM_INFO *hmm)
00197 {
00198   HTK_HMM_Var *new;
00199 
00200   
00201   /* read in data and return newly malloced data */
00202   new = var_read(fp);
00203 
00204   /* register it to the grobal HMM structure */
00205   new->name = name;
00206   var_add(hmm, new);
00207 }

Generated on Tue Mar 28 16:01:39 2006 for Julius by  doxygen 1.4.2