public void QueueValue(DataValue value, ServiceResult error)
{
long now = DateTime.UtcNow.Ticks;
if (m_start >= 0)
{
// check if too soon for another sample.
if (now < m_nextSampleTime)
{
int last = m_end-1;
if (last < 0)
{
last = m_values.Length-1;
}
// replace last value and error.
m_values[last] = value;
if (m_errors != null)
{
m_errors[last] = error;
}
return;
}
}
// update next sample time.
if (m_nextSampleTime > 0)
{
long delta = now - m_nextSampleTime;
if (m_samplingInterval > 0 && delta >= 0)
{
m_nextSampleTime += ((delta/m_samplingInterval)+1)*m_samplingInterval;
}
}
else
{
m_nextSampleTime = now + m_samplingInterval;
}
// queue next value.
Enqueue(value, error);
}