Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtinfo / DtMmdb / StyleSheet / VariableTable.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 // $XConsortium: VariableTable.cc /main/3 1996/06/11 17:09:55 cde-hal $
24 //
25 #include "Types.h"
26 #include "VariableTable.h"
27
28 static unsigned hash(const Symbol& key)
29 {
30    return key.hash();
31 }
32
33 VariableTable::VariableTable()
34 : hashTable<Symbol,Expression>(hash)
35 {
36 }
37
38 VariableTable::~VariableTable()
39 {
40   clearAndDestroy();
41 }
42
43 unsigned int
44 VariableTable::exists(const Symbol &name) const
45 {
46   return contains(&name);
47 }
48 void
49 VariableTable::enter(const Symbol &name, Expression *value)
50 {
51   Expression *exp = findValue(&name);
52   if (exp)
53     {
54       Symbol *sym = remove(&name);
55       delete sym ;
56       delete exp ;
57     }
58   insertKeyAndValue(new Symbol(name), value);
59 }
60
61 const Expression &
62 VariableTable::lookup(const Symbol &name) const
63 {
64   return *findValue(&name);
65 }
66
67 ostream &
68 VariableTable::print(ostream &o) const
69 {
70   hashTableIterator<Symbol,Expression>
71     next(*(hashTable<Symbol,Expression>*)this); // cast to
72                                                            // non-const  
73
74   while (++next)
75     o << *next.key() << "\t" << *next.value() << endl;
76
77   return o << endl;
78 }
79
80 ostream &operator <<(ostream &o, const VariableTable &v)
81 {
82   return v.print(o);
83 }