1#[macro_export]
2macro_rules! ring_func {
3 ($name:ident, $body:expr) => {
4 #[unsafe(no_mangle)]
5 pub extern "C" fn $name(p: *mut ::std::ffi::c_void) {
6 $body(p)
7 }
8 };
9}
10
11#[macro_export]
12macro_rules! ring_libinit {
13 ($($name:expr => $func:ident),* $(,)?) => {
14 #[unsafe(no_mangle)]
15 pub extern "C" fn ringlib_init(state: $crate::RingState) {
16 $(
17 $crate::ring_register_function(state, $name, $func);
18 )*
19 }
20 };
21}
22
23#[macro_export]
24macro_rules! ring_check_paracount {
25 ($p:expr, $expected:expr) => {
26 if $crate::ring_api_paracount($p) != $expected {
27 $crate::ring_api_error($p, $crate::RING_API_BADPARACOUNT);
28 return;
29 }
30 };
31 ($p:expr, $expected:expr, $msg:expr) => {
32 if $crate::ring_api_paracount($p) != $expected {
33 $crate::ring_api_error($p, $msg);
34 return;
35 }
36 };
37}
38
39#[macro_export]
40macro_rules! ring_check_paracount_range {
41 ($p:expr, $min:expr, $max:expr) => {
42 let count = $crate::ring_api_paracount($p);
43 if count < $min || count > $max {
44 $crate::ring_api_error($p, $crate::RING_API_BADPARACOUNT);
45 return;
46 }
47 };
48}
49
50#[macro_export]
51macro_rules! ring_check_string {
52 ($p:expr, $n:expr) => {
53 if !$crate::ring_api_isstring($p, $n) {
54 $crate::ring_api_error($p, $crate::RING_API_BADPARATYPE);
55 return;
56 }
57 };
58}
59
60#[macro_export]
61macro_rules! ring_check_number {
62 ($p:expr, $n:expr) => {
63 if !$crate::ring_api_isnumber($p, $n) {
64 $crate::ring_api_error($p, $crate::RING_API_BADPARATYPE);
65 return;
66 }
67 };
68}
69
70#[macro_export]
71macro_rules! ring_check_pointer {
72 ($p:expr, $n:expr) => {
73 if !$crate::ring_api_ispointer($p, $n) {
74 $crate::ring_api_error($p, $crate::RING_API_BADPARATYPE);
75 return;
76 }
77 };
78}
79
80#[macro_export]
81macro_rules! ring_check_cpointer {
82 ($p:expr, $n:expr) => {
83 if !$crate::ring_api_iscpointer($p, $n) {
84 $crate::ring_api_error($p, $crate::RING_API_BADPARATYPE);
85 return;
86 }
87 };
88}
89
90#[macro_export]
91macro_rules! ring_check_list {
92 ($p:expr, $n:expr) => {
93 if !$crate::ring_api_islist($p, $n) {
94 $crate::ring_api_error($p, $crate::RING_API_BADPARATYPE);
95 return;
96 }
97 };
98}
99
100#[macro_export]
101macro_rules! ring_get_string {
102 ($p:expr, $n:expr) => {
103 $crate::ring_api_getstring_str($p, $n)
104 };
105}
106
107#[macro_export]
108macro_rules! ring_get_number {
109 ($p:expr, $n:expr) => {
110 $crate::ring_api_getnumber($p, $n)
111 };
112}
113
114#[macro_export]
115macro_rules! ring_get_int {
116 ($p:expr, $n:expr) => {
117 $crate::ring_api_getnumber($p, $n) as i32
118 };
119}
120
121#[macro_export]
122macro_rules! ring_get_pointer {
123 ($p:expr, $n:expr, $type:ty, $ctype:expr) => {{
124 let ptr = $crate::ring_api_getcpointer($p, $n, $ctype);
125 if ptr.is_null() {
126 None
127 } else {
128 Some(unsafe { &mut *(ptr as *mut $type) })
129 }
130 }};
131}
132
133#[macro_export]
134macro_rules! ring_get_cpointer {
135 ($p:expr, $n:expr, $ctype:expr) => {
136 $crate::ring_api_getcpointer($p, $n, $ctype)
137 };
138}
139
140#[macro_export]
141macro_rules! ring_get_list {
142 ($p:expr, $n:expr) => {
143 $crate::ring_api_getlist($p, $n)
144 };
145}
146
147#[macro_export]
148macro_rules! ring_ret_number {
149 ($p:expr, $n:expr) => {
150 $crate::ring_api_retnumber($p, $n as f64)
151 };
152}
153
154#[macro_export]
155macro_rules! ring_ret_string {
156 ($p:expr, $s:expr) => {
157 $crate::ring_api_retstring_str($p, $s)
158 };
159}
160
161#[macro_export]
162macro_rules! ring_ret_cpointer {
163 ($p:expr, $ptr:expr, $ctype:expr) => {
164 $crate::ring_api_retcpointer($p, $ptr as *mut ::std::ffi::c_void, $ctype)
165 };
166}
167
168#[macro_export]
169macro_rules! ring_ret_managed_cpointer {
170 ($p:expr, $ptr:expr, $ctype:expr, $free_func:expr) => {
171 $crate::ring_api_retcpointer2(
172 $p,
173 $ptr as *mut ::std::ffi::c_void,
174 $ctype,
175 Some($free_func),
176 )
177 };
178}
179
180#[macro_export]
181macro_rules! ring_ret_list {
182 ($p:expr, $list:expr) => {
183 $crate::ring_api_retlist($p, $list)
184 };
185}
186
187#[macro_export]
188macro_rules! ring_new_list {
189 ($p:expr) => {
190 $crate::ring_api_newlist($p)
191 };
192}
193
194#[macro_export]
195macro_rules! ring_error {
196 ($p:expr, $msg:expr) => {
197 $crate::ring_api_error_str($p, $msg)
198 };
199}