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