1 /*---------------------------------------------------------------------------* 2 * SR_SemanticGraphImpl.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_SEMANTICGRAPHIMPL_H 21 #define __SR_SEMANTICGRAPHIMPL_H 22 23 24 25 #include "SR_SemprocPrefix.h" 26 #include "SR_SemanticGraph.h" 27 #include "pstdio.h" 28 #include "ptypes.h" 29 #include "ESR_ReturnCode.h" 30 31 /** 32 * SREC stuff 33 */ 34 #include "srec_context.h" 35 36 37 /** 38 * SR_SemanticGraph implementation. 39 */ 40 typedef struct SR_SemanticGraphImpl_t 41 { 42 /** 43 * Interface functions that must be implemented. 44 */ 45 SR_SemanticGraph Interface; 46 47 /** 48 * Input labels are words in a spoken utterance. 49 * These words are the SAME as those used by the recogizer graph, so I want to 50 * reuse that data rather than duplicate it. 51 * Withing this module, ilabls are constant... they are owned and may only be changed 52 * externally by AddWordToSlot() for example 53 */ 54 wordmap* ilabels; 55 56 /** 57 * The word map containing the actual scripts. The index of teh script in the wordmap 58 * corresponds to the index found in the graph minus the script_olabel_offset 59 */ 60 wordmap* scripts; 61 62 /** 63 * Integer offset for referencing script output labels when mapping between 64 * integer ids, and their respective string values. 65 */ 66 labelID script_olabel_offset; /* starts at SEMGRAPH_SCRIPT_OFFSET */ 67 68 /** 69 * Output labels for end of scope markers. These are of the form 70 * "rule_name}" 71 * This is pretty static doesen't change 72 */ 73 wordmap* scopes_olabels; 74 75 /** 76 * Integer offset for referencing end of scope output labels when mapping between 77 * integer ids, and their respective string values. 78 */ 79 size_t scopes_olabel_offset; /* starts at SEMGRAPH_SCOPE_OFFSET */ 80 81 /** 82 * Double linked list of arcs forming graph 83 * ilables are integers which map to words in the word maps 84 * olabels are integers which map to words in the word maps 85 */ 86 arc_token* arc_token_list; 87 88 /** 89 * The arc where additional words may be added on to (see addWordToSlot) 90 * Only Root slot supported for now. 91 */ 92 arc_token* arc_token_insert_start; 93 94 /** 95 * The end node for dynamically added words. 96 */ 97 arc_token* arc_token_insert_end; 98 99 /** 100 * Free list of arcs for dynamic add word to slot. 101 */ 102 arc_token* arc_token_freelist; 103 104 /** 105 * The number of arcs in the graph 106 */ 107 arcID arc_token_list_len; 108 109 /* slot addition */ 110 arc_token* arcs_for_slot[MAX_NUM_SLOTS]; 111 112 } 113 SR_SemanticGraphImpl; 114 115 /* internal functions */ 116 arc_token* arc_tokens_find_ilabel(arc_token* base, arc_token* arc_token_list, wordID wdid); 117 arc_token* arc_tokens_get_free(arc_token* base, arc_token** arc_token_freelist); 118 119 /** 120 * Default implementation. 121 */ 122 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Destroy(SR_SemanticGraph* self); 123 /** 124 * Default implementation. 125 */ 126 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Load(SR_SemanticGraph* self, wordmap* ilabels, const LCHAR* basename, int num_words_to_add); 127 /** 128 * Default implementation. 129 */ 130 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Unload(SR_SemanticGraph* self); 131 /** 132 * Default implementation. 133 */ 134 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Save(SR_SemanticGraph* self, const LCHAR* filename, int version_number); 135 /** 136 * Default implementation. 137 */ 138 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_AddWordToSlot(SR_SemanticGraph* self, const LCHAR* slot, const LCHAR* word, const LCHAR* tag, const ESR_BOOL maybeMultiMeaning); 139 /** 140 * Default implementation. 141 */ 142 SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Reset(SR_SemanticGraph* self); 143 144 #endif /* __SR_SEMANTICGRAPHIMPL_H */ 145