Function toDot [src]

Prototype

pub fn toDot(self: Oid, writer: anytype) @TypeOf(writer).Error!void

Parameters

self: Oid

Example

test toDot { var buf: [256]u8 = undefined; for (test_cases) |t| { var stream = std.io.fixedBufferStream(&buf); try toDot(Oid{ .encoded = t.encoded }, stream.writer()); try std.testing.expectEqualStrings(t.dot_notation, stream.getWritten()); } }

Source

pub fn toDot(self: Oid, writer: anytype) @TypeOf(writer).Error!void { const encoded = self.encoded; const first = @divTrunc(encoded[0], 40); const second = encoded[0] - first * 40; try writer.print("{d}.{d}", .{ first, second }); var i: usize = 1; while (i != encoded.len) { const n_bytes: usize = brk: { var res: usize = 1; var j: usize = i; while (encoded[j] & 0x80 != 0) { res += 1; j += 1; } break :brk res; }; var n: usize = 0; for (0..n_bytes) |j| { const place = std.math.pow(usize, encoding_base, n_bytes - j - 1); n += place * (encoded[i] & 0b01111111); i += 1; } try writer.print(".{d}", .{n}); } }