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