github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/state/masked_iterator.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package state
     5  
     6  import "github.com/MetalBlockchain/metalgo/ids"
     7  
     8  var _ StakerIterator = (*maskedIterator)(nil)
     9  
    10  type maskedIterator struct {
    11  	parentIterator StakerIterator
    12  	maskedStakers  map[ids.ID]*Staker
    13  }
    14  
    15  // NewMaskedIterator returns a new iterator that skips the stakers in
    16  // [parentIterator] that are present in [maskedStakers].
    17  func NewMaskedIterator(parentIterator StakerIterator, maskedStakers map[ids.ID]*Staker) StakerIterator {
    18  	return &maskedIterator{
    19  		parentIterator: parentIterator,
    20  		maskedStakers:  maskedStakers,
    21  	}
    22  }
    23  
    24  func (i *maskedIterator) Next() bool {
    25  	for i.parentIterator.Next() {
    26  		staker := i.parentIterator.Value()
    27  		if _, ok := i.maskedStakers[staker.TxID]; !ok {
    28  			return true
    29  		}
    30  	}
    31  	return false
    32  }
    33  
    34  func (i *maskedIterator) Value() *Staker {
    35  	return i.parentIterator.Value()
    36  }
    37  
    38  func (i *maskedIterator) Release() {
    39  	i.parentIterator.Release()
    40  }