decode

Undocumented in source. Be warned that the author may not have intended to support it.
  1. DecodeLEB128!T decode(const(ubyte[]) data)
  2. DecodeLEB128!T decode(const(ubyte[]) data)
    @nogc
    decode
    (
    T = long
    )
    (
    const(ubyte[]) data
    )
    if (
    isSigned!T
    )

Examples

1 import std.algorithm.comparison : equal;
2 
3 void ok(T)(T x, const(ubyte[]) expected) {
4     BinBuffer encoded;
5     encode(encoded, x);
6     assert(equal(encoded.serialize, expected));
7     assert(calc_size(x) == expected.length);
8     assert(calc_size(expected) == expected.length);
9     const decoded = decode!T(expected);
10     assert(decoded.size == expected.length);
11     assert(decoded.value == x);
12 }
13 
14 {
15 
16     const(ubyte[5]) buffer_0 = [255, 255, 255, 255, 7];
17     ok!int(int.max, buffer_0);
18     const(ubyte[1]) buffer_1 = [27];
19     ok!ulong(27, buffer_1);
20     const(ubyte[2]) buffer_2 = [167, 21];
21     ok!ulong(2727, buffer_2);
22     const(ubyte[3]) buffer_3 = [215, 210, 16];
23     ok!ulong(272727, buffer_3);
24     const(ubyte[4]) buffer_4 = [151, 204, 128, 13];
25     ok!ulong(27272727, buffer_4);
26     const(ubyte[5]) buffer_5 = [181, 202, 212, 168, 5];
27     ok!ulong(1427449141, buffer_5);
28     const(ubyte[10]) buffer_6 = [
29         255, 255, 255, 255, 255, 255, 255, 255, 255, 1
30     ];
31     ok!ulong(ulong.max, buffer_6);
32 }
33 
34 {
35     const(ubyte[1]) buffer_0 = [127];
36     ok!int(-1, buffer_0);
37     const(ubyte[5]) buffer_1 = [255, 255, 255, 255, 7];
38     ok!int(int.max, buffer_1);
39     const(ubyte[5]) buffer_2 = [128, 128, 128, 128, 120];
40     ok!int(int.min, buffer_2);
41     const(ubyte[5]) buffer_3 = [255, 255, 255, 255, 7];
42     ok!int(int.max, buffer_3);
43     const(ubyte[5]) buffer_4 = [128, 128, 128, 128, 120];
44     ok!long(int.min, buffer_4);
45     const(ubyte[5]) buffer_5 = [255, 255, 255, 255, 7];
46     ok!long(int.max, buffer_5);
47 
48     const(ubyte[1]) buffer_6 = [27];
49     ok!long(27, buffer_6);
50     const(ubyte[2]) buffer_7 = [167, 21];
51     ok!long(2727, buffer_7);
52     const(ubyte[3]) buffer_8 = [215, 210, 16];
53     ok!long(272727, buffer_8);
54     const(ubyte[4]) buffer_9 = [151, 204, 128, 13];
55     ok!long(27272727, buffer_9);
56 
57     const(ubyte[5]) buffer_10 = [181, 202, 212, 168, 5];
58     ok!long(1427449141, buffer_10);
59 
60     const(ubyte[3]) buffer_11 = [192, 187, 120];
61     ok!int(-123456, buffer_11);
62 
63     const(ubyte[1]) buffer_12 = [101];
64     ok!long(-27, buffer_12);
65     const(ubyte[2]) buffer_13 = [217, 106];
66     ok!long(-2727, buffer_13);
67     const(ubyte[3]) buffer_14 = [169, 173, 111];
68     ok!long(-272727, buffer_14);
69     const(ubyte[4]) buffer_15 = [233, 179, 255, 114];
70     ok!long(-27272727, buffer_15);
71     const(ubyte[5]) buffer_16 = [203, 181, 171, 215, 122];
72     ok!long(-1427449141L, buffer_16);
73 
74     const(ubyte[1]) buffer_17 = [127];
75     ok!long(-1L, buffer_17);
76 
77     const(ubyte[10]) buffer_18 = [
78         254, 255, 255, 255, 255, 255, 255, 255, 255, 0
79     ];
80     ok!long(long.max - 1, buffer_18);
81     const(ubyte[10]) buffer_19 = [
82         255, 255, 255, 255, 255, 255, 255, 255, 255, 0
83     ];
84     ok!long(long.max, buffer_19);
85     const(ubyte[10]) buffer_20 = [
86         129, 128, 128, 128, 128, 128, 128, 128, 128, 127
87     ];
88     ok!long(long.min + 1, buffer_20);
89     const(ubyte[10]) buffer_21 = [
90         128, 128, 128, 128, 128, 128, 128, 128, 128, 127
91     ];
92     ok!long(long.min, buffer_21);
93 }
94 
95 { // Bug fix
96     assert(calc_size(-77) == 2);
97     const(ubyte[2]) buffer_22 = [179, 127];
98     ok!int(-77, buffer_22);
99 }

Meta