-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpointers-bits.oak
More file actions
58 lines (50 loc) · 1.31 KB
/
pointers-bits.oak
File metadata and controls
58 lines (50 loc) · 1.31 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
// pointers + bitwise sample
{
println: println
bits: bits
string: string
type: type
} := import('std')
{
printf: printf
} := import('fmt')
{
and: and
or: or
xor: xor
not: not
hasAll?: hasAll?
hasAny?: hasAny?
set: set
clear: clear
toggle: toggle
addrOf: addrOf
add: add
diff: diff
read: read
write: write
} := import('bitwise')
println('== bitwise ==')
flags := 10 // 1010
mask := 6 // 0110
printf('flags : {{ 0 }}', flags)
printf('mask : {{ 0 }}', mask)
printf('and(flags,m) : {{ 0 }}', and(flags, mask))
printf('or(flags,m) : {{ 0 }}', or(flags, mask))
printf('xor(flags,m) : {{ 0 }}', xor(flags, mask))
printf('not(flags) : {{ 0 }}', not(flags))
printf('hasAll? : {{ 0 }}', hasAll?(flags, mask))
printf('hasAny? : {{ 0 }}', hasAny?(flags, mask))
printf('set : {{ 0 }}', set(flags, mask))
printf('clear : {{ 0 }}', clear(flags, mask))
printf('toggle : {{ 0 }}', toggle(flags, mask))
println('')
println('== pointers ==')
buf := bits([65, 66, 67, 68]) // ABCD
base := addrOf(buf)
printf('type(base) : {{ 0 }}', type(base))
printf('distance +3 : {{ 0 }}', diff(add(base, 3), base))
printf('before write : {{ 0 }}', string(read(base, 4)))
// overwrite bytes 1..2 with ZY
write(add(base, 1), [90, 89])
printf('after write : {{ 0 }}', string(read(base, 4)))