github.com/Cloud-Foundations/Dominator@v0.3.4/lib/verstr/less.go (about)

     1  package verstr
     2  
     3  func less(left, right string) bool {
     4  	leftIndex := 0
     5  	rightIndex := 0
     6  	for {
     7  		if rightIndex >= len(right) {
     8  			return false
     9  		}
    10  		if leftIndex >= len(left) {
    11  			return true
    12  		}
    13  		leftRune := left[leftIndex]
    14  		rightRune := right[rightIndex]
    15  		if leftRune >= '0' && leftRune <= '9' &&
    16  			rightRune >= '0' && rightRune <= '9' {
    17  			var diff int64
    18  			diff, leftIndex, rightIndex = compareNumstr(left, leftIndex,
    19  				right, rightIndex)
    20  			if diff < 0 {
    21  				return true
    22  			} else if diff > 0 {
    23  				return false
    24  			} else {
    25  				continue
    26  			}
    27  		}
    28  		if leftRune < rightRune {
    29  			return true
    30  		} else if leftRune > rightRune {
    31  			return false
    32  		}
    33  		leftIndex++
    34  		rightIndex++
    35  	}
    36  }
    37  
    38  func compareNumstr(left string, leftIndex int, right string, rightIndex int) (
    39  	int64, int, int) {
    40  	var leftVal, rightVal int64
    41  	for ; leftIndex < len(left); leftIndex++ {
    42  		char := int64(left[leftIndex])
    43  		if char >= '0' && char <= '9' {
    44  			leftVal = leftVal*10 + char - '0'
    45  		} else {
    46  			break
    47  		}
    48  	}
    49  	for ; rightIndex < len(right); rightIndex++ {
    50  		char := int64(right[rightIndex])
    51  		if char >= '0' && char <= '9' {
    52  			rightVal = rightVal*10 + char - '0'
    53  		} else {
    54  			break
    55  		}
    56  	}
    57  	return leftVal - rightVal, leftIndex, rightIndex
    58  }