gitlab.com/evatix-go/core@v1.3.55/coredata/corerange/RangeByte.go (about) 1 package corerange 2 3 import ( 4 "gitlab.com/evatix-go/core/constants" 5 ) 6 7 type RangeByte struct { 8 *BaseRange 9 Start, End byte 10 } 11 12 func NewRangeByteMinMax( 13 rawString, separator string, 14 min, max byte, 15 ) *RangeByte { 16 minMax := MinMaxInt{ 17 Min: int(min), 18 Max: int(max), 19 } 20 21 return NewRangeInt( 22 rawString, 23 separator, 24 &minMax). 25 CreateRangeByte() 26 } 27 28 func NewRangeByte( 29 rawString, separator string, 30 minMax *MinMaxByte, 31 ) *RangeByte { 32 if minMax == nil { 33 minMaxInt := MinMaxInt{ 34 Min: constants.Zero, 35 Max: constants.MaxUnit8AsInt, 36 } 37 38 return NewRangeInt( 39 rawString, 40 separator, 41 &minMaxInt). 42 CreateRangeByte() 43 } 44 45 minMaxInt := MinMaxInt{ 46 Min: int(minMax.Min), 47 Max: int(minMax.Max), 48 } 49 50 return NewRangeInt( 51 rawString, 52 separator, 53 &minMaxInt). 54 CreateRangeByte() 55 } 56 57 func (r *RangeByte) Difference() byte { 58 return r.End - r.Start 59 } 60 61 func (r *RangeByte) DifferenceAbsolute() byte { 62 diff := r.Difference() 63 64 if diff < 0 { 65 return diff 66 } 67 68 return diff 69 } 70 71 // RangeLength (5 - 3 = 2) + 1 72 func (r *RangeByte) RangeLength() byte { 73 return r.DifferenceAbsolute() + 1 74 } 75 76 // RangesInt returns empty ints if IsInvalid 77 // return range int values 78 func (r *RangeByte) RangesInt() *[]byte { 79 return r.Ranges() 80 } 81 82 // Ranges returns empty ints if IsInvalid 83 // return range int values 84 func (r *RangeByte) Ranges() *[]byte { 85 if r.IsInvalid() { 86 return &[]byte{} 87 } 88 89 length := r.RangeLength() 90 start := r.Start 91 slice := make([]byte, constants.Zero, length) 92 var i byte 93 94 for i = 0; i < length; i++ { 95 slice[i] = start + i 96 } 97 98 return &slice 99 } 100 101 // IsWithinRange r.Start >= value && value <= r.End 102 func (r *RangeByte) IsWithinRange(value byte) bool { 103 return r.Start >= value && value <= r.End 104 } 105 106 // IsValidPlusWithinRange r.IsValid && r.IsWithinRange(value) 107 func (r *RangeByte) IsValidPlusWithinRange(value byte) bool { 108 return r.IsValid && r.IsWithinRange(value) 109 } 110 111 // IsInvalidValue !r.IsValid || !r.IsWithinRange(value) 112 func (r *RangeByte) IsInvalidValue(value byte) bool { 113 return !r.IsValid || !r.IsWithinRange(value) 114 } 115 116 func (r *RangeByte) String() string { 117 return r.BaseRange.String(r.Start, r.End) 118 }