/****************************************************************************
 *
 * Basic class for logging binary data.
 *
 ****************************************************************************/

#include "STLogger.hh"
#include "ssdbg.hh"

#define STLogName "SmartSampler_SimpleThreshold"

STLogger::STLogger()
:DataLogWriter(STLogName, DataLog::BinaryFormat, AutoTimeStamp),
  isnew(false){
  ssdbg(DBG_LOAD)("creating STLogger");
};
STLogger::~STLogger(){
  slval_t tmp;
  ssdbg(DBG_CLEAN)("destroying STLogger");
  while(dat.size()){
    tmp = dat.back();
    dat.pop_back();
    if(tmp.dptr != NULL){
      delete(tmp.dptr);
    }
  }
};

void STLogger::addElement(int id,char *name){
  slval_t tmp;
  tmp.id = id;
  addField(tmp.dptr = new DoubleData(name));
  tmp.dptr->setValue(0);
  dat.push_back(tmp);
};

// NOTE: We still log the value even if it didn't change.  This is
// because we want the timestamp.
void STLogger::setValue(int id, double val){
  sli_t sli;
  for(sli=dat.begin();sli!= dat.end();sli++){
    if((*sli).id == id){
      (*sli).dptr->setValue(val);
      isnew=true;
      return; // Only expect one match.
    };
  }
};

// call DataLogWriter::write() if there's new data.
void STLogger::callWrite(){
  if(isnew){
    write();
  }
  isnew = false;
};
