14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  lts_seq_internal.h  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef _LTS_SEQ_INTERNAL_H__
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define _LTS_SEQ_INTERNAL_H__
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NO_NODE 10000
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_WORD_LEN 50
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define LTS_MAXCHAR 255
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_CONS_COMB 100
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_NUM_CONTEXT 5
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NUM_STRESS_LVL 3 /* SS1, SS2, SS0 */
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Question types:
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * this enum cannot be changed for a given DATA file
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef enum {
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  UnKnown = 0,
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left1,
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left2,
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left3,
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left4,
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left5,     /*5*/
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right1,
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right2,
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right3,
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right4,
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right5,    /*10*/
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LeftPhone1,
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LetInWord,
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  SylInWord,
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  WordLen,
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Syl2InWord, /*15*/
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  SylInRoot,
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Syl2InRoot,
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LeftString,
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  RightString,
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Left_DFRE,      /*20*/  /*DFRE = distance from root edge*/
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Right_DFRE,      /*DFRE = distance from root edge*/
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  NumQuestionTypes
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} QuestionType;
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct LQUESTION {
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char num_list;
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char type;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char *list;	/*list of items to match against for question*/
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned short membership[16]; // UCHAR_MAX/sizeof(unsigned short)/8
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} LQUESTION;
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SKIP_LDP_PROPERTIES
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct LDP {
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char letter;
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char left_context[MAX_NUM_CONTEXT];
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char right_context[MAX_NUM_CONTEXT];
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char left_phone1;
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char let_in_word;
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char syl_in_word;
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char syl2_in_word;
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char syl_in_root;
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char syl2_in_root;
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char word_len;
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int left_string_index;
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int right_string_index;
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int left_DFRE;  /*DFRE = distance from root edge*/
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int right_DFRE;
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} LDP;
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct LDP {
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned char letter;
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int properties[ NumQuestionTypes];
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} LDP;
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*RT tree is the compact representations of the trees
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Got rid of the NODE structures in order to save the overhead.
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Instead, the two arrays below are indexed by node_index
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct RT_LTREE {
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  short *values_or_question1;  /*if leaf node, this is the value at the node.  If not, this
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project				 is the index into the questions*/
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  short *question2;   /*also used to hold backoff_output for leaf nodes*/
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  short *left_nodes;   /*right_node_index is always left_nodex+1, so just store left.
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project			 If = MAX_NODES, then this is a leaf node*/
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_nodes;
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} RT_LTREE;
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct LM { /*letter mappings*/
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char *letters;
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char *type;
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_letters;
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int letter_index_for_letter[UCHAR_MAX+1];
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} LM;
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct PM { /*phone mappings*/
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char **phones;
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_phones;
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  void* phoneH; /* hash table if any */
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} PM;
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct LTS {
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char **outputs;
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char **input_for_output;
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_outputs;
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char **strings;
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_strings;
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char *string_lens;
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  unsigned short membership[16]; // UCHAR_MAX/sizeof(unsigned short)/8
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  RT_LTREE **trees;
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LQUESTION **questions;
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LM *letter_mapping;
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PM *phone_mapping;
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  LDP dp;
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  char *allowable_cons_comb[MAX_CONS_COMB];
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_cons_comb;
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  void* allowable_cons_combH; /* hash table */
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_letters;
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int num_questions;
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} LTS;
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* check for combinations of LTS phones to substitute for ETI phones */
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* LTS_ETI_PHONES are defined in a language specific header file slts_phone_def.h */
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid replace_eti_phones(char *dest, char *src);
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid *lts_alloc(int num, int size);
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* _LTS_SEQ_INTERNAL_H__ */
158