• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*---------------------------------------------------------------------------*
2  *  SR_SymbolTable.h  *
3  *                                                                           *
4  *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5  *                                                                           *
6  *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7  *  you may not use this file except in compliance with the License.         *
8  *                                                                           *
9  *  You may obtain a copy of the License at                                  *
10  *      http://www.apache.org/licenses/LICENSE-2.0                           *
11  *                                                                           *
12  *  Unless required by applicable law or agreed to in writing, software      *
13  *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15  *  See the License for the specific language governing permissions and      *
16  *  limitations under the License.                                           *
17  *                                                                           *
18  *---------------------------------------------------------------------------*/
19 
20 #ifndef __SR_SYMBOLTABLE_H
21 #define __SR_SYMBOLTABLE_H
22 
23 
24 
25 #include "SR_SemprocPrefix.h"
26 #include "SR_SemprocDefinitions.h"
27 
28 #include "ESR_ReturnCode.h"
29 
30 #include "HashMap.h"
31 
32 #include "ptypes.h"
33 #include "pstdio.h"
34 
35 #define MAX_SEMPROC_KEY   128 /* was 350 */
36 #define MAX_SEMPROC_VALUE 512 /* was 300 */
37 
38 /**
39  * Entries in the Symbol table are symbols i.e. key-value pairs.
40  */
41 typedef struct Symbol_t
42 {
43   /**
44    * key string
45    */
46   LCHAR key[MAX_SEMPROC_KEY];
47   /**
48    * value string
49    */
50   LCHAR value[MAX_SEMPROC_VALUE];
51 }
52 Symbol;
53 
54 /**
55  * The Symbol Table
56  */
57 typedef struct SymbolTable_t
58 {
59   /**
60    * Keep track of symbols using a hashmap of pointers
61    */
62   HashMap* hashmap;
63 
64   /**
65    * The symbols stored as an array
66    */
67   Symbol Symbols[MAX_SYMBOLS];
68 
69   /**
70    * Pointer to the next available symbol slot for storing a symbol in the array
71    */
72   Symbol *next;
73 
74   /**
75    * Any special symbols that are set prior to semantic processing and read by the semantic processor
76    */
77   Symbol SpecialSymbols[MAX_SPECIAL_SYMBOLS];
78 
79   /**
80    * The number of special symbols set.
81    */
82   size_t num_special_symbols;
83 
84 }
85 SymbolTable;
86 
87 /**
88  * The "undefined" symbol value
89  */
90 //static LCHAR undefined_symbol[] = UNDEFINED_SYMBOL;
91 
92 /**
93  * Create and Initialize
94  * @param self pointer to the newly created object
95  */
96 SREC_SEMPROC_API ESR_ReturnCode ST_Init(SymbolTable** self);
97 
98 /**
99  * Free
100  * @param self pointer to the symbol table
101  */
102 SREC_SEMPROC_API ESR_ReturnCode ST_Free(SymbolTable* self);
103 
104 /**
105  * Copies the symbols to a new hashmap (creates values dynamically)
106  * @param self pointer to the symbol table
107  * @param dst destination hashmap
108  */
109 ESR_ReturnCode ST_Copy(SymbolTable* self, HashMap* dst);
110 
111 /**
112  * Store a key value pair
113  * @param self pointer to the symbol table
114  * @param key the key for the entry
115  * @param value the value for the entry (associated with key)
116  */
117 SREC_SEMPROC_API ESR_ReturnCode ST_putKeyValue(SymbolTable* self, const LCHAR* key, const LCHAR* value);
118 
119 /**
120  * Retrieve a value associated with the key
121  * @param self pointer to the symbol table
122  * @param key the key for the entry
123  * @param value pointer to buffer for the storing result
124  */
125 SREC_SEMPROC_API ESR_ReturnCode ST_getKeyValue(SymbolTable* self, const LCHAR* key, LCHAR** value);
126 
127 /**
128  * Ask for a new sot in the symbol table
129  * @param self pointer to the symbol table
130  * @param slot pointer to the slot given (NULL if none available)
131  */
132 SREC_SEMPROC_API ESR_ReturnCode ST_getSymbolSlot(SymbolTable* self, Symbol** slot);
133 
134 /**
135  * Reset and clear the Symbol Table for a new script
136  * @param self pointer to the symbol table
137  */
138 SREC_SEMPROC_API ESR_ReturnCode ST_reset(SymbolTable* self);
139 SREC_SEMPROC_API ESR_ReturnCode ST_reset_all(SymbolTable* self);
140 
141 /**
142  * Store a "special" key value pair. These are special symbols that are set prior to semantic
143  * processing and are ONLY read by the semantic processor during processing.
144  * @param self pointer to the symbol table
145  * @param key the key for the entry
146  * @param value the value for the entry (associated with key)
147  */
148 SREC_SEMPROC_API ESR_ReturnCode ST_putSpecialKeyValue(SymbolTable* self, const const LCHAR* key, const LCHAR* value);
149 
150 
151 #endif /* __SYMBOL_TABLE_H */
152