func (o *observer) OperationAppliedToOrders(op sim.SimOperation) { sess := op.GetMessage().Session.Index() //errs.Check(sess < 4, sess) //errs.Check(sess < 32, sess) var key uint64 var delta int switch o := op.(type) { case *sim.OperationAdd: key = uint64(sess)<<32 | uint64(o.OrderId.ToUint32()) delta = 1 case *sim.OperationRemove: key = uint64(sess)<<32 | uint64(o.GetOrigOrderId().ToUint32()) delta = -1 } for _, ohs := range o.analyzer.orderHashStat { keyHash := ohs.f(key) ohs.bucketSize[keyHash] += delta if ohs.bucketSize[keyHash] > ohs.maxBucketSize[keyHash] { ohs.maxBucketSize[keyHash] = ohs.bucketSize[keyHash] } else if ohs.bucketSize[keyHash] == 0 { delete(ohs.bucketSize, keyHash) } } }