Interactive Bootstraps“Numbers in detail” →Headers up

9bf1a12722592e1d2e6535e1b15cdd5e89509f80
🐶
Add the header for encoding/decoding [u]leb128

⟨leb128.h⟩≡

@@ -0,0+1,32@@
1
+#pragma once
2
+
3
+#include <stdint.h>
4
+#include <stdlib.h>
5
+
6
+typedef struct {
7
+	uintptr_t value;
8
+	uint8_t size;
9
+} uvalue_size;
10
+
11
+typedef struct {
12
+	intptr_t value;
13
+	uint8_t size;
14
+} value_size;
15
+
16
+/// Return the number of bytes to encode the given unsigned value as uleb128
17
+uint8_t uleb128_bytes(uintptr_t value);
18
+
19
+/// Encode the given unsigned value as uleb128 into data, return size of encode
20
+uint8_t uleb128_encode(uintptr_t value, uint8_t *data);
21
+
22
+/// Decode the uleb128 data given, return value and size
23
+uvalue_size uleb128_decode(uint8_t *data);
24
+
25
+/// Return the number of bytes to encode the given signed value as leb128
26
+uint8_t leb128_bytes(intptr_t value);
27
+
28
+/// Encode the given signed value as leb128 into data, return size of encode
29
+uint8_t leb128_encode(intptr_t value, uint8_t *data);
30
+
31
+/// Decode the leb128 data given, return value and size
32
+value_size leb128_decode(uint8_t *data);