qhull_sys/
lib.rs

1#![doc = include_str!("../README.md")]
2#![no_std]
3#![allow(non_upper_case_globals)]
4#![allow(non_camel_case_types)]
5#![allow(non_snake_case)]
6#![allow(clippy::all)]
7
8use core::{
9    ffi::{CStr, FromBytesUntilNulError},
10    fmt::Debug,
11    str,
12};
13
14include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
15
16pub const QHULL_LICENSE_TEXT: &str = include_str!("../qhull/COPYING.txt");
17
18fn str_from_c_char_array<'a>(data: &'a [core::ffi::c_char]) -> Result<&'a CStr, FromBytesUntilNulError> {
19    unsafe {
20        CStr::from_bytes_until_nul(core::slice::from_raw_parts(
21            data.as_ptr() as *const u8,
22            data.len(),
23        ))
24    }
25}
26
27impl Debug for qhT {
28    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
29        f.debug_struct("qhT")
30            .field("ALLpoints", &self.ALLpoints)
31            .field("ALLOWshort", &self.ALLOWshort)
32            .field("ALLOWwarning", &self.ALLOWwarning)
33            .field("ALLOWwide", &self.ALLOWwide)
34            .field("ANGLEmerge", &self.ANGLEmerge)
35            .field("APPROXhull", &self.APPROXhull)
36            .field("MINoutside", &self.MINoutside)
37            .field("ANNOTATEoutput", &self.ANNOTATEoutput)
38            .field("ATinfinity", &self.ATinfinity)
39            .field("AVOIDold", &self.AVOIDold)
40            .field("BESToutside", &self.BESToutside)
41            .field("CDDinput", &self.CDDinput)
42            .field("CDDoutput", &self.CDDoutput)
43            .field("CHECKduplicates", &self.CHECKduplicates)
44            .field("CHECKfrequently", &self.CHECKfrequently)
45            .field("premerge_cos", &self.premerge_cos)
46            .field("postmerge_cos", &self.postmerge_cos)
47            .field("DELAUNAY", &self.DELAUNAY)
48            .field("DOintersections", &self.DOintersections)
49            .field("DROPdim", &self.DROPdim)
50            .field("FLUSHprint", &self.FLUSHprint)
51            .field("FORCEoutput", &self.FORCEoutput)
52            .field("GOODpoint", &self.GOODpoint)
53            .field("GOODpointp", &self.GOODpointp)
54            .field("GOODthreshold", &self.GOODthreshold)
55            .field("GOODvertex", &self.GOODvertex)
56            .field("GOODvertexp", &self.GOODvertexp)
57            .field("HALFspace", &self.HALFspace)
58            .field("ISqhullQh", &self.ISqhullQh)
59            .field("IStracing", &self.IStracing)
60            .field("KEEParea", &self.KEEParea)
61            .field("KEEPcoplanar", &self.KEEPcoplanar)
62            .field("KEEPinside", &self.KEEPinside)
63            .field("KEEPmerge", &self.KEEPmerge)
64            .field("KEEPminArea", &self.KEEPminArea)
65            .field("MAXcoplanar", &self.MAXcoplanar)
66            .field("MAXwide", &self.MAXwide)
67            .field("MERGEexact", &self.MERGEexact)
68            .field("MERGEindependent", &self.MERGEindependent)
69            .field("MERGING", &self.MERGING)
70            .field("premerge_centrum", &self.premerge_centrum)
71            .field("postmerge_centrum", &self.postmerge_centrum)
72            .field("MERGEpinched", &self.MERGEpinched)
73            .field("MERGEvertices", &self.MERGEvertices)
74            .field("MINvisible", &self.MINvisible)
75            .field("NOnarrow", &self.NOnarrow)
76            .field("NOnearinside", &self.NOnearinside)
77            .field("NOpremerge", &self.NOpremerge)
78            .field("ONLYgood", &self.ONLYgood)
79            .field("ONLYmax", &self.ONLYmax)
80            .field("PICKfurthest", &self.PICKfurthest)
81            .field("POSTmerge", &self.POSTmerge)
82            .field("PREmerge", &self.PREmerge)
83            .field("PRINTcentrums", &self.PRINTcentrums)
84            .field("PRINTcoplanar", &self.PRINTcoplanar)
85            .field("PRINTdim", &self.PRINTdim)
86            .field("PRINTdots", &self.PRINTdots)
87            .field("PRINTgood", &self.PRINTgood)
88            .field("PRINTinner", &self.PRINTinner)
89            .field("PRINTneighbors", &self.PRINTneighbors)
90            .field("PRINTnoplanes", &self.PRINTnoplanes)
91            .field("PRINToptions1st", &self.PRINToptions1st)
92            .field("PRINTouter", &self.PRINTouter)
93            .field("PRINTprecision", &self.PRINTprecision)
94            .field("PRINTout", &self.PRINTout)
95            .field("PRINTridges", &self.PRINTridges)
96            .field("PRINTspheres", &self.PRINTspheres)
97            .field("PRINTstatistics", &self.PRINTstatistics)
98            .field("PRINTsummary", &self.PRINTsummary)
99            .field("PRINTtransparent", &self.PRINTtransparent)
100            .field("PROJECTdelaunay", &self.PROJECTdelaunay)
101            .field("PROJECTinput", &self.PROJECTinput)
102            .field("RANDOMdist", &self.RANDOMdist)
103            .field("RANDOMfactor", &self.RANDOMfactor)
104            .field("RANDOMa", &self.RANDOMa)
105            .field("RANDOMb", &self.RANDOMb)
106            .field("RANDOMoutside", &self.RANDOMoutside)
107            .field("REPORTfreq", &self.REPORTfreq)
108            .field("REPORTfreq2", &self.REPORTfreq2)
109            .field("RERUN", &self.RERUN)
110            .field("ROTATErandom", &self.ROTATErandom)
111            .field("SCALEinput", &self.SCALEinput)
112            .field("SCALElast", &self.SCALElast)
113            .field("SETroundoff", &self.SETroundoff)
114            .field("SKIPcheckmax", &self.SKIPcheckmax)
115            .field("SKIPconvex", &self.SKIPconvex)
116            .field("SPLITthresholds", &self.SPLITthresholds)
117            .field("STOPadd", &self.STOPadd)
118            .field("STOPcone", &self.STOPcone)
119            .field("STOPpoint", &self.STOPpoint)
120            .field("TESTpoints", &self.TESTpoints)
121            .field("TESTvneighbors", &self.TESTvneighbors)
122            .field("TRACElevel", &self.TRACElevel)
123            .field("TRACElastrun", &self.TRACElastrun)
124            .field("TRACEpoint", &self.TRACEpoint)
125            .field("TRACEdist", &self.TRACEdist)
126            .field("TRACEmerge", &self.TRACEmerge)
127            .field("TRIangulate", &self.TRIangulate)
128            .field("TRInormals", &self.TRInormals)
129            .field("UPPERdelaunay", &self.UPPERdelaunay)
130            .field("USEstdout", &self.USEstdout)
131            .field("VERIFYoutput", &self.VERIFYoutput)
132            .field("VIRTUALmemory", &self.VIRTUALmemory)
133            .field("VORONOI", &self.VORONOI)
134            .field("AREAfactor", &self.AREAfactor)
135            .field("DOcheckmax", &self.DOcheckmax)
136            .field("feasible_string", &self.feasible_string)
137            .field("feasible_point", &self.feasible_point)
138            .field("GETarea", &self.GETarea)
139            .field("KEEPnearinside", &self.KEEPnearinside)
140            .field("hull_dim", &self.hull_dim)
141            .field("input_dim", &self.input_dim)
142            .field("num_points", &self.num_points)
143            .field("first_point", &self.first_point)
144            .field("POINTSmalloc", &self.POINTSmalloc)
145            .field("input_points", &self.input_points)
146            .field("input_malloc", &self.input_malloc)
147            .field("qhull_command", &str_from_c_char_array(&self.qhull_command))
148            .field("qhull_commandsiz2", &self.qhull_commandsiz2)
149            .field("rbox_command", &str_from_c_char_array(&self.rbox_command))
150            .field("qhull_options", &str_from_c_char_array(&self.qhull_options))
151            .field("qhull_optionlen", &self.qhull_optionlen)
152            .field("qhull_optionsiz", &self.qhull_optionsiz)
153            .field("qhull_optionsiz2", &self.qhull_optionsiz2)
154            .field("run_id", &self.run_id)
155            .field("VERTEXneighbors", &self.VERTEXneighbors)
156            .field("ZEROcentrum", &self.ZEROcentrum)
157            .field("upper_threshold", &self.upper_threshold)
158            .field("lower_threshold", &self.lower_threshold)
159            .field("upper_bound", &self.upper_bound)
160            .field("lower_bound", &self.lower_bound)
161            .field("ANGLEround", &self.ANGLEround)
162            .field("centrum_radius", &self.centrum_radius)
163            .field("cos_max", &self.cos_max)
164            .field("DISTround", &self.DISTround)
165            .field("MAXabs_coord", &self.MAXabs_coord)
166            .field("MAXlastcoord", &self.MAXlastcoord)
167            .field("MAXoutside", &self.MAXoutside)
168            .field("MAXsumcoord", &self.MAXsumcoord)
169            .field("MAXwidth", &self.MAXwidth)
170            .field("MINdenom_1", &self.MINdenom_1)
171            .field("MINdenom", &self.MINdenom)
172            .field("MINdenom_1_2", &self.MINdenom_1_2)
173            .field("MINdenom_2", &self.MINdenom_2)
174            .field("MINlastcoord", &self.MINlastcoord)
175            .field("NEARzero", &self.NEARzero)
176            .field("NEARinside", &self.NEARinside)
177            .field("ONEmerge", &self.ONEmerge)
178            .field("outside_err", &self.outside_err)
179            .field("WIDEfacet", &self.WIDEfacet)
180            .field("NARROWhull", &self.NARROWhull)
181            .field("qhull", &self.qhull)
182            .field("errexit", &"...")
183            .field("jmpXtra", &"...")
184            .field("restartexit", &"...")
185            .field("jmpXtra2", &"...")
186            .field("fin", &self.fin)
187            .field("fout", &self.fout)
188            .field("ferr", &self.ferr)
189            .field("interior_point", &self.interior_point)
190            .field("normal_size", &self.normal_size)
191            .field("center_size", &self.center_size)
192            .field("TEMPsize", &self.TEMPsize)
193            .field("facet_list", &self.facet_list)
194            .field("facet_tail", &self.facet_tail)
195            .field("facet_next", &self.facet_next)
196            .field("newfacet_list", &self.newfacet_list)
197            .field("visible_list", &self.visible_list)
198            .field("num_visible", &self.num_visible)
199            .field("tracefacet_id", &self.tracefacet_id)
200            .field("tracefacet", &self.tracefacet)
201            .field("traceridge_id", &self.traceridge_id)
202            .field("traceridge", &self.traceridge)
203            .field("tracevertex_id", &self.tracevertex_id)
204            .field("tracevertex", &self.tracevertex)
205            .field("vertex_list", &self.vertex_list)
206            .field("vertex_tail", &self.vertex_tail)
207            .field("newvertex_list", &self.newvertex_list)
208            .field("num_facets", &self.num_facets)
209            .field("num_vertices", &self.num_vertices)
210            .field("num_outside", &self.num_outside)
211            .field("num_good", &self.num_good)
212            .field("facet_id", &self.facet_id)
213            .field("ridge_id", &self.ridge_id)
214            .field("vertex_id", &self.vertex_id)
215            .field("first_newfacet", &self.first_newfacet)
216            .field("hulltime", &self.hulltime)
217            .field("ALLOWrestart", &self.ALLOWrestart)
218            .field("build_cnt", &self.build_cnt)
219            .field("CENTERtype", &self.CENTERtype)
220            .field("furthest_id", &self.furthest_id)
221            .field("last_errcode", &self.last_errcode)
222            .field("GOODclosest", &self.GOODclosest)
223            .field("coplanar_apex", &self.coplanar_apex)
224            .field("hasAreaVolume", &self.hasAreaVolume)
225            .field("hasTriangulation", &self.hasTriangulation)
226            .field("isRenameVertex", &self.isRenameVertex)
227            .field("JOGGLEmax", &self.JOGGLEmax)
228            .field("maxoutdone", &self.maxoutdone)
229            .field("max_outside", &self.max_outside)
230            .field("max_vertex", &self.max_vertex)
231            .field("min_vertex", &self.min_vertex)
232            .field("NEWfacets", &self.NEWfacets)
233            .field("NEWtentative", &self.NEWtentative)
234            .field("findbestnew", &self.findbestnew)
235            .field("findbest_notsharp", &self.findbest_notsharp)
236            .field("NOerrexit", &self.NOerrexit)
237            .field("PRINTcradius", &self.PRINTcradius)
238            .field("PRINTradius", &self.PRINTradius)
239            .field("POSTmerging", &self.POSTmerging)
240            .field("printoutvar", &self.printoutvar)
241            .field("printoutnum", &self.printoutnum)
242            .field("repart_facetid", &self.repart_facetid)
243            .field("retry_addpoint", &self.retry_addpoint)
244            .field("QHULLfinished", &self.QHULLfinished)
245            .field("totarea", &self.totarea)
246            .field("totvol", &self.totvol)
247            .field("visit_id", &self.visit_id)
248            .field("vertex_visit", &self.vertex_visit)
249            .field("WAScoplanar", &self.WAScoplanar)
250            .field("ZEROall_ok", &self.ZEROall_ok)
251            .field("facet_mergeset", &self.facet_mergeset)
252            .field("degen_mergeset", &self.degen_mergeset)
253            .field("vertex_mergeset", &self.vertex_mergeset)
254            .field("hash_table", &self.hash_table)
255            .field("other_points", &self.other_points)
256            .field("del_vertices", &self.del_vertices)
257            .field("gm_matrix", &self.gm_matrix)
258            .field("gm_row", &self.gm_row)
259            .field("line", &self.line)
260            .field("maxline", &self.maxline)
261            .field("half_space", &self.half_space)
262            .field("temp_malloc", &self.temp_malloc)
263            .field("ERREXITcalled", &self.ERREXITcalled)
264            .field("firstcentrum", &self.firstcentrum)
265            .field("old_randomdist", &self.old_randomdist)
266            .field("coplanarfacetset", &self.coplanarfacetset)
267            .field("last_low", &self.last_low)
268            .field("last_high", &self.last_high)
269            .field("last_newhigh", &self.last_newhigh)
270            .field("lastcpu", &self.lastcpu)
271            .field("lastfacets", &self.lastfacets)
272            .field("lastmerges", &self.lastmerges)
273            .field("lastplanes", &self.lastplanes)
274            .field("lastdist", &self.lastdist)
275            .field("lastreport", &self.lastreport)
276            .field("mergereport", &self.mergereport)
277            .field("old_tempstack", &self.old_tempstack)
278            .field("ridgeoutnum", &self.ridgeoutnum)
279            .field("last_random", &self.last_random)
280            .field("rbox_errexit", &"...")
281            .field("jmpXtra3", &"...")
282            .field("rbox_isinteger", &self.rbox_isinteger)
283            .field("rbox_out_offset", &self.rbox_out_offset)
284            .field("cpp_object", &self.cpp_object)
285            .field("cpp_other", &self.cpp_other)
286            .field("cpp_user", &self.cpp_user)
287            .field("qhmem", &self.qhmem)
288            .field("qhstat", &"...")
289            .finish()
290    }
291}