void Statistics::insertDataFrame(const DataFrame& dataFrame) { if(!dataFrame.isValid()) return; m_dataFrames.push_back(dataFrame); unsigned int frameCount = m_dataFrames.size(); if(frameCount < 2) return; unsigned int averageCount = getAverageWindow(); unsigned int secondCount = getSecondWindow(); if(frameCount > averageCount) { m_dataFrames.erase(m_dataFrames.begin(), m_dataFrames.begin() + (frameCount - averageCount)); frameCount = averageCount; } vector<DataFrame>::const_reverse_iterator itFrameSecond = m_dataFrames.rbegin(); vector<DataFrame>::const_reverse_iterator itFrameAverage = m_dataFrames.rbegin(); if(frameCount > secondCount) itFrameSecond += secondCount; else itFrameSecond += frameCount - 1; if(frameCount > averageCount) itFrameAverage += averageCount; else itFrameAverage += frameCount - 1; calculateAverage(*itFrameSecond, m_dataFrames.back(), m_second); calculateAverage(*itFrameAverage, m_dataFrames.back(), m_average); if(frameCount > 2) calculateMinMax(m_second, m_min, m_max); else m_min = m_max = m_second; }