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  }