-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathValue.go
More file actions
123 lines (100 loc) · 2.29 KB
/
Copy pathValue.go
File metadata and controls
123 lines (100 loc) · 2.29 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package gouda
import (
"fmt"
)
const (
EOOKind = iota
NumberKind
StringKind
BooleanKind
NullKind
IntKind
LongKind
)
type SysString string
type SysInt int
type Value interface {
Kind() int
Number() float64
String() SysString
Bool() bool
Int() SysInt
}
type WriteValue interface {
SetNumber(float64)
SetString(SysString)
SetBool(bool)
SetInt(SysInt)
}
type _Null struct{}
func (*_Null) Kind() int { return NullKind }
func (*_Null) Number() float64 { return 0 }
func (*_Null) String() SysString { return "null" }
func (*_Null) Bool() bool { return false }
func (*_Null) Int() SysInt { return 0 }
func (*_Null) SetNumber(float64) {}
func (*_Null) SetString(SysString) {}
func (*_Null) SetBool(bool) {}
func (*_Null) SetInt(SysInt) {}
type _Int struct {
value SysInt
_Null
}
func (e *_Int) Kind() int { return IntKind }
func (e *_Int) Int() SysInt { return e.value }
func (e *_Int) SetInt(i SysInt) { e.value = i }
func (i SysInt) Value() (ii *_Int) {
ii = new(_Int)
ii.SetInt(i)
return
}
type _String struct {
value SysString
_Null
}
func (e *_String) Kind() int { return StringKind }
func (e *_String) SetString(s SysString) { e.value = s }
func (e *_String) String() SysString { return e.value }
func (i SysString) Value() (ii *_String) {
ii = new(_String)
ii.SetString(i)
return
}
func (v *_Int) GoString() string { return "gouda.SysInt(" + fmt.Sprint(v.Int()) + ").Value()" }
func (v *_String) GoString() string {
return fmt.Sprintf("gouda.SysString(%#v).Value()", v.String())
}
func (v *_Null) GoString() string { return "*Hem*" }
func Equal(v1, v2 Value) bool {
if v1.Kind() != v2.Kind() {
return false
}
switch v1.Kind() {
case IntKind:
return int(v1.Int()) == int(v2.Int())
case StringKind:
return string(v1.String()) == string(v2.String())
}
return false
}
func Less(v1, v2 Value) bool {
if v1.Kind() != v2.Kind() {
return false
}
switch v1.Kind() {
case IntKind:
return int(v1.Int()) < int(v2.Int())
case StringKind:
return string(v1.String()) < string(v2.String())
}
return false
}
func More(v1, v2 Value) bool {
return !Less(v1,v2) && !Equal(v1,v2)
}
func MoreOrEqual(v1, v2 Value) bool {
return !Less(v1,v2)
}
func LessOrEqual(v1, v2 Value) bool {
return Less(v1,v2) || Equal(v1, v2)
}