| /*************************************************************************/ |
| /* */ |
| /* Language Technologies Institute */ |
| /* Carnegie Mellon University */ |
| /* Copyright (c) 1999 */ |
| /* All Rights Reserved. */ |
| /* */ |
| /* Permission is hereby granted, free of charge, to use and distribute */ |
| /* this software and its documentation without restriction, including */ |
| /* without limitation the rights to use, copy, modify, merge, publish, */ |
| /* distribute, sublicense, and/or sell copies of this work, and to */ |
| /* permit persons to whom this work is furnished to do so, subject to */ |
| /* the following conditions: */ |
| /* 1. The code must retain the above copyright notice, this list of */ |
| /* conditions and the following disclaimer. */ |
| /* 2. Any modifications must be clearly marked as such. */ |
| /* 3. Original authors' names are not deleted. */ |
| /* 4. The authors' names are not used to endorse or promote products */ |
| /* derived from this software without specific prior written */ |
| /* permission. */ |
| /* */ |
| /* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */ |
| /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ |
| /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ |
| /* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */ |
| /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ |
| /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ |
| /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ |
| /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ |
| /* THIS SOFTWARE. */ |
| /* */ |
| /*************************************************************************/ |
| /* Author: Alan W Black (awb@cs.cmu.edu) */ |
| /* Date: December 1999 */ |
| /*************************************************************************/ |
| /* */ |
| /* Utterances */ |
| /* */ |
| /*************************************************************************/ |
| #include "cst_alloc.h" |
| #include "cst_utterance.h" |
| |
| /* utterance functions are the modules that do the meat in synthesis */ |
| CST_VAL_REGISTER_FUNCPTR(uttfunc,cst_uttfunc) |
| |
| cst_utterance *new_utterance() |
| { |
| cst_utterance *u; |
| |
| u = cst_alloc(struct cst_utterance_struct,1); |
| u->ctx = new_alloc_context(128*1024); |
| |
| u->features = new_features_local(u->ctx); |
| u->ffunctions = new_features_local(u->ctx); |
| u->relations = new_features_local(u->ctx); |
| |
| return u; |
| } |
| |
| void delete_utterance(cst_utterance *u) |
| { |
| cst_featvalpair *fp; |
| if (u) |
| { |
| delete_features(u->features); |
| delete_features(u->ffunctions); |
| /* Relation vals don't delete their contents */ |
| for (fp=u->relations->head; fp; fp=fp->next) |
| delete_relation(val_relation(fp->val)); |
| delete_features(u->relations); |
| delete_alloc_context(u->ctx); |
| cst_free(u); |
| } |
| } |
| |
| cst_relation *utt_relation_create(cst_utterance *u,const char *name) |
| { |
| cst_relation *r; |
| |
| utt_relation_delete(u,name); /* remove if already there */ |
| r = new_relation(name,u); |
| feat_set(u->relations,name,relation_val(r)); |
| return r; |
| } |
| |
| int utt_relation_delete(cst_utterance *u,const char *name) |
| { |
| /* Relation vals don't delete their contents */ |
| if (feat_present(u->relations, name)) |
| delete_relation(val_relation(feat_val(u->relations,name))); |
| return feat_remove(u->relations,name); |
| } |
| |
| int utt_relation_present(cst_utterance *u,const char *name) |
| { |
| return feat_present(u->relations,name); |
| } |
| |
| cst_relation *utt_relation(const cst_utterance *u,const char *name) |
| { |
| const cst_val *v = feat_val(u->relations,name); |
| if (v != NULL) |
| return val_relation(v); |
| else |
| { |
| cst_errmsg("Relation: %s not present in utterance\n", |
| name); |
| cst_error(); |
| } |
| return NULL; |
| } |