github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/goset/interfaceset.go (about)

     1  
     2  package goset
     3  
     4  type InterfaceSet struct {
     5  	Map map[interface {}]struct{}
     6  }
     7  
     8  
     9  func NewInterfaceSet(values ... interface {}) *InterfaceSet {
    10  	a := new(InterfaceSet)
    11  	a.Map = make(map[interface{}]struct{}, len(values))
    12  	for _,v := range values{
    13  		a.Map[v] = none
    14  	}
    15  	return a
    16  }
    17  
    18  func (a *InterfaceSet) Add(elements ...interface{}) *InterfaceSet {
    19  	for _, e := range elements {
    20  		a.Map[e] = none
    21  	}
    22  	return a
    23  }
    24  
    25  func (a *InterfaceSet) Remove(elements ...interface{}) *InterfaceSet {
    26  	for _, e := range elements {
    27  		delete(a.Map, e)
    28  	}
    29  	return a
    30  }
    31  
    32  func (a *InterfaceSet) Contains(elements ...interface{}) bool {
    33  	for _, e := range elements {
    34  		if _, ok := a.Map[e]; !ok{
    35  			return false
    36  		}
    37  	}
    38  	return true
    39  }
    40  
    41  func (a *InterfaceSet)ContainsSet(b *InterfaceSet) bool{
    42  	for element, _ := range b.Map{
    43  		if _, ok := a.Map[element]; !ok {
    44  			return false
    45  		}
    46  	}
    47  	return true
    48  }
    49  
    50  
    51  func (a *InterfaceSet) Size() int {
    52  	return len(a.Map)
    53  }
    54  
    55  func (a *InterfaceSet) RemoveSet(b *InterfaceSet) *InterfaceSet {
    56  	for element, _ := range b.Map {
    57  		delete(a.Map, element)
    58  	}
    59  	return a
    60  }
    61  
    62  func (a *InterfaceSet) AddSet(b *InterfaceSet) *InterfaceSet {
    63  	for element, _ := range b.Map {
    64  		a.Map[element] = none
    65  	}
    66  	return a
    67  }
    68  
    69  func (a *InterfaceSet) InterSection(b *InterfaceSet) *InterfaceSet {
    70  	for element, _ := range a.Map {
    71  		if _, ok := b.Map[element]; !ok {
    72  			delete(a.Map, element)
    73  		}
    74  	}
    75  	return a
    76  }
    77  
    78