diff options
author | obscuren <geffobscura@gmail.com> | 2014-08-21 21:46:26 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-08-21 21:46:26 +0800 |
commit | 0af0f0d890120e007ce42f072e1ee179a62115d3 (patch) | |
tree | 5ae9ecafbb729d1636fadfcfa49fd9100959560c /ethchain/bloom.go | |
parent | d761af84c83ae8d9d723e6766abb7950ff59cdf3 (diff) | |
parent | c173e9f4ab463cf3a44d35215bc29d846d6f6b02 (diff) | |
download | dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar.gz dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar.bz2 dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar.lz dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar.xz dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.tar.zst dexon-0af0f0d890120e007ce42f072e1ee179a62115d3.zip |
Merge branch 'release/0.6.3'
Diffstat (limited to 'ethchain/bloom.go')
-rw-r--r-- | ethchain/bloom.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/ethchain/bloom.go b/ethchain/bloom.go new file mode 100644 index 000000000..5317ca0b1 --- /dev/null +++ b/ethchain/bloom.go @@ -0,0 +1,47 @@ +package ethchain + +type BloomFilter struct { + bin []byte +} + +func NewBloomFilter(bin []byte) *BloomFilter { + if bin == nil { + bin = make([]byte, 256) + } + + return &BloomFilter{ + bin: bin, + } +} + +func (self *BloomFilter) Set(addr []byte) { + if len(addr) < 8 { + chainlogger.Warnf("err: bloom set to small: %x\n", addr) + + return + } + + for _, i := range addr[len(addr)-8:] { + self.bin[i] = 1 + } +} + +func (self *BloomFilter) Search(addr []byte) bool { + if len(addr) < 8 { + chainlogger.Warnf("err: bloom search to small: %x\n", addr) + + return false + } + + for _, i := range addr[len(addr)-8:] { + if self.bin[i] == 0 { + return false + } + } + + return true +} + +func (self *BloomFilter) Bin() []byte { + return self.bin +} |