1use crate::*;
3
4#[inline]
5pub unsafe fn lean_mk_empty_byte_array(capacity: b_lean_obj_arg) -> lean_obj_res {
6 if !lean_is_scalar(capacity) {
7 lean_internal_panic_out_of_memory()
8 }
9 lean_alloc_sarray(1, 0, lean_unbox(capacity))
10}
11
12#[inline(always)]
13pub unsafe fn lean_byte_array_size(a: b_lean_obj_arg) -> lean_obj_res {
14 lean_box(lean_sarray_size(a))
15}
16
17#[inline(always)]
18pub unsafe fn lean_byte_array_uget(a: b_lean_obj_arg, i: usize) -> u8 {
19 debug_assert!(i < lean_sarray_size(a));
20 *lean_sarray_cptr(a).add(i)
21}
22
23#[inline]
24pub unsafe fn lean_byte_array_get(a: b_lean_obj_arg, i: b_lean_obj_arg) -> u8 {
25 if lean_is_scalar(i) {
26 let i = lean_unbox(i);
27 if i < lean_sarray_size(a) {
28 lean_byte_array_uget(a, i)
29 } else {
30 0
31 }
32 } else {
33 0
35 }
36}
37
38#[inline(always)]
39pub unsafe fn lean_byte_array_fget(a: b_lean_obj_arg, i: b_lean_obj_arg) -> u8 {
40 lean_byte_array_uget(a, lean_unbox(i))
41}
42
43#[inline(always)]
44pub unsafe fn lean_byte_array_uset(a: lean_obj_arg, i: usize, v: u8) -> *mut lean_object {
45 let r = if lean_is_exclusive(a) {
46 a
47 } else {
48 lean_copy_byte_array(a)
49 };
50 let it = lean_sarray_cptr(r).add(i);
51 *it = v;
52 r
53}
54
55#[inline]
56pub unsafe fn lean_byte_array_set(a: lean_obj_arg, i: b_lean_obj_arg, v: u8) -> *mut lean_object {
57 if !lean_is_scalar(i) {
58 a
59 } else {
60 let i = lean_unbox(i);
61 if i >= lean_sarray_size(a) {
62 a
63 } else {
64 lean_byte_array_uset(a, i, v)
65 }
66 }
67}
68
69#[inline(always)]
70pub unsafe fn lean_byte_array_fset(a: lean_obj_arg, i: b_lean_obj_arg, v: u8) -> *mut lean_object {
71 lean_byte_array_uset(a, lean_unbox(i), v)
72}
73
74extern "C" {
75 pub fn lean_byte_array_mk(a: lean_obj_arg) -> lean_obj_res;
76 pub fn lean_byte_array_data(a: lean_obj_arg) -> lean_obj_res;
77 pub fn lean_copy_byte_array(a: lean_obj_arg) -> lean_obj_res;
78 pub fn lean_byte_array_push(a: lean_obj_arg, b: u8) -> lean_obj_res;
79}