mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 16:21:49 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package pubsub
 | |
| 
 | |
| import (
 | |
| 	"math"
 | |
| 	"math/bits"
 | |
| )
 | |
| 
 | |
| // Mask allows filtering by a bitset mask.
 | |
| type Mask uint64
 | |
| 
 | |
| const (
 | |
| 	// MaskAll is the mask for all entries.
 | |
| 	MaskAll Mask = math.MaxUint64
 | |
| )
 | |
| 
 | |
| // MaskFromMaskable extracts mask from an interface.
 | |
| func MaskFromMaskable(m Maskable) Mask {
 | |
| 	return Mask(m.Mask())
 | |
| }
 | |
| 
 | |
| // Contains returns whether *all* flags in other is present in t.
 | |
| func (t Mask) Contains(other Mask) bool {
 | |
| 	return t&other == other
 | |
| }
 | |
| 
 | |
| // Overlaps returns whether *any* flags in t overlaps with other.
 | |
| func (t Mask) Overlaps(other Mask) bool {
 | |
| 	return t&other != 0
 | |
| }
 | |
| 
 | |
| // SingleType returns whether t has a single type set.
 | |
| func (t Mask) SingleType() bool {
 | |
| 	return bits.OnesCount64(uint64(t)) == 1
 | |
| }
 | |
| 
 | |
| // FromUint64 will set a mask to the uint64 value.
 | |
| func (t *Mask) FromUint64(m uint64) {
 | |
| 	*t = Mask(m)
 | |
| }
 | |
| 
 | |
| // Merge will merge other into t.
 | |
| func (t *Mask) Merge(other Mask) {
 | |
| 	*t |= other
 | |
| }
 | |
| 
 | |
| // MergeMaskable will merge other into t.
 | |
| func (t *Mask) MergeMaskable(other Maskable) {
 | |
| 	*t |= Mask(other.Mask())
 | |
| }
 | |
| 
 | |
| // SetIf will add other if b is true.
 | |
| func (t *Mask) SetIf(b bool, other Mask) {
 | |
| 	if b {
 | |
| 		*t |= other
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Mask returns the mask as a uint64.
 | |
| func (t Mask) Mask() uint64 {
 | |
| 	return uint64(t)
 | |
| }
 | |
| 
 | |
| // Maskable implementations must return their mask as a 64 bit uint.
 | |
| type Maskable interface {
 | |
| 	Mask() uint64
 | |
| }
 |