func (m *M) addBuy(b *pqueue.OrderNode) { if b.Price() == msg.MARKET_PRICE { panic("It is illegal to send a buy at market price") } q := m.getMatchQueues(b.StockId()) if !m.fillableBuy(b, q) { q.PushBuy(b) } }
func (m *M) cancel(o *pqueue.OrderNode) { q := m.getMatchQueues(o.StockId()) ro := q.Cancel(o) if ro != nil { m.completeCancelled(ro) m.slab.Free(ro) } else { m.completeNotCancelled(o) } m.slab.Free(o) }
func (m *M) addSell(s *pqueue.OrderNode) { q := m.getMatchQueues(s.StockId()) if !m.fillableSell(s, q) { q.PushSell(s) } }
func (m *M) completeTrade(brk, srk msg.MsgKind, b, s *pqueue.OrderNode, price, amount uint64) { m.Out.Write(msg.Message{Kind: brk, Price: price, Amount: amount, TraderId: b.TraderId(), TradeId: b.TradeId(), StockId: b.StockId()}) m.Out.Write(msg.Message{Kind: srk, Price: price, Amount: amount, TraderId: s.TraderId(), TradeId: s.TradeId(), StockId: s.StockId()}) }
func completeTrade(out chan<- *msg.Message, brk, srk msg.MsgKind, b, s *pqueue.OrderNode, price uint64, amount uint32) { br := &msg.Message{Kind: brk, Price: price, Amount: amount, TraderId: b.TraderId(), TradeId: b.TradeId(), StockId: b.StockId()} sr := &msg.Message{Kind: srk, Price: price, Amount: amount, TraderId: s.TraderId(), TradeId: s.TradeId(), StockId: s.StockId()} out <- br out <- sr }