wolfram_library_link/
rtl.rs

1//! Lazy bindings to Wolfram Runtime Library (RTL) functions.
2//!
3//! Attempting to call these bindings will result in a panic if
4//! [`initialize()`][crate::initialize] has not been called.
5
6use std::{ffi::c_void, os::raw::c_int};
7
8use once_cell::sync::Lazy;
9
10use crate::sys::{
11    self, colorspace_t, errcode_t, imagedata_t, mbool, mcomplex, mint, mreal,
12    numericarray_convert_method_t, numericarray_data_t, raw_t_bit, raw_t_real32,
13    raw_t_real64, raw_t_ubit16, raw_t_ubit8, type_t, DataStore, DataStoreNode, MArgument,
14    MImage, MInputStream, MNumericArray, MOutputStream, MRawArray, MSparseArray, MTensor,
15    WSENV, WSLINK,
16};
17
18// TODO: Include auto-generated doc comment with path to appropriate field.
19//       Mention that these functions are looked-up dynamically using get_library_data().
20macro_rules! rtl_func {
21    ($($(#[$autodoc:ident])? $vis:vis $path:ident : $type:ty,)*) => {
22        $(
23            $(
24                #[$autodoc = concat!(
25                    "*LibraryLink C API Documentation:* [`",
26                    stringify!($path),
27                    "`](https://reference.wolfram.com/language/LibraryLink/ref/callback/",
28                    stringify!($path),
29                    ".html)"
30                )]
31            )?
32            #[allow(missing_docs, non_upper_case_globals)]
33            $vis static $path: Lazy<$type> = Lazy::new(
34                || crate::get_library_data().$path
35            );
36        )*
37    };
38
39    ($group:ident => [$($(#[$autodoc:ident])? $vis:vis $path:ident : $type:ty,)*]) => {
40        // NOTE: That these fields are even an Option is likely just bindgen being
41        //       conservative with function pointers possibly being null.
42        // TODO: Investigate making bindgen treat these as non-null fields?
43        $(
44            $(
45                #[$autodoc = concat!(
46                    "*LibraryLink C API Documentation:* [`",
47                    stringify!($path),
48                    "`](https://reference.wolfram.com/language/LibraryLink/ref/callback/",
49                    stringify!($path),
50                    ".html)"
51                )]
52            )?
53            #[allow(missing_docs, non_upper_case_globals)]
54            $vis static $path: Lazy<$type> = Lazy::new(
55                || unsafe { (*crate::get_library_data().$group) }.$path.expect(concat!("unwrap: ", stringify!($group)))
56            );
57        )*
58    };
59}
60
61//======================================
62// WolframLibraryData.* fields
63//======================================
64
65rtl_func![
66    #[doc] pub UTF8String_disown: unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_char),
67
68    #[doc] pub MTensor_new: unsafe extern "C" fn(
69        arg1: mint,
70        arg2: mint,
71        arg3: *const mint,
72        arg4: *mut MTensor,
73    ) -> ::std::os::raw::c_int,
74
75    #[doc] pub MTensor_free: unsafe extern "C" fn(arg1: MTensor),
76
77    #[doc] pub MTensor_clone:
78        unsafe extern "C" fn(arg1: MTensor, arg2: *mut MTensor) -> ::std::os::raw::c_int,
79
80    #[doc] pub MTensor_shareCount: unsafe extern "C" fn(arg1: MTensor) -> mint,
81
82    #[doc] pub MTensor_disown: unsafe extern "C" fn(arg1: MTensor),
83
84    #[doc] pub MTensor_disownAll: unsafe extern "C" fn(arg1: MTensor),
85
86    #[doc] pub MTensor_setInteger: unsafe extern "C" fn(
87        arg1: MTensor,
88        arg2: *mut mint,
89        arg3: mint,
90    ) -> ::std::os::raw::c_int,
91
92    #[doc] pub MTensor_setReal: unsafe extern "C" fn(
93        arg1: MTensor,
94        arg2: *mut mint,
95        arg3: mreal,
96    ) -> ::std::os::raw::c_int,
97
98    #[doc] pub MTensor_setComplex: unsafe extern "C" fn(
99        arg1: MTensor,
100        arg2: *mut mint,
101        arg3: mcomplex,
102    ) -> ::std::os::raw::c_int,
103
104    #[doc] pub MTensor_setMTensor: unsafe extern "C" fn(
105        arg1: MTensor,
106        arg2: MTensor,
107        arg3: *mut mint,
108        arg4: mint,
109    ) -> ::std::os::raw::c_int,
110
111    #[doc] pub MTensor_getInteger: unsafe extern "C" fn(
112        arg1: MTensor,
113        arg2: *mut mint,
114        arg3: *mut mint,
115    ) -> ::std::os::raw::c_int,
116
117    #[doc] pub MTensor_getReal: unsafe extern "C" fn(
118        arg1: MTensor,
119        arg2: *mut mint,
120        arg3: *mut mreal,
121    ) -> ::std::os::raw::c_int,
122
123    #[doc] pub MTensor_getComplex: unsafe extern "C" fn(
124        arg1: MTensor,
125        arg2: *mut mint,
126        arg3: *mut mcomplex,
127    ) -> ::std::os::raw::c_int,
128
129    #[doc] pub MTensor_getMTensor: unsafe extern "C" fn(
130        arg1: MTensor,
131        arg2: *mut mint,
132        arg3: mint,
133        arg4: *mut MTensor,
134    ) -> ::std::os::raw::c_int,
135
136    #[doc] pub MTensor_getRank: unsafe extern "C" fn(arg1: MTensor) -> mint,
137    #[doc] pub MTensor_getDimensions: unsafe extern "C" fn(arg1: MTensor) -> *const mint,
138    #[doc] pub MTensor_getType: unsafe extern "C" fn(arg1: MTensor) -> mint,
139    #[doc] pub MTensor_getFlattenedLength: unsafe extern "C" fn(arg1: MTensor) -> mint,
140    #[doc] pub MTensor_getIntegerData: unsafe extern "C" fn(arg1: MTensor) -> *mut mint,
141    #[doc] pub MTensor_getRealData: unsafe extern "C" fn(arg1: MTensor) -> *mut mreal,
142    #[doc] pub MTensor_getComplexData: unsafe extern "C" fn(arg1: MTensor) -> *mut mcomplex,
143
144    #[doc] pub Message: unsafe extern "C" fn(arg1: *const ::std::os::raw::c_char),
145    #[doc] pub AbortQ: unsafe extern "C" fn() -> mint,
146
147    #[doc] pub getWSLINK: unsafe extern "C" fn(arg1: sys::WolframLibraryData) -> WSLINK,
148    #[doc] pub processWSLINK: unsafe extern "C" fn(arg1: WSLINK) -> ::std::os::raw::c_int,
149
150    pub evaluateExpression: unsafe extern "C" fn(
151        arg1: sys::WolframLibraryData,
152        arg2: *mut ::std::os::raw::c_char,
153        arg3: ::std::os::raw::c_int,
154        arg4: mint,
155        arg5: *mut ::std::os::raw::c_void,
156    ) -> ::std::os::raw::c_int,
157
158    pub registerInputStreamMethod: unsafe extern "C" fn(
159        name: *const ::std::os::raw::c_char,
160        ctor: Option<
161            unsafe extern "C" fn(
162                arg1: MInputStream,
163                msgHead: *const ::std::os::raw::c_char,
164                optionsIn: *mut ::std::os::raw::c_void,
165            ),
166        >,
167        handlerTest: Option<
168            unsafe extern "C" fn(
169                arg1: *mut ::std::os::raw::c_void,
170                arg2: *mut ::std::os::raw::c_char,
171            ) -> mbool,
172        >,
173        methodData: *mut ::std::os::raw::c_void,
174        destroyMethod: Option<
175            unsafe extern "C" fn(methodData: *mut ::std::os::raw::c_void),
176        >,
177    ) -> mbool,
178
179    pub unregisterInputStreamMethod:
180        unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> mbool,
181
182    pub registerOutputStreamMethod: unsafe extern "C" fn(
183        name: *const ::std::os::raw::c_char,
184        ctor: Option<
185            unsafe extern "C" fn(
186                arg1: MOutputStream,
187                msgHead: *const ::std::os::raw::c_char,
188                optionsIn: *mut ::std::os::raw::c_void,
189                appendMode: mbool,
190            ),
191        >,
192        handlerTest: Option<
193            unsafe extern "C" fn(
194                arg1: *mut ::std::os::raw::c_void,
195                arg2: *mut ::std::os::raw::c_char,
196            ) -> mbool,
197        >,
198        methodData: *mut ::std::os::raw::c_void,
199        destroyMethod: Option<
200            unsafe extern "C" fn(methodData: *mut ::std::os::raw::c_void),
201        >,
202    ) -> mbool,
203
204    pub unregisterOutputStreamMethod:
205        unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> mbool,
206
207
208    pub getWSLINKEnvironment:
209        unsafe extern "C" fn(arg1: sys::WolframLibraryData) -> WSENV,
210
211    #[doc] pub registerLibraryExpressionManager: unsafe extern "C" fn(
212        mname: *const ::std::os::raw::c_char,
213        mfun: Option<
214            unsafe extern "C" fn(arg1: sys::WolframLibraryData, arg2: mbool, arg3: mint),
215        >,
216    )
217        -> ::std::os::raw::c_int,
218
219    #[doc] pub unregisterLibraryExpressionManager: unsafe extern "C" fn(
220        mname: *const ::std::os::raw::c_char,
221    )
222        -> ::std::os::raw::c_int,
223
224    #[doc] pub releaseManagedLibraryExpression: unsafe extern "C" fn(
225        mname: *const ::std::os::raw::c_char,
226        id: mint,
227    )
228        -> ::std::os::raw::c_int,
229
230    #[doc] pub registerLibraryCallbackManager: unsafe extern "C" fn(
231        name: *const ::std::os::raw::c_char,
232        mfun: Option<
233            unsafe extern "C" fn(
234                arg1: sys::WolframLibraryData,
235                arg2: mint,
236                arg3: MTensor,
237            ) -> mbool,
238        >,
239    )
240        -> ::std::os::raw::c_int,
241
242    #[doc] pub unregisterLibraryCallbackManager: unsafe extern "C" fn(
243        name: *const ::std::os::raw::c_char,
244    )
245        -> ::std::os::raw::c_int,
246
247    #[doc] pub callLibraryCallbackFunction: unsafe extern "C" fn(
248        id: mint,
249        ArgC: mint,
250        Args: *mut MArgument,
251        Res: MArgument,
252    ) -> ::std::os::raw::c_int,
253
254    #[doc] pub releaseLibraryCallbackFunction:
255        unsafe extern "C" fn(id: mint) -> ::std::os::raw::c_int,
256
257    pub validatePath: unsafe extern "C" fn(
258        path: *mut ::std::os::raw::c_char,
259        type_: ::std::os::raw::c_char,
260    ) -> mbool,
261
262    pub protectedModeQ: unsafe extern "C" fn() -> mbool,
263    pub setParallelThreadNumber:
264        unsafe extern "C" fn(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int,
265    pub restoreParallelThreadNumber: unsafe extern "C" fn(arg1: ::std::os::raw::c_int),
266    pub getParallelThreadNumber: unsafe extern "C" fn() -> ::std::os::raw::c_int,
267];
268
269//======================================
270// IO Library
271//======================================
272
273rtl_func![
274    ioLibraryFunctions => [
275        pub createAsynchronousTaskWithoutThread: unsafe extern "C" fn() -> mint,
276        pub createAsynchronousTaskWithThread:
277            unsafe extern "C" fn(
278                asyncRunner: ::std::option::Option<
279                    unsafe extern "C" fn(
280                        asyncTaskID: mint,
281                        initData: *mut ::std::os::raw::c_void,
282                    ),
283                >,
284                initData: *mut ::std::os::raw::c_void,
285            ) -> mint,
286        pub raiseAsyncEvent:
287            unsafe extern "C" fn(
288                asyncTaskID: mint,
289                eventType: *mut ::std::os::raw::c_char,
290                arg1: DataStore,
291            ),
292        pub asynchronousTaskAliveQ: unsafe extern "C" fn(asyncTaskID: mint) -> mbool,
293        pub asynchronousTaskStartedQ: unsafe extern "C" fn(asyncTaskID: mint) -> mbool,
294        pub createDataStore: unsafe extern "C" fn() -> DataStore,
295        pub DataStore_addInteger: unsafe extern "C" fn(arg1: DataStore, arg2: mint),
296        pub DataStore_addReal: unsafe extern "C" fn(arg1: DataStore, arg2: mreal),
297        pub DataStore_addComplex: unsafe extern "C" fn(arg1: DataStore, arg2: mcomplex),
298        pub DataStore_addString: unsafe extern "C" fn(arg1: DataStore, arg2: *mut ::std::os::raw::c_char),
299        pub DataStore_addMTensor: unsafe extern "C" fn(arg1: DataStore, arg2: MTensor),
300        pub DataStore_addMRawArray: unsafe extern "C" fn(arg1: DataStore, arg2: MRawArray),
301        pub DataStore_addMImage: unsafe extern "C" fn(arg1: DataStore, arg2: MImage),
302        pub DataStore_addDataStore: unsafe extern "C" fn(arg1: DataStore, arg2: DataStore),
303        pub DataStore_addNamedInteger:
304            unsafe extern "C" fn(
305                arg1: DataStore,
306                arg2: *mut ::std::os::raw::c_char,
307                arg3: mint,
308            ),
309        pub DataStore_addNamedReal:
310            unsafe extern "C" fn(
311                arg1: DataStore,
312                arg2: *mut ::std::os::raw::c_char,
313                arg3: mreal,
314            ),
315        pub DataStore_addNamedComplex:
316            unsafe extern "C" fn(
317                arg1: DataStore,
318                arg2: *mut ::std::os::raw::c_char,
319                arg3: mcomplex,
320            ),
321        pub DataStore_addNamedString:
322            unsafe extern "C" fn(
323                arg1: DataStore,
324                arg2: *mut ::std::os::raw::c_char,
325                arg3: *mut ::std::os::raw::c_char,
326            ),
327        pub DataStore_addNamedMTensor:
328            unsafe extern "C" fn(
329                arg1: DataStore,
330                arg2: *mut ::std::os::raw::c_char,
331                arg3: MTensor,
332            ),
333        pub DataStore_addNamedMRawArray:
334            unsafe extern "C" fn(
335                arg1: DataStore,
336                arg2: *mut ::std::os::raw::c_char,
337                arg3: MRawArray,
338            ),
339        pub DataStore_addNamedMImage:
340            unsafe extern "C" fn(
341                arg1: DataStore,
342                arg2: *mut ::std::os::raw::c_char,
343                arg3: MImage,
344            ),
345        pub DataStore_addNamedDataStore:
346            unsafe extern "C" fn(
347                arg1: DataStore,
348                arg2: *mut ::std::os::raw::c_char,
349                arg3: DataStore,
350            ),
351        pub removeAsynchronousTask: unsafe extern "C" fn(asyncTaskID: mint) -> mint,
352        pub deleteDataStore: unsafe extern "C" fn(arg1: DataStore),
353        pub copyDataStore: unsafe extern "C" fn(arg1: DataStore) -> DataStore,
354        pub DataStore_getLength: unsafe extern "C" fn(arg1: DataStore) -> mint,
355        pub DataStore_getFirstNode: unsafe extern "C" fn(arg1: DataStore) -> DataStoreNode,
356        pub DataStore_getLastNode: unsafe extern "C" fn(arg1: DataStore) -> DataStoreNode,
357        pub DataStoreNode_getNextNode: unsafe extern "C" fn(arg1: DataStoreNode) -> DataStoreNode,
358        pub DataStoreNode_getDataType: unsafe extern "C" fn(arg1: DataStoreNode) -> type_t,
359        pub DataStoreNode_getData: unsafe extern "C" fn(arg1: DataStoreNode, arg2: *mut MArgument) -> errcode_t,
360        pub DataStoreNode_getName:
361            unsafe extern "C" fn(
362                arg1: DataStoreNode,
363                arg2: *mut *mut ::std::os::raw::c_char,
364            ) -> errcode_t,
365        pub DataStore_addBoolean: unsafe extern "C" fn(arg1: DataStore, arg2: mbool),
366        pub DataStore_addNamedBoolean:
367            unsafe extern "C" fn(
368                arg1: DataStore,
369                arg2: *mut ::std::os::raw::c_char,
370                arg3: mbool,
371            ),
372        pub DataStore_addMNumericArray: unsafe extern "C" fn(arg1: DataStore, arg2: MNumericArray),
373        pub DataStore_addNamedMNumericArray:
374            unsafe extern "C" fn(
375                arg1: DataStore,
376                arg2: *mut ::std::os::raw::c_char,
377                arg3: MNumericArray,
378            ),
379        pub DataStore_addMSparseArray: unsafe extern "C" fn(arg1: DataStore, arg2: MSparseArray),
380        pub DataStore_addNamedMSparseArray:
381            unsafe extern "C" fn(
382                arg1: DataStore,
383                arg2: *mut ::std::os::raw::c_char,
384                arg3: MSparseArray,
385            ),
386    ]
387];
388
389//======================================
390// NumericArray Library
391//======================================
392
393rtl_func![
394    numericarrayLibraryFunctions => [
395        #[doc] pub MNumericArray_new: unsafe extern "C" fn(arg1: numericarray_data_t, arg2: mint, arg3: *const mint, arg4: *mut MNumericArray) -> errcode_t,
396        #[doc] pub MNumericArray_free: unsafe extern "C" fn(arg1: MNumericArray),
397        #[doc] pub MNumericArray_clone: unsafe extern "C" fn(arg1: MNumericArray, arg2: *mut MNumericArray) -> errcode_t,
398        #[doc] pub MNumericArray_disown: unsafe extern "C" fn(arg1: MNumericArray),
399        #[doc] pub MNumericArray_disownAll: unsafe extern "C" fn(arg1: MNumericArray),
400        #[doc] pub MNumericArray_shareCount: unsafe extern "C" fn(arg1: MNumericArray) -> mint,
401        #[doc] pub MNumericArray_getType: unsafe extern "C" fn(arg1: MNumericArray) -> numericarray_data_t,
402        #[doc] pub MNumericArray_getRank: unsafe extern "C" fn(arg1: MNumericArray) -> mint,
403        #[doc] pub MNumericArray_getDimensions: unsafe extern "C" fn(arg1: MNumericArray) -> *const mint,
404        #[doc] pub MNumericArray_getFlattenedLength: unsafe extern "C" fn(arg1: MNumericArray) -> mint,
405        #[doc] pub MNumericArray_getData: unsafe extern "C" fn(arg1: MNumericArray) -> *mut c_void,
406        #[doc] pub MNumericArray_convertType: unsafe extern "C" fn(arg1: *mut MNumericArray, arg2: MNumericArray, arg3: numericarray_data_t, arg4: numericarray_convert_method_t, arg5: mreal) -> errcode_t,
407    ]
408];
409
410//======================================
411// Image Library
412//======================================
413
414rtl_func![
415    imageLibraryFunctions => [
416        #[doc] pub MImage_new2D: unsafe extern "C" fn(arg1: mint, arg2: mint, arg3: mint, arg4: imagedata_t, arg5: colorspace_t, arg6: mbool, arg7: *mut MImage) -> c_int,
417        #[doc] pub MImage_new3D: unsafe extern "C" fn(arg1: mint, arg2: mint, arg3: mint, arg4: mint, arg5: imagedata_t, arg6: colorspace_t, arg7: mbool, arg8: *mut MImage) -> c_int,
418        #[doc] pub MImage_clone: unsafe extern "C" fn(arg1: MImage, arg2: *mut MImage) -> c_int,
419        #[doc] pub MImage_free: unsafe extern "C" fn(arg1: MImage),
420        #[doc] pub MImage_disown: unsafe extern "C" fn(arg1: MImage),
421        #[doc] pub MImage_disownAll: unsafe extern "C" fn(arg1: MImage),
422        #[doc] pub MImage_shareCount: unsafe extern "C" fn(arg1: MImage) -> mint,
423        #[doc] pub MImage_getDataType: unsafe extern "C" fn(arg1: MImage) -> imagedata_t,
424        #[doc] pub MImage_getRowCount: unsafe extern "C" fn(arg1: MImage) -> mint,
425        #[doc] pub MImage_getColumnCount: unsafe extern "C" fn(arg1: MImage) -> mint,
426        #[doc] pub MImage_getSliceCount: unsafe extern "C" fn(arg1: MImage) -> mint,
427        #[doc] pub MImage_getRank: unsafe extern "C" fn(arg1: MImage) -> mint,
428        #[doc] pub MImage_getChannels: unsafe extern "C" fn(arg1: MImage) -> mint,
429        #[doc] pub MImage_alphaChannelQ: unsafe extern "C" fn(arg1: MImage) -> mbool,
430        #[doc] pub MImage_interleavedQ: unsafe extern "C" fn(arg1: MImage) -> mbool,
431        #[doc] pub MImage_getColorSpace: unsafe extern "C" fn(arg1: MImage) -> colorspace_t,
432        #[doc] pub MImage_getFlattenedLength: unsafe extern "C" fn(arg1: MImage) -> mint,
433        #[doc] pub MImage_getBit: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: *mut raw_t_bit) -> c_int,
434        #[doc] pub MImage_getByte: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: *mut raw_t_ubit8) -> c_int,
435        #[doc] pub MImage_getBit16: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: *mut raw_t_ubit16) -> c_int,
436        #[doc] pub MImage_getReal32: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: *mut raw_t_real32) -> c_int,
437        #[doc] pub MImage_getReal: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: *mut raw_t_real64) -> c_int,
438        #[doc] pub MImage_setBit: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: raw_t_bit) -> c_int,
439        #[doc] pub MImage_setByte: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: raw_t_ubit8) -> c_int,
440        #[doc] pub MImage_setBit16: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: raw_t_ubit16) -> c_int,
441        #[doc] pub MImage_setReal32: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: raw_t_real32) -> c_int,
442        #[doc] pub MImage_setReal: unsafe extern "C" fn(arg1: MImage, arg2: *mut mint, arg3: mint, arg4: raw_t_real64) -> c_int,
443        #[doc] pub MImage_getRawData: unsafe extern "C" fn(arg1: MImage) -> *mut c_void,
444        #[doc] pub MImage_getBitData: unsafe extern "C" fn(arg1: MImage) -> *mut raw_t_bit,
445        #[doc] pub MImage_getByteData: unsafe extern "C" fn(arg1: MImage) -> *mut raw_t_ubit8,
446        #[doc] pub MImage_getBit16Data: unsafe extern "C" fn(arg1: MImage) -> *mut raw_t_ubit16,
447        #[doc] pub MImage_getReal32Data: unsafe extern "C" fn(arg1: MImage) -> *mut raw_t_real32,
448        #[doc] pub MImage_getRealData: unsafe extern "C" fn(arg1: MImage) -> *mut raw_t_real64,
449        #[doc] pub MImage_convertType: unsafe extern "C" fn(arg1: MImage, arg2: imagedata_t, arg3: mbool) -> MImage,
450    ]
451];
452
453//======================================
454// Sparse Library
455//======================================
456
457rtl_func![
458    sparseLibraryFunctions => [
459        #[doc] pub MSparseArray_clone: unsafe extern "C" fn(arg1: MSparseArray, arg2: *mut MSparseArray) -> c_int,
460        #[doc] pub MSparseArray_free: unsafe extern "C" fn(arg1: MSparseArray),
461        #[doc] pub MSparseArray_disown: unsafe extern "C" fn(arg1: MSparseArray),
462        #[doc] pub MSparseArray_disownAll: unsafe extern "C" fn(arg1: MSparseArray),
463        #[doc] pub MSparseArray_shareCount: unsafe extern "C" fn(arg1: MSparseArray) -> mint,
464        #[doc] pub MSparseArray_getRank: unsafe extern "C" fn(arg1: MSparseArray) -> mint,
465        #[doc] pub MSparseArray_getDimensions: unsafe extern "C" fn(arg1: MSparseArray) -> *const mint,
466        #[doc] pub MSparseArray_getImplicitValue: unsafe extern "C" fn(arg1: MSparseArray) -> *mut MTensor,
467        #[doc] pub MSparseArray_getExplicitValues: unsafe extern "C" fn(arg1: MSparseArray) -> *mut MTensor,
468        #[doc] pub MSparseArray_getRowPointers: unsafe extern "C" fn(arg1: MSparseArray) -> *mut MTensor,
469        #[doc] pub MSparseArray_getColumnIndices: unsafe extern "C" fn(arg1: MSparseArray) -> *mut MTensor,
470        #[doc] pub MSparseArray_getExplicitPositions: unsafe extern "C" fn(arg1: MSparseArray, arg2: *mut MTensor) -> c_int,
471        #[doc] pub MSparseArray_resetImplicitValue: unsafe extern "C" fn(arg1: MSparseArray, arg2: MTensor, arg3: *mut MSparseArray) -> c_int,
472        #[doc] pub MSparseArray_toMTensor: unsafe extern "C" fn(arg1: MSparseArray, arg2: *mut MTensor) -> c_int,
473        #[doc] pub MSparseArray_fromMTensor: unsafe extern "C" fn(arg1: MTensor, arg2: MTensor, arg3: *mut MSparseArray) -> c_int,
474        #[doc] pub MSparseArray_fromExplicitPositions: unsafe extern "C" fn(arg1: MTensor, arg2: MTensor, arg3: MTensor, arg4: MTensor, arg5: *mut MSparseArray) -> c_int,
475    ]
476];
477
478
479// pub compileLibraryFunctions: *mut st_WolframCompileLibrary_Functions,
480// pub rawarrayLibraryFunctions: *mut st_WolframRawArrayLibrary_Functions,