mumuarray/
lib.rs

1#![allow(dead_code)]
2#![allow(unused_imports)]
3
4use mumu::{
5    parser::interpreter::Interpreter,
6    parser::types::{Value, FunctionValue},
7};
8use std::sync::{Arc, Mutex};
9
10mod simple;
11mod append;
12mod apply;
13mod assoc;
14mod collect;
15mod each;
16mod join;
17mod length;
18mod map;
19mod multi;
20mod nth;
21mod prop;
22mod range;
23mod reduce;
24mod search;
25mod sort;
26mod tail;
27mod util;
28mod transform; // Now a directory, not a flat file
29
30#[no_mangle]
31pub unsafe extern "C" fn Cargo_lock(
32    interp_ptr: *mut std::ffi::c_void,
33    _extra_str: *const std::ffi::c_void,
34) -> i32 {
35    let interp = &mut *(interp_ptr as *mut Interpreter);
36
37    macro_rules! reg {
38        ($name:expr, $f:expr) => {{
39            let func = Arc::new(Mutex::new($f));
40            interp.register_dynamic_function($name, func);
41            interp.set_variable($name, Value::Function(Box::new(FunctionValue::Named($name.into()))));
42        }};
43    }
44
45    reg!("array:filter", simple::array_filter);
46    reg!("array:sort", sort::array_sort_bridge);
47    reg!("array:flatten", simple::array_flatten);
48    reg!("array:join", join::array_join_bridge);
49    reg!("array:zip", simple::array_zip);
50    reg!("array:zipWith", multi::array_zip_with_bridge);
51    reg!("array:prop", prop::array_prop_bridge);
52
53    reg!("array:append", append::array_append_bridge);
54    reg!("array:apply", apply::array_apply_bridge);
55    reg!("array:assoc", assoc::array_assoc_bridge);
56    reg!("array:chunk", transform::chunk::array_chunk_bridge);
57    reg!("array:collect", collect::array_collect_bridge);
58    reg!("array:compact", util::array_compact_bridge);
59    reg!("array:drop", transform::drop::array_drop_bridge);
60    reg!("array:dropWhile", transform::drop_while::array_drop_while_bridge);
61    reg!("array:each", each::array_each_bridge);
62    reg!("array:every", search::array_every_bridge);
63    reg!("array:find", search::array_find_bridge);
64    reg!("array:findIndex", search::array_find_index_bridge);
65    reg!("array:flattenDeep", util::array_flatten_deep_bridge);
66    reg!("array:group_by", transform::group_by::array_group_by_bridge);
67    reg!("array:head", util::array_head_bridge);
68    reg!("array:includes", search::array_includes_bridge);
69    reg!("array:init", transform::init::array_init_bridge);
70    reg!("array:last", util::array_last_bridge);
71    reg!("array:length", length::array_length_bridge);
72    reg!("array:map", map::array_map_bridge);
73    reg!("array:multi_concat", multi::array_concat_bridge);
74    reg!("array:multi_difference", multi::array_difference_bridge);
75    reg!("array:multi_intersection", multi::array_intersection_bridge);
76    reg!("array:multi_union", multi::array_union_bridge);
77    reg!("array:multi_zip", multi::array_zip_bridge);
78    reg!("array:multi_zipWith", multi::array_zip_with_bridge);
79    reg!("array:nth", nth::array_nth_bridge);
80    reg!("array:partition", transform::partition::array_partition_bridge);
81    reg!("array:pluck", transform::pluck::array_pluck_bridge);
82    reg!("array:prop_partial", prop::array_prop_bridge);
83    reg!("array:range", range::array_range_bridge);
84    reg!("array:reduce", reduce::array_reduce_bridge);
85    reg!("array:repeat", transform::fill::array_repeat_bridge);
86    reg!("array:reverse", util::array_reverse_bridge);
87    reg!("array:slice", transform::slice::array_slice_bridge);
88    reg!("array:some", search::array_some_bridge);
89    reg!("array:sortBy", sort::array_sort_by_bridge);
90    reg!("array:sortWith", sort::array_sort_with_bridge);
91    reg!("array:tail", tail::array_tail_bridge);
92    reg!("array:take", transform::take::array_take_bridge);
93    reg!("array:takeWhile", transform::take_while::array_take_while_bridge);
94    reg!("array:uniq", util::array_uniq_bridge);
95    reg!("array:shuffle", util::array_shuffle_bridge);
96
97    0
98}