// file: tr_cstr_2.cc
//

// isip include files
//
#include "trace.h"
#include "trace_constants.h"

// method: constructor
//
// arguments:
//  Trace* trace : (input) the back pointer trace
//  float_4 score : (input) the incremental score
//
// return: none
//
// this is an overloaded constructor
//
Trace::Trace(Trace* trace_a, float_4 score_a) {
  
  // copy other attributes if okay
  //
  if (trace_a == (Trace*)NULL) {

    lex_next_d = (Lex_node*)NULL;
    level_d = TRACE_DEFAULT_INDEX;
    state_index_d = TRACE_DEFAULT_INDEX;
    phone_index_d = TRACE_DEFAULT_INDEX;
    score_d = score_a;
    max_hist_d = (int_4)0;
    history_d = (History*)NULL;
    instance_d = (Instance*)NULL;
  }

  else {

    lex_next_d = trace_a->lex_next_d;
    level_d = trace_a->level_d;
    state_index_d = trace_a->state_index_d;  
    phone_index_d = trace_a->phone_index_d;  
    score_d = score_a + trace_a->score_d;
    max_hist_d = trace_a->max_hist_d;
    history_d = trace_a->history_d;
    instance_d = trace_a->instance_d;
  }
  
  // exit gracefully
  //
}
