Skip to content
Snippets Groups Projects
Select Git revision
  • 5aa4c170c1e78c75b1af6b45d055ad97f2120c43
  • develop default protected
  • congestioncontrol
  • merge-v-data-collection-spammer-0.8.2
  • WIP-merge-v-data-collection-spammer-0.8.2
  • merge-v-data-collection-spammer-0.7.7
  • tmp
  • test-masterpow-fixing
  • test-masterpow
  • test-echo
  • v-data-collection
  • v-data-collection-spammer
  • tmp-dump-spam-info
  • dump-msg-info-0.3.1
  • test-dump-message-info
  • spammer-exprandom
  • extra/tutorial
  • without_tipselection
  • hacking-docker-network
  • hacking-docker-network-0.2.3
  • master
  • v0.2.3
22 results

approvers.go

Blame
  • approvers.go 2.27 KiB
    package tangle
    
    import (
    	"github.com/iotaledger/goshimmer/packages/ternary"
    	"sync"
    )
    
    type Approvers struct {
    	hash        ternary.Trinary
    	hashes      map[ternary.Trinary]bool
    	hashesMutex sync.RWMutex
    	modified    bool
    }
    
    func NewApprovers(hash ternary.Trinary) *Approvers {
    	return &Approvers{
    		hash:     hash,
    		hashes:   make(map[ternary.Trinary]bool),
    		modified: false,
    	}
    }
    
    // region public method with locking ///////////////////////////////////////////////////////////////////////////////////
    
    func (approvers *Approvers) Add(transactionHash ternary.Trinary) {
    	approvers.hashesMutex.Lock()
    	defer approvers.hashesMutex.Unlock()
    
    	approvers.add(transactionHash)
    }
    
    func (approvers *Approvers) Remove(approverHash ternary.Trinary) {
    	approvers.hashesMutex.Lock()
    	defer approvers.hashesMutex.Unlock()
    
    	approvers.remove(approverHash)
    }
    
    func (approvers *Approvers) GetHashes() []ternary.Trinary {
    	approvers.hashesMutex.RLock()
    	defer approvers.hashesMutex.RUnlock()
    
    	return approvers.getHashes()
    }
    
    // endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    // region private methods without locking //////////////////////////////////////////////////////////////////////////////
    
    func (approvers *Approvers) add(transactionHash ternary.Trinary) {
    	if _, exists := approvers.hashes[transactionHash]; !exists {
    		approvers.hashes[transactionHash] = true
    		approvers.modified = true
    	}
    }
    
    func (approvers *Approvers) remove(approverHash ternary.Trinary) {
    	if _, exists := approvers.hashes[approverHash]; exists {
    		delete(approvers.hashes, approverHash)
    		approvers.modified = true
    	}
    }
    
    func (approvers *Approvers) getHashes() []ternary.Trinary {
    	hashes := make([]ternary.Trinary, len(approvers.hashes))
    
    	counter := 0
    	for hash, _ := range approvers.hashes {
    		hashes[counter] = hash
    
    		counter++
    	}
    
    	return hashes
    }
    
    // endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    func (approvers *Approvers) Store(approverHash ternary.Trinary) {
    	approvers.hashesMutex.Lock()
    	approvers.hashesMutex.RUnlock()
    
    	approvers.modified = false
    }
    
    func (approvers *Approvers) Marshal() []byte {
    	approvers.hashesMutex.RLock()
    	defer approvers.hashesMutex.RUnlock()
    
    	return make([]byte, 0)
    }