1use crate::*;
3
4#[inline]
5pub unsafe fn lean_mk_empty_float_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(
10 core::mem::size_of::<f64>() as c_uint,
11 0,
12 lean_unbox(capacity),
13 )
14}
15
16#[inline(always)]
17pub unsafe fn lean_float_array_size(a: b_lean_obj_arg) -> lean_obj_res {
18 lean_box(lean_sarray_size(a))
19}
20
21#[inline(always)]
22pub unsafe fn lean_float_array_cptr(a: b_lean_obj_arg) -> *mut f64 {
23 lean_sarray_cptr(a) as *mut _
24}
25
26#[inline(always)]
27pub unsafe fn lean_float_array_uget(a: b_lean_obj_arg, i: usize) -> f64 {
28 debug_assert!(i < lean_sarray_size(a));
29 *lean_float_array_cptr(a).add(i)
30}
31
32#[inline]
33pub unsafe fn lean_float_array_get(a: b_lean_obj_arg, i: b_lean_obj_arg) -> f64 {
34 if lean_is_scalar(i) {
35 let i = lean_unbox(i);
36 if i < lean_sarray_size(a) {
37 lean_float_array_uget(a, i)
38 } else {
39 0.0
40 }
41 } else {
42 0.0
44 }
45}
46
47#[inline(always)]
48pub unsafe fn lean_float_array_fget(a: b_lean_obj_arg, i: b_lean_obj_arg) -> f64 {
49 lean_float_array_uget(a, lean_unbox(i))
50}
51
52#[inline(always)]
53pub unsafe fn lean_float_array_uset(a: lean_obj_arg, i: usize, v: f64) -> *mut lean_object {
54 let r = if lean_is_exclusive(a) {
55 a
56 } else {
57 lean_copy_byte_array(a)
58 };
59 let it = lean_float_array_cptr(r).add(i);
60 *it = v;
61 r
62}
63
64#[inline]
65pub unsafe fn lean_float_array_set(a: lean_obj_arg, i: b_lean_obj_arg, v: f64) -> *mut lean_object {
66 if !lean_is_scalar(i) {
67 a
68 } else {
69 let i = lean_unbox(i);
70 if i >= lean_sarray_size(a) {
71 a
72 } else {
73 lean_float_array_uset(a, i, v)
74 }
75 }
76}
77
78#[inline(always)]
79pub unsafe fn lean_float_array_fset(
80 a: lean_obj_arg,
81 i: b_lean_obj_arg,
82 v: f64,
83) -> *mut lean_object {
84 lean_float_array_uset(a, lean_unbox(i), v)
85}
86
87extern "C" {
88 pub fn lean_float_array_mk(a: lean_obj_arg) -> lean_obj_res;
89 pub fn lean_float_array_data(a: lean_obj_arg) -> lean_obj_res;
90 pub fn lean_copy_float_array(a: lean_obj_arg) -> lean_obj_res;
91 pub fn lean_float_array_push(a: lean_obj_arg, d: f64) -> lean_obj_res;
92}