1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
package part
import (
"strings"
)
type String string
func NewString(s string) String {
return String(s)
}
func (s String) Compare(other Part) int {
if other == nil {
return 1
} else if s == other {
return 0
}
switch o := other.(type) {
case Uint64:
return 1
case String:
return strings.Compare(string(s), string(o))
case PreString:
return strings.Compare(string(s), string(o))
case Any:
return 0
case Empty:
if o.IsAny() {
return 0
}
return s.Compare(Uint64(0))
}
return 0
}
func (s String) IsNull() bool {
return s == ""
}
func (s String) IsAny() bool {
return false
}
func (s String) IsEmpty() bool {
return false
}
// PreString is less than the number
// e.g. a < 1
type PreString string
func NewPreString(s string) PreString {
return PreString(s)
}
func (s PreString) Compare(other Part) int {
if other == nil {
return 1
} else if s == other {
return 0
}
switch o := other.(type) {
case Uint64:
return -1
case String:
return strings.Compare(string(s), string(o))
case PreString:
return strings.Compare(string(s), string(o))
case Any:
return 0
case Empty:
if o.IsAny() {
return 0
}
return s.Compare(Uint64(0))
}
return 0
}
func (s PreString) IsNull() bool {
return s == ""
}
func (s PreString) IsAny() bool {
return false
}
func (s PreString) IsEmpty() bool {
return false
}
|