func (s *SimLogger) accessedLevels(operation sim.SimOperation) (levels int) { levels = SimLoggerUpperSupernodeLevels if s.supernodeLevels <= levels { return s.supernodeLevels } if operation.GetPrice() == 0 { // TODO hw can skip SN access at all return } lenOld, lenNew := len(s.tobOld), len(s.tobNew) if lenOld < levels { return } if lenOld == lenNew { for i := 0; i < levels; i++ { if !s.tobOld[i].Equals(s.tobNew[i]) { return } } } return s.supernodeLevels }
func (s *SimLogger) OperationAppliedToOrders(operation sim.SimOperation) { type ordrespLogInfo struct { notFound, addOp int orderId packet.OrderId optionId packet.OptionId side, price, size int ordlSuffix string } type orduLogInfo struct { orderId packet.OrderId optionId packet.OptionId side, price, size int } var or ordrespLogInfo var ou orduLogInfo switch op := operation.(type) { case *sim.OperationAdd: var oid packet.OptionId if op.Independent() { oid = op.GetOptionId() } or = ordrespLogInfo{ addOp: 1, orderId: op.OrderId, optionId: oid, ordlSuffix: fmt.Sprintf(" %012x", oid.ToUint64()), } ou = orduLogInfo{ orderId: or.orderId, optionId: op.GetOptionId(), price: op.GetPrice(), size: op.GetNewSize(sim.SizeKindDefault), } if op.GetSide() == packet.MarketSideAsk { ou.side = 1 } case *sim.OperationRemove, *sim.OperationUpdate: if operation.GetOptionId().Invalid() { or = ordrespLogInfo{notFound: 1} } else { newSize := operation.GetNewSize(sim.SizeKindDefault) or = ordrespLogInfo{ optionId: operation.GetOptionId(), price: operation.GetPrice(), size: newSize - operation.GetDefaultSizeDelta(), } if operation.GetSide() == packet.MarketSideAsk { or.side = 1 } if newSize != 0 { ou = orduLogInfo{ optionId: or.optionId, side: or.side, price: or.price, size: newSize, } } } or.orderId = operation.GetOrigOrderId() ou.orderId = or.orderId default: errs.Check(false) } s.printfln("ORDL %d %016x%s", or.addOp, or.orderId.ToUint64(), or.ordlSuffix) s.printfln("ORDRESP %d %d %d %08x %08x %012x %016x", or.notFound, or.addOp, or.side, or.size, or.price, or.optionId.ToUint64(), or.orderId.ToUint64()) if operation.GetOptionId().Valid() { s.printfln("ORDU %016x %012x %d %08x %08x", ou.orderId.ToUint64(), ou.optionId.ToUint64(), ou.side, ou.price, ou.size) } }