Beispiel #1
0
      void
      add (uint32_t id, char side, uint32_t price, uint32_t size)
      {
        if (orders.end () != orders.find (id, OrderIdHasher (), OrderIdEqual ()))
          {
            throw std::runtime_error ("duplicate add");
          }

        AggregateOrders::iterator found = aggregateOrders.find (std::make_pair (side, price), AggregateOrderLess ());

        if (found == aggregateOrders.end ())
          {
            AggregateOrder *a = aggregateOrderPool.construct (boost::in_place (side, price));
            found = aggregateOrders.insert (*a).first;
          }

        assert(aggregateOrders.end () != found);

        Order *order = orderPool.construct (boost::in_place (id, boost::ref (*found)));
        assert(order);

        bool orderInserted __attribute__((unused)) = orders.insert (*order).second;
        assert(orderInserted);

        order->size = size;
        order->aggregateOrder.size += size;

        assert(order->size);
        assert(order->aggregateOrder.size);
      }