mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
	
	
		
			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
							 | 
						||
| 
								 | 
							
								}
							 |