1  /************************************************************************/
2  /*                                                                      */
3  /*                Centre for Speech Technology Research                 */
4  /*                     University of Edinburgh, UK                      */
5  /*                       Copyright (c) 1996,1997                        */
6  /*                        All Rights Reserved.                          */
7  /*                                                                      */
8  /*  Permission is hereby granted, free of charge, to use and distribute */
9  /*  this software and its documentation without restriction, including  */
10  /*  without limitation the rights to use, copy, modify, merge, publish, */
11  /*  distribute, sublicense, and/or sell copies of this work, and to     */
12  /*  permit persons to whom this work is furnished to do so, subject to  */
13  /*  the following conditions:                                           */
14  /*   1. The code must retain the above copyright notice, this list of   */
15  /*      conditions and the following disclaimer.                        */
16  /*   2. Any modifications must be clearly marked as such.               */
17  /*   3. Original authors' names are not deleted.                        */
18  /*   4. The authors' names are not used to endorse or promote products  */
19  /*      derived from this software without specific prior written       */
20  /*      permission.                                                     */
21  /*                                                                      */
22  /*  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK       */
23  /*  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING     */
24  /*  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT  */
25  /*  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE    */
26  /*  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   */
27  /*  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN  */
28  /*  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,         */
29  /*  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF      */
30  /*  THIS SOFTWARE.                                                      */
31  /*                                                                      */
32  /*************************************************************************/
33  /*                                                                       */
34  /*                 Author: Richard Caley (rjc@cstr.ed.ac.uk)             */
35  /*                                                                       */
36  /* --------------------------------------------------------------------  */
37  /* A class encapsulating the mechanics of objects which have features.   */
38  /*                                                                       */
39  /*************************************************************************/
40 
41 #include "EST_Featured.h"
42 
43 
EST_Featured(void)44 EST_Featured::EST_Featured(void)
45 {
46   init_features();
47 }
48 
EST_Featured(const EST_Featured & f)49 EST_Featured::EST_Featured(const EST_Featured &f)
50 {
51   init_features();
52   copy_features(f);
53 }
54 
55 
~EST_Featured(void)56 EST_Featured::~EST_Featured(void)
57 {
58   clear_features();
59 }
60 
init_features()61 void EST_Featured::init_features()
62 {
63   p_features=NULL;
64 }
65 
clear_features()66 void EST_Featured::clear_features()
67 {
68   if (p_features)
69     {
70       delete p_features;
71       p_features=NULL;
72     }
73   init_features();
74 }
75 
f_Val(const char * name) const76 const EST_Val &EST_Featured::f_Val(const char *name) const
77 {
78     if (p_features)
79 	return p_features->val(name);
80     else
81 	return EST_Features::feature_default_value;
82 }
83 
f_Val(const char * name,const EST_Val & def) const84 const EST_Val &EST_Featured::f_Val(const char *name, const EST_Val &def) const
85 {
86     if (p_features)
87 	return p_features->val(name);
88     else
89 	return def;
90 }
91 
copy_features(const EST_Featured & f)92 void EST_Featured::copy_features(const EST_Featured &f)
93 {
94   clear_features();
95 
96   if (f.p_features)
97     p_features = new EST_Features(*(f.p_features));
98 }
99 
100 #if defined(INSTANTIATE_TEMPLATES)
101 
102 typedef EST_TKVI<EST_String, EST_Val> EST_Featured_Entry;
103 Instantiate_TStructIterator_T(EST_Featured, EST_Featured::IPointer_feat,EST_Featured_Entry, Featured_itt)
104 Instantiate_TIterator_T(EST_Featured, EST_Featured::IPointer_feat,EST_Featured_Entry, Featured_itt)
105 #endif
106