void TransactionProcessor::process() { while(!m_buy.isEmpty() && !m_sell.isEmpty()) { Transaction* buy = m_buy.first(); Transaction* sell = m_sell.first(); if(buy->cost() < sell->cost()) break; qreal dealCost = (buy->time() < sell->time()) ? buy->cost() : sell->cost(); Transaction* forHistory = new Transaction(dealCost, qMin(buy->volume(), sell->volume())); m_log << forHistory; if(buy->volume() < sell->volume()) { sell->setVolume(sell->volume() - buy->volume()); m_buy.removeFirst(); delete buy; } else if(buy->volume() > sell->volume()) { buy->setVolume(buy->volume() - sell->volume()); m_sell.removeFirst(); delete sell; } else // (buy->volume() == sell->volume()) { m_sell.removeFirst(); m_buy.removeFirst(); delete buy; delete sell; } } updateModels(); debugReport(); }