Skip to content
Snippets Groups Projects
Commit 9ab06cd5 authored by Hans Moog's avatar Hans Moog
Browse files

Refactor: refactored some code

parent 5f2212da
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,7 @@ require ( ...@@ -15,7 +15,7 @@ require (
github.com/golang/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.3.2 // indirect
github.com/google/open-location-code/go v0.0.0-20190903173953-119bc96a3a51 github.com/google/open-location-code/go v0.0.0-20190903173953-119bc96a3a51
github.com/gorilla/websocket v1.4.1 github.com/gorilla/websocket v1.4.1
github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172 github.com/iotaledger/hive.go v0.0.0-20200203224255-313f831d7885
github.com/iotaledger/iota.go v1.0.0-beta.9 github.com/iotaledger/iota.go v1.0.0-beta.9
github.com/kr/text v0.1.0 github.com/kr/text v0.1.0
github.com/labstack/echo v3.3.10+incompatible github.com/labstack/echo v3.3.10+incompatible
......
...@@ -114,6 +114,8 @@ github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d h1:3uYitVVvpt/v ...@@ -114,6 +114,8 @@ github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d h1:3uYitVVvpt/v
github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64= github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64=
github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172 h1:QuckesiAtCzfxkxndNaerpeW0AKmxciZtApyjNwe7s4= github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172 h1:QuckesiAtCzfxkxndNaerpeW0AKmxciZtApyjNwe7s4=
github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64= github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64=
github.com/iotaledger/hive.go v0.0.0-20200203224255-313f831d7885 h1:MAD62T49q1AnoybapTCnlqIFfFv2fs0GmKgn7IcR+oA=
github.com/iotaledger/hive.go v0.0.0-20200203224255-313f831d7885/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64=
github.com/iotaledger/iota.go v1.0.0-beta.9 h1:c654s9pkdhMBkABUvWg+6k91MEBbdtmZXP1xDfQpajg= github.com/iotaledger/iota.go v1.0.0-beta.9 h1:c654s9pkdhMBkABUvWg+6k91MEBbdtmZXP1xDfQpajg=
github.com/iotaledger/iota.go v1.0.0-beta.9/go.mod h1:F6WBmYd98mVjAmmPVYhnxg8NNIWCjjH8VWT9qvv3Rc8= github.com/iotaledger/iota.go v1.0.0-beta.9/go.mod h1:F6WBmYd98mVjAmmPVYhnxg8NNIWCjjH8VWT9qvv3Rc8=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
......
package bytesfilter
import (
"sync"
"github.com/iotaledger/hive.go/typeutils"
"github.com/iotaledger/goshimmer/packages/binary/types"
)
type BytesFilter struct {
byteArrays [][]byte
bytesByKey map[string]types.Empty
size int
mutex sync.RWMutex
}
func New(size int) *BytesFilter {
return &BytesFilter{
byteArrays: make([][]byte, 0, size),
bytesByKey: make(map[string]types.Empty, size),
size: size,
}
}
func (bytesFilter *BytesFilter) Add(bytes []byte) bool {
key := typeutils.BytesToString(bytes)
bytesFilter.mutex.Lock()
if _, exists := bytesFilter.bytesByKey[key]; !exists {
if len(bytesFilter.byteArrays) == bytesFilter.size {
delete(bytesFilter.bytesByKey, typeutils.BytesToString(bytesFilter.byteArrays[0]))
bytesFilter.byteArrays = append(bytesFilter.byteArrays[1:], bytes)
} else {
bytesFilter.byteArrays = append(bytesFilter.byteArrays, bytes)
}
bytesFilter.bytesByKey[key] = types.Void
bytesFilter.mutex.Unlock()
return true
} else {
bytesFilter.mutex.Unlock()
return false
}
}
func (bytesFilter *BytesFilter) Contains(byteArray []byte) (exists bool) {
bytesFilter.mutex.RLock()
_, exists = bytesFilter.bytesByKey[typeutils.BytesToString(byteArray)]
bytesFilter.mutex.RUnlock()
return
}
package bytesfilter
import (
"testing"
)
func BenchmarkAdd(b *testing.B) {
filter, bytesFilter := setupTest(15000, 1604)
b.ResetTimer()
for i := 0; i < b.N; i++ {
filter.Add(bytesFilter)
}
}
func BenchmarkContains(b *testing.B) {
filter, bytesFilter := setupTest(15000, 1604)
b.ResetTimer()
for i := 0; i < b.N; i++ {
filter.Contains(bytesFilter)
}
}
func setupTest(filterSize int, byteArraySize int) (*BytesFilter, []byte) {
filter := New(filterSize)
for j := 0; j < filterSize; j++ {
byteArray := make([]byte, byteArraySize)
for i := 0; i < len(byteArray); i++ {
byteArray[(i+j)%byteArraySize] = byte((i + j) % 128)
}
filter.Add(byteArray)
}
byteArray := make([]byte, byteArraySize)
for i := 0; i < len(byteArray); i++ {
byteArray[i] = byte(i % 128)
}
return filter, byteArray
}
...@@ -4,8 +4,7 @@ import ( ...@@ -4,8 +4,7 @@ import (
"sync" "sync"
"github.com/iotaledger/hive.go/async" "github.com/iotaledger/hive.go/async"
"github.com/iotaledger/hive.go/bytesfilter"
"github.com/iotaledger/goshimmer/packages/binary/bytesfilter"
) )
type RecentlySeenBytesFilter struct { type RecentlySeenBytesFilter struct {
......
...@@ -3,8 +3,9 @@ package builtinfilters ...@@ -3,8 +3,9 @@ package builtinfilters
import ( import (
"sync" "sync"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
"github.com/iotaledger/hive.go/async" "github.com/iotaledger/hive.go/async"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
) )
type TransactionSignatureFilter struct { type TransactionSignatureFilter struct {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment