Making leaps to better data serialization
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
package game
|
||||
|
||||
Vec2i :: struct {
|
||||
x: int,
|
||||
y: int,
|
||||
x: i32,
|
||||
y: i32,
|
||||
}
|
||||
|
||||
vec2i_to_vec2 :: proc(v2i:Vec2i) -> [2]f32 {
|
||||
@@ -10,43 +10,17 @@ vec2i_to_vec2 :: proc(v2i:Vec2i) -> [2]f32 {
|
||||
}
|
||||
|
||||
vec2_to_vec2i :: proc(v2:[2]f32) -> Vec2i {
|
||||
return {int(v2.x), int(v2.y)}
|
||||
return {i32(v2.x), i32(v2.y)}
|
||||
}
|
||||
|
||||
serialize_vec2i :: proc(v:Vec2i) -> [8]byte {
|
||||
data: [8]byte
|
||||
|
||||
x := serialize_int(v.x)
|
||||
y := serialize_int(v.y)
|
||||
|
||||
for i in 0..<4 {
|
||||
data[i] = x[i]
|
||||
}
|
||||
|
||||
for i in 0..<4 {
|
||||
data[4 + i] = y[i]
|
||||
}
|
||||
|
||||
return data
|
||||
to_bytes :: proc(v: $T) -> [size_of(T)]u8 {
|
||||
val := v
|
||||
encoded_bytes := (^[size_of(T)]u8)(&val)
|
||||
return encoded_bytes^
|
||||
}
|
||||
|
||||
deserialize_vec2i :: proc(data:[]byte) -> Vec2i {
|
||||
x := deserialize_int(data[0:4])
|
||||
y := deserialize_int(data[4:8])
|
||||
return Vec2i{x,y}
|
||||
}
|
||||
|
||||
serialize_int :: proc(v:int) -> [4]byte {
|
||||
data : [4]byte
|
||||
|
||||
data[0] = byte(v)
|
||||
data[1] = byte(v >> 8)
|
||||
data[2] = byte(v >> 16)
|
||||
data[3] = byte(v >> 24)
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
deserialize_int :: proc(data:[]byte) -> int {
|
||||
return int(data[0]) | int(data[1]) << 8 | int(data[2]) << 16 | int(data[3]) << 24
|
||||
from_bytes :: proc($T:typeid, data: [size_of(T)]u8) -> T {
|
||||
bytes := data
|
||||
decoded_value := (^T)(&bytes)^
|
||||
return decoded_value
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user