1#![allow(warnings)]
2#![allow(clippy::all)]
3
4use super::generated::*;
5use core::ptr;
6
7#[must_use]
8#[inline]
9pub const fn CFRangeMake(loc: CFIndex, len: CFIndex) -> CFRange {
10 CFRange {
11 location: loc,
12 length: len,
13 }
14}
15
16pub const CFByteOrderUnknown: CFByteOrder = 0;
17pub const CFByteOrderLittleEndian: CFByteOrder = 1;
18pub const CFByteOrderBigEndian: CFByteOrder = 2;
19
20#[must_use]
21#[inline]
22pub const fn CFByteOrderGetCurrent() -> CFByteOrder {
23 if cfg!(target_endian = "little") {
24 CFByteOrderLittleEndian
25 } else if cfg!(target_endian = "big") {
26 CFByteOrderBigEndian
27 } else {
28 CFByteOrderUnknown
29 }
30}
31
32#[must_use]
33#[inline]
34pub const fn CFSwapInt16(arg: u16) -> u16 {
35 arg.swap_bytes()
36}
37
38#[must_use]
39#[inline]
40pub const fn CFSwapInt32(arg: u32) -> u32 {
41 arg.swap_bytes()
42}
43
44#[must_use]
45#[inline]
46pub const fn CFSwapInt64(arg: u64) -> u64 {
47 arg.swap_bytes()
48}
49
50#[must_use]
51#[inline]
52pub const fn CFSwapInt16BigToHost(arg: u16) -> u16 {
53 if cfg!(target_endian = "big") {
54 arg
55 } else {
56 CFSwapInt16(arg)
57 }
58}
59
60#[must_use]
61#[inline]
62pub const fn CFSwapInt32BigToHost(arg: u32) -> u32 {
63 if cfg!(target_endian = "big") {
64 arg
65 } else {
66 CFSwapInt32(arg)
67 }
68}
69
70#[must_use]
71#[inline]
72pub const fn CFSwapInt64BigToHost(arg: u64) -> u64 {
73 if cfg!(target_endian = "big") {
74 arg
75 } else {
76 CFSwapInt64(arg)
77 }
78}
79
80#[must_use]
81#[inline]
82pub const fn CFSwapInt16HostToBig(arg: u16) -> u16 {
83 if cfg!(target_endian = "big") {
84 arg
85 } else {
86 CFSwapInt16(arg)
87 }
88}
89
90#[must_use]
91#[inline]
92pub const fn CFSwapInt32HostToBig(arg: u32) -> u32 {
93 if cfg!(target_endian = "big") {
94 arg
95 } else {
96 CFSwapInt32(arg)
97 }
98}
99
100#[must_use]
101#[inline]
102pub const fn CFSwapInt64HostToBig(arg: u64) -> u64 {
103 if cfg!(target_endian = "big") {
104 arg
105 } else {
106 CFSwapInt64(arg)
107 }
108}
109
110#[must_use]
111#[inline]
112pub const fn CFSwapInt16LittleToHost(arg: u16) -> u16 {
113 if cfg!(target_endian = "little") {
114 arg
115 } else {
116 CFSwapInt16(arg)
117 }
118}
119
120#[must_use]
121#[inline]
122pub const fn CFSwapInt32LittleToHost(arg: u32) -> u32 {
123 if cfg!(target_endian = "little") {
124 arg
125 } else {
126 CFSwapInt32(arg)
127 }
128}
129
130#[must_use]
131#[inline]
132pub const fn CFSwapInt64LittleToHost(arg: u64) -> u64 {
133 if cfg!(target_endian = "little") {
134 arg
135 } else {
136 CFSwapInt64(arg)
137 }
138}
139
140#[must_use]
141#[inline]
142pub const fn CFSwapInt16HostToLittle(arg: u16) -> u16 {
143 if cfg!(target_endian = "little") {
144 arg
145 } else {
146 CFSwapInt16(arg)
147 }
148}
149
150#[must_use]
151#[inline]
152pub const fn CFSwapInt32HostToLittle(arg: u32) -> u32 {
153 if cfg!(target_endian = "little") {
154 arg
155 } else {
156 CFSwapInt32(arg)
157 }
158}
159
160#[must_use]
161#[inline]
162pub const fn CFSwapInt64HostToLittle(arg: u64) -> u64 {
163 if cfg!(target_endian = "little") {
164 arg
165 } else {
166 CFSwapInt64(arg)
167 }
168}
169
170#[must_use]
171#[inline]
172pub fn CFConvertFloat32HostToSwapped(arg: Float32) -> CFSwappedFloat32 {
173 let mut bits = arg.to_bits();
174 if cfg!(target_endian = "little") {
175 bits = bits.swap_bytes();
176 }
177 CFSwappedFloat32 { v: bits }
178}
179
180#[must_use]
181#[inline]
182pub fn CFConvertFloat32SwappedToHost(arg: CFSwappedFloat32) -> Float32 {
183 let mut bits = arg.v;
184 if cfg!(target_endian = "little") {
185 bits = bits.swap_bytes();
186 }
187 Float32::from_bits(bits)
188}
189
190#[must_use]
191#[inline]
192pub fn CFConvertFloat64HostToSwapped(arg: Float64) -> CFSwappedFloat64 {
193 let mut bits = arg.to_bits();
194 if cfg!(target_endian = "little") {
195 bits = bits.swap_bytes();
196 }
197 CFSwappedFloat64 { v: bits }
198}
199
200#[must_use]
201#[inline]
202pub fn CFConvertFloat64SwappedToHost(arg: CFSwappedFloat64) -> Float64 {
203 let mut bits = arg.v;
204 if cfg!(target_endian = "little") {
205 bits = bits.swap_bytes();
206 }
207 Float64::from_bits(bits)
208}
209
210#[must_use]
211#[inline]
212pub fn CFConvertFloatHostToSwapped(arg: f32) -> CFSwappedFloat32 {
213 CFConvertFloat32HostToSwapped(arg)
214}
215
216#[must_use]
217#[inline]
218pub fn CFConvertFloatSwappedToHost(arg: CFSwappedFloat32) -> f32 {
219 CFConvertFloat32SwappedToHost(arg)
220}
221
222#[must_use]
223#[inline]
224pub fn CFConvertDoubleHostToSwapped(arg: f64) -> CFSwappedFloat64 {
225 CFConvertFloat64HostToSwapped(arg)
226}
227
228#[must_use]
229#[inline]
230pub fn CFConvertDoubleSwappedToHost(arg: CFSwappedFloat64) -> f64 {
231 CFConvertFloat64SwappedToHost(arg)
232}
233
234#[must_use]
235#[inline]
236pub const fn CFUserNotificationCheckBoxChecked(i: CFIndex) -> CFOptionFlags {
237 (1_u64 << (8 + i as u32)) as CFOptionFlags
238}
239
240#[must_use]
241#[inline]
242pub const fn CFUserNotificationSecureTextField(i: CFIndex) -> CFOptionFlags {
243 (1_u64 << (16 + i as u32)) as CFOptionFlags
244}
245
246#[must_use]
247#[inline]
248pub const fn CFUserNotificationPopUpSelection(n: CFIndex) -> CFOptionFlags {
249 ((n as u64) << 24) as CFOptionFlags
250}
251
252#[inline]
253pub unsafe fn CFStringInitInlineBuffer(
254 str_: CFStringRef,
255 buf: *mut CFStringInlineBuffer,
256 range: CFRange,
257) {
258 if let Some(buf) = unsafe { buf.as_mut() } {
259 buf.theString = str_;
260 buf.rangeToBuffer = range;
261 let direct_uni = unsafe { CFStringGetCharactersPtr(str_) };
262 buf.directUniCharBuffer = direct_uni;
263 buf.directCStringBuffer = if direct_uni.is_null() {
264 unsafe { CFStringGetCStringPtr(str_, kCFStringEncodingASCII) }
265 } else {
266 ptr::null()
267 };
268 buf.bufferedRangeStart = 0;
269 buf.bufferedRangeEnd = 0;
270 }
271}
272
273#[must_use]
274#[inline]
275pub unsafe fn CFStringGetCharacterFromInlineBuffer(
276 buf: *mut CFStringInlineBuffer,
277 idx: CFIndex,
278) -> UniChar {
279 let Some(buf) = (unsafe { buf.as_mut() }) else {
280 return 0;
281 };
282 if idx < 0 || idx >= buf.rangeToBuffer.length {
283 return 0;
284 }
285 if !buf.directUniCharBuffer.is_null() {
286 return unsafe {
287 *buf.directUniCharBuffer
288 .add((idx + buf.rangeToBuffer.location) as usize)
289 };
290 }
291 if !buf.directCStringBuffer.is_null() {
292 return unsafe {
293 *buf.directCStringBuffer
294 .add((idx + buf.rangeToBuffer.location) as usize) as u8
295 } as UniChar;
296 }
297 if idx >= buf.bufferedRangeEnd || idx < buf.bufferedRangeStart {
298 buf.bufferedRangeStart = (idx - 4).max(0);
299 buf.bufferedRangeEnd = (buf.bufferedRangeStart + 64).min(buf.rangeToBuffer.length);
300 unsafe {
301 CFStringGetCharacters(
302 buf.theString,
303 CFRangeMake(
304 buf.rangeToBuffer.location + buf.bufferedRangeStart,
305 buf.bufferedRangeEnd - buf.bufferedRangeStart,
306 ),
307 buf.buffer.as_mut_ptr(),
308 );
309 }
310 }
311 buf.buffer[(idx - buf.bufferedRangeStart) as usize]
312}
313
314#[must_use]
315#[inline]
316pub const fn CFStringIsSurrogateHighCharacter(character: UniChar) -> Boolean {
317 ((character >= 0xD800) && (character <= 0xDBFF)) as Boolean
318}
319
320#[must_use]
321#[inline]
322pub const fn CFStringIsSurrogateLowCharacter(character: UniChar) -> Boolean {
323 ((character >= 0xDC00) && (character <= 0xDFFF)) as Boolean
324}
325
326#[must_use]
327#[inline]
328pub const fn CFStringGetLongCharacterForSurrogatePair(
329 surrogateHigh: UniChar,
330 surrogateLow: UniChar,
331) -> UTF32Char {
332 (((surrogateHigh as UTF32Char - 0xD800) << 10) + (surrogateLow as UTF32Char - 0xDC00) + 0x10000)
333 as UTF32Char
334}
335
336#[must_use]
337#[inline]
338pub unsafe fn CFStringGetSurrogatePairForLongCharacter(
339 character: UTF32Char,
340 surrogates: *mut UniChar,
341) -> Boolean {
342 if !(0x10000..0x110000).contains(&character) {
343 return 0;
344 }
345 let scalar = character - 0x10000;
346 if !surrogates.is_null() {
347 unsafe {
348 *surrogates = (0xD800 + (scalar >> 10)) as UniChar;
349 *surrogates.add(1) = (0xDC00 + (scalar & 0x3ff)) as UniChar;
350 }
351 }
352 1
353}
354
355#[must_use]
356#[inline]
357pub fn CMTagGetCategory(tag: CMTag) -> CMTagCategory {
358 tag.category
359}
360
361#[must_use]
362#[inline]
363pub fn CMTagGetValue(tag: CMTag) -> CMTagValue {
364 tag.value
365}
366
367#[must_use]
368#[inline]
369pub fn CMTagHasCategory(tag: CMTag, category: CMTagCategory) -> Boolean {
370 (CMTagGetCategory(tag) == category) as Boolean
371}
372
373#[must_use]
374#[inline]
375pub fn CMTagCategoryEqualToTagCategory(tag1: CMTag, tag2: CMTag) -> Boolean {
376 (tag1.category == tag2.category) as Boolean
377}
378
379#[must_use]
380#[inline]
381pub fn CMTagIsValid(tag: CMTag) -> Boolean {
382 (unsafe { CMTagGetValueDataType(tag) } != kCMTagDataType_Invalid as CMTagDataType) as Boolean
383}
384
385#[must_use]
386#[inline]
387pub fn CMTagCategoryValueEqualToValue(tag1: CMTag, tag2: CMTag) -> Boolean {
388 ((tag1.category == tag2.category)
389 && (unsafe { CMTagGetValueDataType(tag1) } == unsafe { CMTagGetValueDataType(tag2) })
390 && (tag1.value == tag2.value)) as Boolean
391}
392
393#[must_use]
394#[inline]
395pub unsafe fn CMTimebaseCreateWithMasterTimebase(
396 allocator: CFAllocatorRef,
397 masterTimebase: CMTimebaseRef,
398 timebaseOut: *mut CMTimebaseRef,
399) -> OSStatus {
400 unsafe { CMTimebaseCreateWithSourceTimebase(allocator, masterTimebase, timebaseOut) }
401}
402
403#[must_use]
404#[inline]
405pub unsafe fn CMTimebaseSetMasterClock(
406 timebase: CMTimebaseRef,
407 newMasterClock: CMClockRef,
408) -> OSStatus {
409 unsafe { CMTimebaseSetSourceClock(timebase, newMasterClock) }
410}
411
412#[must_use]
413#[inline]
414pub unsafe fn CMTimebaseSetMasterTimebase(
415 timebase: CMTimebaseRef,
416 newMasterTimebase: CMTimebaseRef,
417) -> OSStatus {
418 unsafe { CMTimebaseSetSourceTimebase(timebase, newMasterTimebase) }
419}
420
421#[repr(C)]
422#[derive(Debug, Copy, Clone)]
423pub struct __CVMetalTextureCache {
424 _unused: [u8; 0],
425}
426
427pub type CVMetalTextureCacheRef = *mut __CVMetalTextureCache;
428pub type CVMetalTextureRef = CVImageBufferRef;
429
430extern "C" {
431 pub fn CVMetalTextureGetTypeID() -> CFTypeID;
432 pub fn CVMetalTextureGetTexture(image: CVMetalTextureRef) -> *mut core::ffi::c_void;
433 pub fn CVMetalTextureIsFlipped(image: CVMetalTextureRef) -> Boolean;
434 pub fn CVMetalTextureGetCleanTexCoords(
435 image: CVMetalTextureRef,
436 lowerLeft: *mut f32,
437 lowerRight: *mut f32,
438 upperRight: *mut f32,
439 upperLeft: *mut f32,
440 );
441 pub fn CVMetalTextureCacheCreateTextureFromImage(
442 allocator: CFAllocatorRef,
443 textureCache: CVMetalTextureCacheRef,
444 sourceImage: CVImageBufferRef,
445 textureAttributes: CFDictionaryRef,
446 pixelFormat: usize,
447 width: usize,
448 height: usize,
449 planeIndex: usize,
450 textureOut: *mut CVMetalTextureRef,
451 ) -> CVReturn;
452 pub fn CVMetalBufferGetBuffer(buffer: CVMetalBufferRef) -> *mut core::ffi::c_void;
453 pub fn CVMetalBufferCacheCreate(
454 allocator: CFAllocatorRef,
455 cacheAttributes: CFDictionaryRef,
456 metalDevice: *mut core::ffi::c_void,
457 metalBufferAttributes: CFDictionaryRef,
458 cacheOut: *mut CVMetalBufferCacheRef,
459 ) -> CVReturn;
460}
461
462#[must_use]
463#[inline]
464pub unsafe fn dispatch_get_main_queue() -> dispatch_queue_main_t {
465 ptr::addr_of_mut!(_dispatch_main_q)
466}