#ifndef _CLLH_OBSERVER_H_
#define _CLLH_OBSERVER_H_

#include "decoder.h"

struct ConditionalLikelihoodObserver : public DecoderObserver {

  ConditionalLikelihoodObserver() : trg_words(), acc_obj(), cur_obj() {}
  ~ConditionalLikelihoodObserver();

  void Reset() {
    acc_obj = 0;
    trg_words = 0;
  }
 
  virtual void NotifyDecodingStart(const SentenceMetadata&);
  virtual void NotifyTranslationForest(const SentenceMetadata&, Hypergraph* hg);
  virtual void NotifyAlignmentForest(const SentenceMetadata& smeta, Hypergraph* hg);

  unsigned trg_words;
  double acc_obj;
  double cur_obj;
  int state;
};

#endif