// file: train_token.h
//
// this is the header for the path token class
//

// make sure definitions are only made once
//
#ifndef __ISIP_TRAIN_TOKEN
#define __ISIP_TRAIN_TOKEN

// isip include files
//
#ifndef __ISIP_INTEGRAL
#include <integral.h>
#endif

// forward declaration of classes
//
#ifndef __ISIP_TRAIN_LINK_LIST
#include <train_link_list.h>
#endif

#ifndef __ISIP_TRAIN_TRACE
#include <train_trace.h>
#endif

// Train_Token: a class that is used to hold path information at each state
//
class Train_Token {
  
  //---------------------------------------------------------------------------
  //
  // protected data
  //
  //---------------------------------------------------------------------------
protected:

  // state-level properties
  //
  int_4 state_d;                      // the state index
  float_8 score_d;                    // the score for this state

  // a list of all hypotheses here
  //
  Train_Link_list* trace_list_d;

  // marker nodes to indicate the start and stop points for trace
  // evaluation
  //
  Train_Link_node* prev_marker_d;
  Train_Link_node* marker_d;
  
  //---------------------------------------------------------------------------
  //
  // public methods
  //
  //---------------------------------------------------------------------------
public:
 
  // required methods
  //
  char_1* name_cc();
  volatile void error_handler_cc(char_1* mname, char_1* msg);
  logical_1 debug_cc(FILE* fp, char_1* message);
  int_4 size_cc();
    
  // destructors/constructors
  //
  ~Train_Token();  
  Train_Token();                                          // default
  Train_Token(int_4 state);                               // overloaded
  Train_Token(Train_Token& token);                        // copy

  // set methods
  //
  logical_1 set_state_cc(int_4 state);
  logical_1 set_score_cc(float_8 score);
  logical_1 set_trace_list_cc(Train_Link_list* list);
  logical_1 set_marker_cc(Train_Link_node* node);
  logical_1 set_prev_marker_cc(Train_Link_node* node);

  // get methods
  //
  int_4 get_state_cc();
  float_8 get_score_cc();
  Train_Link_list* get_trace_list_cc();
  Train_Link_node* get_marker_cc();
  Train_Link_node* get_prev_marker_cc();

  // trace list methods
  //
  logical_1 insert_trace_cc(Train_Trace* trace, float_8& score);

  //---------------------------------------------------------------------------
  //
  // private methods
  //
  //---------------------------------------------------------------------------
private:

};

// end of file
// 
#endif
