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 }