blob: d1edc57b68e68c8ea6d490ecd26acb8cf630857a [file] [log] [blame]
/*---------------------------------------------------------------------------*
* SR_SemanticGraphImpl.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#ifndef __SR_SEMANTICGRAPHIMPL_H
#define __SR_SEMANTICGRAPHIMPL_H
#include "SR_SemprocPrefix.h"
#include "SR_SemanticGraph.h"
#include "pstdio.h"
#include "ptypes.h"
#include "ESR_ReturnCode.h"
/**
* SREC stuff
*/
#include "srec_context.h"
/**
* SR_SemanticGraph implementation.
*/
typedef struct SR_SemanticGraphImpl_t
{
/**
* Interface functions that must be implemented.
*/
SR_SemanticGraph Interface;
/**
* Input labels are words in a spoken utterance.
* These words are the SAME as those used by the recogizer graph, so I want to
* reuse that data rather than duplicate it.
* Withing this module, ilabls are constant... they are owned and may only be changed
* externally by AddWordToSlot() for example
*/
wordmap* ilabels;
/**
* The word map containing the actual scripts. The index of teh script in the wordmap
* corresponds to the index found in the graph minus the script_olabel_offset
*/
wordmap* scripts;
/**
* Integer offset for referencing script output labels when mapping between
* integer ids, and their respective string values.
*/
labelID script_olabel_offset; /* starts at SEMGRAPH_SCRIPT_OFFSET */
/**
* Output labels for end of scope markers. These are of the form
* "rule_name}"
* This is pretty static doesen't change
*/
wordmap* scopes_olabels;
/**
* Integer offset for referencing end of scope output labels when mapping between
* integer ids, and their respective string values.
*/
size_t scopes_olabel_offset; /* starts at SEMGRAPH_SCOPE_OFFSET */
/**
* Double linked list of arcs forming graph
* ilables are integers which map to words in the word maps
* olabels are integers which map to words in the word maps
*/
arc_token* arc_token_list;
/**
* The arc where additional words may be added on to (see addWordToSlot)
* Only Root slot supported for now.
*/
arc_token* arc_token_insert_start;
/**
* The end node for dynamically added words.
*/
arc_token* arc_token_insert_end;
/**
* Free list of arcs for dynamic add word to slot.
*/
arc_token* arc_token_freelist;
/**
* The number of arcs in the graph
*/
arcID arc_token_list_len;
/* slot addition */
arc_token* arcs_for_slot[MAX_NUM_SLOTS];
}
SR_SemanticGraphImpl;
/* internal functions */
arc_token* arc_tokens_find_ilabel(arc_token* base, arc_token* arc_token_list, wordID wdid);
arc_token* arc_tokens_get_free(arc_token* base, arc_token** arc_token_freelist);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Destroy(SR_SemanticGraph* self);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Load(SR_SemanticGraph* self, wordmap* ilabels, const LCHAR* basename, int num_words_to_add);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Unload(SR_SemanticGraph* self);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Save(SR_SemanticGraph* self, const LCHAR* filename, int version_number);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_AddWordToSlot(SR_SemanticGraph* self, const LCHAR* slot, const LCHAR* word, const LCHAR* tag, const ESR_BOOL maybeMultiMeaning);
/**
* Default implementation.
*/
SREC_SEMPROC_API ESR_ReturnCode SR_SemanticGraph_Reset(SR_SemanticGraph* self);
#endif /* __SR_SEMANTICGRAPHIMPL_H */