Files
EdgeCommon/pkg/serverconfigs/shared/bit_size_capacity.go

78 lines
1.9 KiB
Go
Raw Permalink Normal View History

2024-01-11 15:22:37 +08:00
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
}