Skip to main content

luaur_vm/functions/
luaopen_buffer.rs

1use crate::functions::buffer_copy::buffer_copy;
2use crate::functions::buffer_create::buffer_create;
3use crate::functions::buffer_fill::buffer_fill;
4use crate::functions::buffer_fromstring::buffer_fromstring;
5use crate::functions::buffer_len::buffer_len;
6use crate::functions::buffer_readbits::buffer_readbits;
7use crate::functions::buffer_readfp::buffer_readfp;
8use crate::functions::buffer_readinteger::buffer_readinteger;
9use crate::functions::buffer_readlong::buffer_readlong;
10use crate::functions::buffer_readstring::buffer_readstring;
11use crate::functions::buffer_tostring::buffer_tostring;
12use crate::functions::buffer_writebits::buffer_writebits;
13use crate::functions::buffer_writefp::buffer_writefp;
14use crate::functions::buffer_writeinteger::buffer_writeinteger;
15use crate::functions::buffer_writelong::buffer_writelong;
16use crate::functions::buffer_writestring::buffer_writestring;
17use crate::functions::lua_l_register::lua_l_register;
18use crate::records::lua_l_reg::LuaLReg;
19use crate::type_aliases::lua_state::lua_State;
20use luaur_common::FFlag;
21
22struct SyncLuaLReg<const N: usize>([LuaLReg; N]);
23unsafe impl<const N: usize> Sync for SyncLuaLReg<N> {}
24
25static BUFFER_LIB: SyncLuaLReg<29> = SyncLuaLReg([
26    LuaLReg {
27        name: c"create".as_ptr(),
28        func: Some(buffer_create),
29    },
30    LuaLReg {
31        name: c"fromstring".as_ptr(),
32        func: Some(buffer_fromstring),
33    },
34    LuaLReg {
35        name: c"tostring".as_ptr(),
36        func: Some(buffer_tostring),
37    },
38    LuaLReg {
39        name: c"readi8".as_ptr(),
40        func: Some(buffer_readinteger::<i8>),
41    },
42    LuaLReg {
43        name: c"readu8".as_ptr(),
44        func: Some(buffer_readinteger::<u8>),
45    },
46    LuaLReg {
47        name: c"readi16".as_ptr(),
48        func: Some(buffer_readinteger::<i16>),
49    },
50    LuaLReg {
51        name: c"readu16".as_ptr(),
52        func: Some(buffer_readinteger::<u16>),
53    },
54    LuaLReg {
55        name: c"readi32".as_ptr(),
56        func: Some(buffer_readinteger::<i32>),
57    },
58    LuaLReg {
59        name: c"readu32".as_ptr(),
60        func: Some(buffer_readinteger::<u32>),
61    },
62    LuaLReg {
63        name: c"readf32".as_ptr(),
64        func: Some(buffer_readfp::<f32, u32>),
65    },
66    LuaLReg {
67        name: c"readf64".as_ptr(),
68        func: Some(buffer_readfp::<f64, u64>),
69    },
70    LuaLReg {
71        name: c"writei8".as_ptr(),
72        func: Some(buffer_writeinteger::<i8>),
73    },
74    LuaLReg {
75        name: c"writeu8".as_ptr(),
76        func: Some(buffer_writeinteger::<u8>),
77    },
78    LuaLReg {
79        name: c"writei16".as_ptr(),
80        func: Some(buffer_writeinteger::<i16>),
81    },
82    LuaLReg {
83        name: c"writeu16".as_ptr(),
84        func: Some(buffer_writeinteger::<u16>),
85    },
86    LuaLReg {
87        name: c"writei32".as_ptr(),
88        func: Some(buffer_writeinteger::<i32>),
89    },
90    LuaLReg {
91        name: c"writeu32".as_ptr(),
92        func: Some(buffer_writeinteger::<u32>),
93    },
94    LuaLReg {
95        name: c"writef32".as_ptr(),
96        func: Some(buffer_writefp::<f32, u32>),
97    },
98    LuaLReg {
99        name: c"writef64".as_ptr(),
100        func: Some(buffer_writefp::<f64, u64>),
101    },
102    LuaLReg {
103        name: c"readstring".as_ptr(),
104        func: Some(buffer_readstring),
105    },
106    LuaLReg {
107        name: c"writestring".as_ptr(),
108        func: Some(buffer_writestring),
109    },
110    LuaLReg {
111        name: c"len".as_ptr(),
112        func: Some(buffer_len),
113    },
114    LuaLReg {
115        name: c"copy".as_ptr(),
116        func: Some(buffer_copy),
117    },
118    LuaLReg {
119        name: c"fill".as_ptr(),
120        func: Some(buffer_fill),
121    },
122    LuaLReg {
123        name: c"readbits".as_ptr(),
124        func: Some(buffer_readbits),
125    },
126    LuaLReg {
127        name: c"writebits".as_ptr(),
128        func: Some(buffer_writebits),
129    },
130    LuaLReg {
131        name: c"readinteger".as_ptr(),
132        func: Some(buffer_readlong),
133    },
134    LuaLReg {
135        name: c"writeinteger".as_ptr(),
136        func: Some(buffer_writelong),
137    },
138    LuaLReg {
139        name: core::ptr::null(),
140        func: None,
141    },
142]);
143
144static BUFFER_LIB_NO_INTEGER: SyncLuaLReg<27> = SyncLuaLReg([
145    LuaLReg {
146        name: c"create".as_ptr(),
147        func: Some(buffer_create),
148    },
149    LuaLReg {
150        name: c"fromstring".as_ptr(),
151        func: Some(buffer_fromstring),
152    },
153    LuaLReg {
154        name: c"tostring".as_ptr(),
155        func: Some(buffer_tostring),
156    },
157    LuaLReg {
158        name: c"readi8".as_ptr(),
159        func: Some(buffer_readinteger::<i8>),
160    },
161    LuaLReg {
162        name: c"readu8".as_ptr(),
163        func: Some(buffer_readinteger::<u8>),
164    },
165    LuaLReg {
166        name: c"readi16".as_ptr(),
167        func: Some(buffer_readinteger::<i16>),
168    },
169    LuaLReg {
170        name: c"readu16".as_ptr(),
171        func: Some(buffer_readinteger::<u16>),
172    },
173    LuaLReg {
174        name: c"readi32".as_ptr(),
175        func: Some(buffer_readinteger::<i32>),
176    },
177    LuaLReg {
178        name: c"readu32".as_ptr(),
179        func: Some(buffer_readinteger::<u32>),
180    },
181    LuaLReg {
182        name: c"readf32".as_ptr(),
183        func: Some(buffer_readfp::<f32, u32>),
184    },
185    LuaLReg {
186        name: c"readf64".as_ptr(),
187        func: Some(buffer_readfp::<f64, u64>),
188    },
189    LuaLReg {
190        name: c"writei8".as_ptr(),
191        func: Some(buffer_writeinteger::<i8>),
192    },
193    LuaLReg {
194        name: c"writeu8".as_ptr(),
195        func: Some(buffer_writeinteger::<u8>),
196    },
197    LuaLReg {
198        name: c"writei16".as_ptr(),
199        func: Some(buffer_writeinteger::<i16>),
200    },
201    LuaLReg {
202        name: c"writeu16".as_ptr(),
203        func: Some(buffer_writeinteger::<u16>),
204    },
205    LuaLReg {
206        name: c"writei32".as_ptr(),
207        func: Some(buffer_writeinteger::<i32>),
208    },
209    LuaLReg {
210        name: c"writeu32".as_ptr(),
211        func: Some(buffer_writeinteger::<u32>),
212    },
213    LuaLReg {
214        name: c"writef32".as_ptr(),
215        func: Some(buffer_writefp::<f32, u32>),
216    },
217    LuaLReg {
218        name: c"writef64".as_ptr(),
219        func: Some(buffer_writefp::<f64, u64>),
220    },
221    LuaLReg {
222        name: c"readstring".as_ptr(),
223        func: Some(buffer_readstring),
224    },
225    LuaLReg {
226        name: c"writestring".as_ptr(),
227        func: Some(buffer_writestring),
228    },
229    LuaLReg {
230        name: c"len".as_ptr(),
231        func: Some(buffer_len),
232    },
233    LuaLReg {
234        name: c"copy".as_ptr(),
235        func: Some(buffer_copy),
236    },
237    LuaLReg {
238        name: c"fill".as_ptr(),
239        func: Some(buffer_fill),
240    },
241    LuaLReg {
242        name: c"readbits".as_ptr(),
243        func: Some(buffer_readbits),
244    },
245    LuaLReg {
246        name: c"writebits".as_ptr(),
247        func: Some(buffer_writebits),
248    },
249    LuaLReg {
250        name: core::ptr::null(),
251        func: None,
252    },
253]);
254
255pub unsafe fn luaopen_buffer(L: *mut lua_State) -> core::ffi::c_int {
256    let buffer_lib = if FFlag::LuauIntegerLibrary.get() {
257        BUFFER_LIB.0.as_ptr()
258    } else {
259        BUFFER_LIB_NO_INTEGER.0.as_ptr()
260    };
261
262    lua_l_register(L, c"buffer".as_ptr(), buffer_lib);
263    1
264}