Skip to main content

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