-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvalues.go
More file actions
84 lines (74 loc) · 1.82 KB
/
Copy pathvalues.go
File metadata and controls
84 lines (74 loc) · 1.82 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
package main
var value_head int
var all_values []byte
type Value struct {
form Value_Form
pos, len int
}
type Value_Form int
const (
VALUE_FORM_NONE = 0
VALUE_FORM_WILD = 1 + iota
VALUE_FORM_INTEGER
VALUE_FORM_FLOAT
VALUE_FORM_STRING
VALUE_FORM_BYTES
)
func integer_to_value(integer int) (value Value) {
temp := integer
byte_amount := 0
if temp == 0 {
byte_amount = 1
} else { for temp != 0 {
temp /= 255
byte_amount += 1
}}
value = make_value(byte_amount)
value.form = VALUE_FORM_INTEGER
for i := 0; i < value.len; i += 1 {
all_values[value.pos + i] = byte(integer >> (8*i))
}
return value
}
func integer_at_value(value Value, integer int) {
for i := 0; i < 8; i += 1 {
all_values[value.pos + i] = byte(integer >> (8*i))
}
}
func integer_to_sized_value(integer int, size int) (value Value) {
value = make_value(size)
value.form = VALUE_FORM_INTEGER
for i := 0; i < value.len && i < 8; i += 1 {
all_values[value.pos + i] = byte(integer >> (8*i))
}
return value
}
func value_to_integer(value Value) (integer int, exists bool) {
for i := 0; i < value.len; i += 1 {
integer += int(all_values[value.pos+i]) << (8*i)
}
return integer, value.form == VALUE_FORM_INTEGER
}
func increment_value(value Value) (new_value Value) {
if value.len == 0 { new_value = make_value(1)
} else { new_value = make_value(value.len) }
copy_value(&new_value, value)
for i := 0; i < value.len; i += 1 {
v := all_values[new_value.pos + i]
all_values[new_value.pos + i] = v + 1
if v == 255 { continue }
break
}
return new_value
}
func make_value(size int) (value Value) {
value.pos = value_head
value.len = size
value_head += size
all_values = append(all_values, make([]byte, size)...)
return value
}
func copy_value(a *Value, b Value) {
a.form = b.form
copy(all_values[a.pos:a.pos+a.len], all_values[b.pos:b.pos+b.len])
}