Пример #1
0
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();
}