//Do the resize of the vectors
void DataStream::setTrendsParameters(const DataStream::TrendsTimeInterval value)
{
if (!trendsMutex.tryLock())
{
usleep(2);
trendsMutex.lock();
}
int aaa, bbb;
const int previousPointsCount = m_data.trends.numPoints;
switch (value)
{
case OneMinute: m_data.trends.numPoints = Trends60Points; break;
case TenMinutes: m_data.trends.numPoints = Trends600Points; break;
case Infinite: m_data.trends.numPoints = TrendsInfinite; break;
}
static const int diff = Trends600Points - Trends60Points;
switch (CFG_ED.realTimeTrendsOperationMode())
{
case OneMinute:
m_data.trends.pqDataX.resize(Trends60Points);
for (aaa = 0; aaa < 2; aaa++)
{
for (bbb = 0; bbb < (RE8K_ICDEF_TRENDS_ITEM_COUNT/2); bbb++)
{
if (Q_LIKELY(m_data.trends.pqDataY[aaa][bbb].size() == Trends600Points))
m_data.trends.pqDataY[aaa][bbb] = m_data.trends.pqDataY[aaa][bbb].mid(0,diff);
}
}
break;
case TenMinutes:
case Infinite:
if (previousPointsCount == Trends60Points)
{
m_data.trends.pqDataX.resize(Trends600Points);
for (aaa = Trends60Points; aaa < Trends600Points; aaa++)
m_data.trends.pqDataX[aaa] = (qwt_point)aaa;
qwt_data emptyData(diff,0.0);
for (aaa = 0; aaa < 2; aaa++)
{
for (bbb = 0; bbb < (RE8K_ICDEF_TRENDS_ITEM_COUNT/2); bbb++)
{
m_data.trends.pqDataY[aaa][bbb] = emptyData + m_data.trends.pqDataY[aaa][bbb];
}
}
}
break;
}
for (aaa = 0; aaa < 2; aaa++)
{
for (bbb = 0; bbb < (RE8K_ICDEF_TRENDS_ITEM_COUNT/2); bbb++)
m_data.trends.poDataY[aaa][bbb] = &m_data.trends.pqDataY[aaa][bbb];
}
trendsMutex.unlock();
}
//Update the data
int aaa, bbb;
for (aaa = 0; aaa < pqTrendsStruct.numItems; aaa++)
m_data.trends.pqDataY[pqTrendsStruct.side][aaa].append(pqTrendsStruct.selectedItemsValues[aaa].value);
switch (CFG_ED.realTimeTrendsOperationMode())
{
case OneMinute:
case TenMinutes:
for (aaa = 0; aaa < pqTrendsStruct.numItems; aaa++)
m_data.trends.pqDataY[pqTrendsStruct.side][aaa].remove(0,1); //D_TOVER
break;
case Infinite: //problem not even arises here, so this part actually doesn't matter
{
static const int diff = Trends600Points - Trends60Points;
for (aaa = 0; aaa < pqTrendsStruct.numItems; aaa++)
{
m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa].remove(qrand() % diff);
for (bbb = 0; bbb < diff; bbb++)
{
if (m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa].at(bbb) > 0.0)
m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa][bbb] = m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa].at(bbb) - 1.0;
else if (m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa].at(bbb) < 0.0)
m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa][bbb] = m_data.trends.pqDataY[pqTrendsStruct.numItems][aaa].at(bbb) + 1.0;
}
}
}
break;
}
if (updateUi)
emit signalNewTrendsData(); //class replot()
Bookmarks