github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/event/filter/generic_filter.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:39</date>
    10  //</624342639872839680>
    11  
    12  
    13  package filter
    14  
    15  type Generic struct {
    16  	Str1, Str2, Str3 string
    17  	Data             map[string]struct{}
    18  
    19  	Fn func(data interface{})
    20  }
    21  
    22  //self=已注册,f=传入
    23  func (self Generic) Compare(f Filter) bool {
    24  	var strMatch, dataMatch = true, true
    25  
    26  	filter := f.(Generic)
    27  	if (len(self.Str1) > 0 && filter.Str1 != self.Str1) ||
    28  		(len(self.Str2) > 0 && filter.Str2 != self.Str2) ||
    29  		(len(self.Str3) > 0 && filter.Str3 != self.Str3) {
    30  		strMatch = false
    31  	}
    32  
    33  	for k := range self.Data {
    34  		if _, ok := filter.Data[k]; !ok {
    35  			return false
    36  		}
    37  	}
    38  
    39  	return strMatch && dataMatch
    40  }
    41  
    42  func (self Generic) Trigger(data interface{}) {
    43  	self.Fn(data)
    44  }
    45