mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	
		
			
	
	
		
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package shared
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import "encoding/json"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type BitSizeCapacityUnit = string
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								const (
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitB  BitSizeCapacityUnit = "b"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitKB BitSizeCapacityUnit = "kb"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitMB BitSizeCapacityUnit = "mb"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitGB BitSizeCapacityUnit = "gb"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitTB BitSizeCapacityUnit = "tb"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitPB BitSizeCapacityUnit = "pb"
							 | 
						|||
| 
								 | 
							
									BitSizeCapacityUnitEB BitSizeCapacityUnit = "eb"
							 | 
						|||
| 
								 | 
							
									//BitSizeCapacityUnitZB   BitSizeCapacityUnit = "zb" // zb和yb超出int64范围,暂不支持
							 | 
						|||
| 
								 | 
							
									//BitSizeCapacityUnitYB   BitSizeCapacityUnit = "yb"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type BitSizeCapacity struct {
							 | 
						|||
| 
								 | 
							
									Count int64               `json:"count" yaml:"count"`
							 | 
						|||
| 
								 | 
							
									Unit  BitSizeCapacityUnit `json:"unit" yaml:"unit"`
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func NewBitSizeCapacity(count int64, unit BitSizeCapacityUnit) *BitSizeCapacity {
							 | 
						|||
| 
								 | 
							
									return &BitSizeCapacity{
							 | 
						|||
| 
								 | 
							
										Count: count,
							 | 
						|||
| 
								 | 
							
										Unit:  unit,
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func DecodeBitSizeCapacityJSON(sizeCapacityJSON []byte) (*BitSizeCapacity, error) {
							 | 
						|||
| 
								 | 
							
									var capacity = &BitSizeCapacity{}
							 | 
						|||
| 
								 | 
							
									err := json.Unmarshal(sizeCapacityJSON, capacity)
							 | 
						|||
| 
								 | 
							
									return capacity, err
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func (this *BitSizeCapacity) Bits() int64 {
							 | 
						|||
| 
								 | 
							
									if this.Count < 0 {
							 | 
						|||
| 
								 | 
							
										return -1
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									switch this.Unit {
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitB:
							 | 
						|||
| 
								 | 
							
										return this.Count
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitKB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(1)
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitMB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(2)
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitGB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(3)
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitTB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(4)
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitPB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(5)
							 | 
						|||
| 
								 | 
							
									case BitSizeCapacityUnitEB:
							 | 
						|||
| 
								 | 
							
										return this.Count * this.pow(6)
							 | 
						|||
| 
								 | 
							
									default:
							 | 
						|||
| 
								 | 
							
										return this.Count
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func (this *BitSizeCapacity) IsNotEmpty() bool {
							 | 
						|||
| 
								 | 
							
									return this.Count > 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func (this *BitSizeCapacity) AsJSON() ([]byte, error) {
							 | 
						|||
| 
								 | 
							
									return json.Marshal(this)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func (this *BitSizeCapacity) pow(n int) int64 {
							 | 
						|||
| 
								 | 
							
									if n <= 0 {
							 | 
						|||
| 
								 | 
							
										return 1
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									if n == 1 {
							 | 
						|||
| 
								 | 
							
										return 1024 // TODO 考虑是否使用1000进制
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									return this.pow(n-1) * 1024
							 | 
						|||
| 
								 | 
							
								}
							 |