// file: word.h
//
// this is the header for the word class
//
 
// make sure definitions are only made once
//
#ifndef __ISIP_WORD
#define __ISIP_WORD
 
// isip include files
//
#ifndef __ISIP_INTEGRAL
#include <integral.h>
#endif
 
#ifndef __ISIP_INTEGRAL_CONSTANTS
#include <integral_constants.h>
#endif
 
// Word: a class that is used as the word model for the token-passing type
// of decoder
//
class Word {
  
  //---------------------------------------------------------------------------
  //
  // protected data
  //
  //---------------------------------------------------------------------------
protected:
  
  // name and index of the word
  //
  char_1* name_d;
  int_4 index_d;
  
  // pronunciation parameters
  //
  int_4 num_prons_d;                // number of pronunciations
  int_4* num_phones_d;              // number of monophones
  int_4** phone_list_d;             // phone list

  // active flag
  //
  logical_1 active_d;

  //---------------------------------------------------------------------------
  //
  // public methods
  //
  //---------------------------------------------------------------------------
public:
 
  // required methods
  //
  char_1* name_cc();
  volatile void error_handler_cc(char_1* method_name, char_1* message);
  logical_1 debug_cc(FILE *fp, char_1* message);
  int_4 size_cc();
  
  // destructors/constructors
  //
  ~Word();  
  Word();
  Word(int_4 index, char_1* name, int_4** phone_list, int_4* num_phones,
       int_4 num_prons);
  Word(int_4 index, char_1* name, int_4 num_ph, int_4* phones);
  Word(Word& word);

  // word index methods
  //
  logical_1 set_index_cc(int_4 index) {
    index_d = index;
    return ISIP_TRUE;
  }

  int_4 get_index_cc() {
    return index_d;
  }
  
  // word name methods
  //
  logical_1 set_name_cc(char_1* name);
  char_1* get_name_cc() {
    return name_d;
  }

  // phone/pronunciation methods
  //
  logical_1 set_phone_list_cc(int_4** phone_list, int_4* num_phones,
			      int_4 num_prons);

  int_4** get_phone_list_cc() {
    return phone_list_d;
  }

  int_4* get_num_phones_cc() {
    return num_phones_d;
  }

  int_4 get_num_prons_cc() {
    return num_prons_d;
  }

  int_4 get_phone_cc(int_4 index, int_4 pron) {
    return phone_list_d[pron][index];
  }
  
  logical_1 add_pron_cc(int_4 num_ph, int_4* phones);

  // active status methods
  //
  logical_1 set_active_cc(logical_1 status) {
    active_d = status;
    return ISIP_TRUE;
  }
  
  logical_1 get_active_cc() {
    return active_d;
  }
  
  //---------------------------------------------------------------------------
  //
  // private methods
  //
  //---------------------------------------------------------------------------
private:
 
};

// end of file
//
#endif

