-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathstrconv.go
130 lines (116 loc) · 2.43 KB
/
strconv.go
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
124
125
126
127
128
129
130
package ofbx
import (
"strconv"
"github.com/oakmound/oak/v2/alg/floatgeom"
)
func intFromString(str, end string, val *int) string {
v, err := strconv.Atoi(str)
*val = v
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
return str[iter:]
}
func uint64FromString(str, end string, val *uint64) string {
v, err := strconv.ParseUint(str, 10, 64)
*val = v
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
return str[iter:]
}
func int64FromString(str, end string, val *int64) string {
v, err := strconv.ParseInt(str, 10, 64)
*val = v
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
return str[iter:]
}
func doubleFromString(str, end string, val *float64) string {
v, err := strconv.ParseFloat(str, 64)
*val = v
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
return str[iter:]
}
func floatFromString(str, end string, val *float32) string {
v, err := strconv.ParseFloat(str, 32)
*val = float32(v)
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
return str[iter:]
}
func fromString(str, end string, val *float64, count int) string {
iter := 0
for i := 0; i < count; i++ {
v, err := strconv.ParseFloat(str[iter:], 64)
*val = v
if err != nil {
panic("Strconv Failed.")
}
iter := 0
for iter < len(end) && str[iter] != ',' {
iter++
}
if iter < len(end) {
iter++
}
if iter == len(end) {
return str[iter:]
}
}
return str[iter:]
}
// Vec2FromString gets a vec from string //Todo: Convert from using pointer math...
func Vec2FromString(str, end string, val *floatgeom.Point2) string {
return fromString(str, end, &val[0], 2)
}
// Vec3FromString gets a vec from string
func Vec3FromString(str, end string, val *floatgeom.Point3) string {
return fromString(str, end, &val[0], 3)
}
// Vec4FromString gets a vec from string
func Vec4FromString(str, end string, val *floatgeom.Point4) string {
return fromString(str, end, &val[0], 4)
}
func matrixFromString(str, end string, val *Matrix) string {
return fromString(str, end, &val.m[0], 16)
}