lib/filigree/src/font/binary.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const model = @import("model.zig");
 3 
 4 pub const Table = struct {
 5     offset: usize,
 6     len: usize,
 7 };
 8 
 9 pub fn readU16(data: []const u8, offset: usize) model.FontError!u16 {
10     if (offset > data.len or data.len - offset < 2) return error.InvalidFont;
11     return std.mem.readInt(u16, data[offset..][0..2], .big);
12 }
13 
14 pub fn readI8(data: []const u8, offset: usize) model.FontError!i8 {
15     if (offset >= data.len) return error.InvalidFont;
16     return @bitCast(data[offset]);
17 }
18 
19 pub fn readI16(data: []const u8, offset: usize) model.FontError!i16 {
20     return @bitCast(try readU16(data, offset));
21 }
22 
23 pub fn readI32(data: []const u8, offset: usize) model.FontError!i32 {
24     return @bitCast(try readU32(data, offset));
25 }
26 
27 pub fn readU24(data: []const u8, offset: usize) model.FontError!u32 {
28     if (offset > data.len or data.len - offset < 3) return error.InvalidFont;
29     return (@as(u32, data[offset]) << 16) |
30         (@as(u32, data[offset + 1]) << 8) |
31         @as(u32, data[offset + 2]);
32 }
33 
34 pub fn readU32(data: []const u8, offset: usize) model.FontError!u32 {
35     if (offset > data.len or data.len - offset < 4) return error.InvalidFont;
36     return std.mem.readInt(u32, data[offset..][0..4], .big);
37 }