4 log "github.com/sirupsen/logrus"
6 "github.com/bytom/vapor/application/mov/common"
7 "github.com/bytom/vapor/protocol/bc"
10 // TradePairIterator wrap read trade pair from DB action
11 type TradePairIterator struct {
13 tradePairs []*common.TradePair
17 // NewTradePairIterator create the new TradePairIterator object
18 func NewTradePairIterator(movStore MovStore) *TradePairIterator {
19 return &TradePairIterator{movStore: movStore}
22 // HasNext check if there are more trade pairs in memory or DB
23 func (t *TradePairIterator) HasNext() bool {
24 tradePairSize := len(t.tradePairs)
25 if t.tradePairIndex < tradePairSize {
29 var fromAssetID, toAssetID *bc.AssetID
30 if len(t.tradePairs) > 0 {
31 lastTradePair := t.tradePairs[tradePairSize-1]
32 fromAssetID, toAssetID = lastTradePair.FromAssetID, lastTradePair.ToAssetID
35 tradePairs, err := t.movStore.ListTradePairsWithStart(fromAssetID, toAssetID)
37 // If the error is returned, it's an error of program itself,
38 // and cannot be recovered, so panic directly.
39 log.WithField("err", err).Fatal("fail to list trade pairs")
42 if len(tradePairs) == 0 {
46 t.tradePairs = tradePairs
51 // Next return the next available trade pair in memory or DB
52 func (t *TradePairIterator) Next() *common.TradePair {
57 tradePair := t.tradePairs[t.tradePairIndex]
62 // OrderIterator wrap read order from DB action
63 type OrderIterator struct {
65 lastOrder *common.Order
66 orders []*common.Order
69 // NewOrderIterator create the new OrderIterator object
70 func NewOrderIterator(movStore MovStore, tradePair *common.TradePair) *OrderIterator {
71 return &OrderIterator{
73 lastOrder: &common.Order{FromAssetID: tradePair.FromAssetID, ToAssetID: tradePair.ToAssetID},
77 // HasNext check if there are more orders in memory or DB
78 func (o *OrderIterator) HasNext() bool {
79 if len(o.orders) == 0 {
80 orders, err := o.movStore.ListOrders(o.lastOrder)
82 log.WithField("err", err).Fatal("fail to list orders")
90 o.lastOrder = o.orders[len(o.orders)-1]
95 // NextBatch return the next batch of orders in memory or DB
96 func (o *OrderIterator) NextBatch() []*common.Order {