SipUriList &SipUriList::reverseList( void ) { QValueList<SipUri>::Iterator it; QValueList<SipUri> templist; for( it = urilist.begin(); it != urilist.end(); ++it ) { templist.prepend( (*it) ); } urilist = templist; return *this; }
/** * Return a list of PackageVersion objects sorted by their version numbers, * with the oldest version at the beginning and the latest version at the end * of the list. */ QValueList<PackageVersion*> Package::sortedVersionList() { QValueList<PackageVersion*> sortedVersions; QValueList<PackageVersion*>::iterator sortedVersionIterator; PackageVersionMap::iterator versionIterator; for( versionIterator = m_versions.begin(); versionIterator != m_versions.end(); versionIterator++ ) { if( versionIterator == m_versions.begin() ) { sortedVersions.append( *versionIterator ); continue; // if there is only one version, it can't be compared } // reverse iteration through the sorted version list sortedVersionIterator = sortedVersions.end(); while( true ) { if( sortedVersionIterator == sortedVersions.begin() ) { sortedVersions.prepend( *versionIterator ); break; } sortedVersionIterator--; if( (*versionIterator)->isNewerThan( (*sortedVersionIterator)->version() ) ) { sortedVersionIterator++; // insert after the compared one, not before sortedVersions.insert( sortedVersionIterator, *versionIterator ); break; } } } return sortedVersions; } // end of sortedVersionList()
void DbPlugin::getCCHistory (BarData *barData, QDateTime &startDate) { FuturesData fd; if (fd.setSymbol(indexKey)) { qDebug("CC::getCCHistory: invalid futures symbol"); return; } Config config; QString s; QString baseDir; config.getData(Config::DataPath, baseDir); baseDir.append("/Futures/"); fd.getExchange(s); baseDir.append(s + "/"); fd.getSymbol(s); baseDir.append(s); QDir dir(baseDir); if (! dir.exists(baseDir, TRUE)) return; QStringList dirList = dir.entryList(); QString lastChart; fd.getCurrentContract(startDate, lastChart); QString ey = lastChart.right(5); ey.truncate(4); QValueList<Bar> indexList; int indexCount = -1; int dirLoop = dirList.findIndex(lastChart); if (dirLoop == -1) dirLoop = dirList.count() - 1; lastChart = dirList[dirLoop]; s = "Adjustment"; QString s2; getData(s, s2); bool adjustFlag = s2.toInt(); while (dirLoop > 1) { if (indexCount >= barRange) break; s = baseDir + "/" + dirList[dirLoop]; DbPlugin tdb; if (tdb.open(s, chartIndex)) { tdb.close(); dirLoop--; lastChart = dirList[dirLoop]; continue; } BarData *recordList = new BarData(s); tdb.setBarRange(barRange); tdb.setBarLength(barLength); tdb.getHistory(recordList, startDate); tdb.close(); int loop; QDateTime dt = startDate; int lastBar = -1; bool dataFlag = FALSE; for (loop = recordList->count() - 1; loop > -1; loop--) { if (indexCount >= barRange) break; recordList->getDate(loop, dt); fd.getCurrentContract(dt, s); if (! s.compare(lastChart)) { Bar bar; recordList->getBar(loop, bar); indexList.prepend(bar); indexCount++; startDate = dt; lastBar = loop; dataFlag = TRUE; } } if (dataFlag) { if (adjustFlag) { Bar bar; double t = 0; if (lastBar - 1 > -1) t = recordList->getClose(lastBar) - recordList->getClose(lastBar - 1); bar.setClose(t); bar.setEmptyFlag(TRUE); indexList.prepend(bar); } } delete recordList; dirLoop--; lastChart = dirList[dirLoop]; } if (! adjustFlag) { int loop; for (loop = 0; loop < (int) indexList.count(); loop++) { Bar bar = indexList[loop]; barData->appendRaw(bar); } return; } // adjust the data double adjust = 0; double t = 0; bool flag = FALSE; Bar prevBar; int loop; for (loop = 1; loop < (int) indexList.count(); loop++) { Bar bar = indexList[loop]; if (bar.getEmptyFlag()) { t = bar.getClose(); flag = TRUE; continue; } if (flag) { adjust = prevBar.getClose() - bar.getClose(); bar.setOpen(bar.getOpen() + t); bar.setHigh(bar.getHigh() + t); bar.setLow(bar.getLow() + t); bar.setClose(bar.getClose() + t); flag = FALSE; t = 0; } bar.setOpen(bar.getOpen() + adjust); bar.setHigh(bar.getHigh() + adjust); bar.setLow(bar.getLow() + adjust); bar.setClose(bar.getClose() + adjust); barData->appendRaw(bar); prevBar = bar; } }