/** \file
 *
 *  Contains the DataWriter class implementation.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 *
 */

#include "UniversalDataWriter.h"

#include "data/UniversalDataElement.h"

UniversalDataWriter::UniversalDataWriter( Component* owner,
        DataElement& element,
        UniversalDataElement* universal,
        Logger::TimePrecisionType timePrecision )
    : MessagingDataWriter( owner, element, universal, timePrecision )
{
}

UniversalDataWriter::UniversalDataWriter( Component* owner,
        DataElement& element,
        UniversalDataElement* universal,
        Logger::TimePrecisionType timePrecision,
        const Str& channel )
    : MessagingDataWriter( owner, element, universal, timePrecision, channel )
{
}

UniversalDataWriter::~UniversalDataWriter()
{
}

// With accuracy

bool UniversalDataWriter::writeWithAccuracy( const Unit& unit, const unsigned char value, const float accuracy, const Timestamp& timestamp )
{
    element_.setAccuracy( *this, unit, accuracy );
    return write( unit, value, timestamp );
}
bool UniversalDataWriter::writeWithAccuracy( const Unit& unit, const double value, const float accuracy, const Timestamp& timestamp )
{
    element_.setAccuracy( *this, unit, accuracy );
    return write( unit, value, timestamp );
}
bool UniversalDataWriter::writeWithAccuracy( const Unit& unit, const int value, const float accuracy, const Timestamp& timestamp )
{
    element_.setAccuracy( *this, unit, accuracy );
    return write( unit, value, timestamp );
}
bool UniversalDataWriter::writeWithAccuracy( const DataValue& value, const float accuracy, const Timestamp& timestamp )
{
    element_.setAccuracy( *this, value.getBaseUnit(), accuracy );
    return write( value, timestamp );
}
//===============================================================
/// Set accuracy function
bool UniversalDataWriter::setAccuracy( const Unit& unit, const float accuracy )
{
    return element_.setAccuracy( *this, unit, accuracy );
}

/// Get accuracy function
/// For recalling the current accuracy...
float UniversalDataWriter::getAccuracy( const Unit& unit )
{
    return element_.getAccuracy( unit );
}

/// Returns true if one of the registered readers is requesting data
bool UniversalDataWriter::isAnyDataRequested()
{
    UniversalDataElement* universal = element_.getUniversal();
    if( NULL != universal )
    {
        return universal->isAnyDataRequested();
    }
    return false;
}
