From 1097e9e700a127f445ee4d138af2d51435390d43 Mon Sep 17 00:00:00 2001
From: yanghui <yanghui@aiotlink.com>
Date: 星期五, 14 五月 2021 16:01:50 +0800
Subject: [PATCH] add compare

---
 version.go |   54 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/version.go b/version.go
index 84b00eb..627ecf5 100644
--- a/version.go
+++ b/version.go
@@ -2,12 +2,17 @@
 
 import (
 	"encoding/json"
+	"errors"
 	"flag"
 	"fmt"
 	"math"
 	"os"
 	"strconv"
 	"strings"
+)
+
+type (
+	VaVersion int64
 )
 
 var (
@@ -39,21 +44,54 @@
 	}
 }
 
-func VersionCode2Name(version int64) (string, error) {
-	if version < 0 {
-		return "", errors.New("Version can't be negetive")
+func (v VaVersion) Valid() bool {
+	if v < 0 {
+		return false
 	}
 
-	majorVersion := version >> 32
-	minorVersion := (version >> 16) & 0xffff
-	buildNumber := version & 0xffff
+	majorVersion := v >> 32
+	if majorVersion > math.MaxUint16 {
+		return false
+	}
+
+	return true
+}
+
+func (v VaVersion) Compare(v1 VaVersion) (int, error) {
+	if !v.Valid() {
+		return 0, errors.New("Invalid VaVersion left value")
+	}
+
+	if !v1.Valid() {
+		return 0, errors.New("Invalid VaVersion right value")
+	}
+
+	if v > v1 {
+		return 1, nil
+	}
+
+	if v < v1 {
+		return -1, nil
+	}
+
+	return 0, nil
+}
+
+func (v VaVersion) String() (string, error) {
+	if !v.Valid() {
+		return "", errors.New("Invalid VaVersion value")
+	}
+
+	majorVersion := (v >> 32) & 0xffff
+	minorVersion := (v >> 16) & 0xffff
+	buildNumber := v & 0xffff
 
 	name := fmt.Sprintf("%d.%d.%d", majorVersion, minorVersion, buildNumber)
 
 	return name, nil
 }
 
-func VersionName2Code(version string) (int64, error) {
+func VersionName2VaVersion(version string) (VaVersion, error) {
 	subVersions := strings.Split(version, ".")
 	if len(subVersions) != 3 {
 		return 0, errors.New("Incorrect version format, version formats like 1.12.3")
@@ -88,5 +126,5 @@
 
 	num := (majorVersion << 32) | (minorVersion << 16) | buildNumber
 
-	return num, nil
+	return VaVersion(num), nil
 }

--
Gitblit v1.8.0