#include "BeamMonSwicRel.h"

#include <DatabaseInterface/DbiResultSet.h>
#include <DatabaseInterface/DbiOutRowStream.h>

using namespace std;

BeamMonSwicRel::BeamMonSwicRel(const char* devicename)
    : fDeviceName(devicename), fChannel(96,0)
{
}

/// DbiTableRow API
DbiTableRow* BeamMonSwicRel::CreateTableRow() const
{
    return new BeamMonSwicRel;
}

/// DbiTableRow API >>
void BeamMonSwicRel::Fill(DbiResultSet& rs, const DbiValidityRec* /*vrec*/)
{
    this->ClearData();

    rs >> fDeviceName ;
    for (int ind=0; ind<96; ++ind) {
	float tmp=0;
	rs >> tmp;
	fChannel[ind] = tmp;
    }
}

/// DbiTableRow API <<
void BeamMonSwicRel::Store(DbiOutRowStream& ors, const DbiValidityRec* /*vrec*/) const
{
    ors << fDeviceName;
    for (int ind=0; ind<96; ++ind) ors << fChannel[ind];
}

void BeamMonSwicRel::ClearData()
{
    for (int ind=0; ind<96; ++ind) fChannel[ind] = 0.0;
}

void BeamMonSwicRel::SetChannels(const std::vector<double>& channels)
{
    if (channels.size() != 96) return; // shouldn't happen
    for (size_t ind=0; ind<96; ++ind) fChannel[ind] = (float)channels[ind];
}

std::vector<double> BeamMonSwicRel::GetChannelsAsDoubles() const
{
    vector<double> ret(96,0);
    for (size_t ind=0; ind<96; ++ind) ret[ind] = fChannel[ind];
    return ret;
}


ClassImp(BeamMonSwicRel)
    
