1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

// NS_OPTIONS
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MTLFunctionOptions(pub NSUInteger);
bitflags::bitflags! {
    impl MTLFunctionOptions: NSUInteger {
        const MTLFunctionOptionNone = 0;
        const MTLFunctionOptionCompileToBinary = 1<<0;
        const MTLFunctionOptionStoreFunctionInMetalScript = 1<<1;
    }
}

unsafe impl Encode for MTLFunctionOptions {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for MTLFunctionOptions {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct MTLFunctionDescriptor;

    unsafe impl ClassType for MTLFunctionDescriptor {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCopying for MTLFunctionDescriptor {}

unsafe impl NSObjectProtocol for MTLFunctionDescriptor {}

extern_methods!(
    unsafe impl MTLFunctionDescriptor {
        #[method_id(@__retain_semantics Other functionDescriptor)]
        pub fn functionDescriptor() -> Retained<MTLFunctionDescriptor>;

        #[method_id(@__retain_semantics Other name)]
        pub fn name(&self) -> Option<Retained<NSString>>;

        #[method(setName:)]
        pub fn setName(&self, name: Option<&NSString>);

        #[method_id(@__retain_semantics Other specializedName)]
        pub fn specializedName(&self) -> Option<Retained<NSString>>;

        #[method(setSpecializedName:)]
        pub fn setSpecializedName(&self, specialized_name: Option<&NSString>);

        #[cfg(feature = "MTLFunctionConstantValues")]
        #[method_id(@__retain_semantics Other constantValues)]
        pub fn constantValues(&self) -> Option<Retained<MTLFunctionConstantValues>>;

        #[cfg(feature = "MTLFunctionConstantValues")]
        #[method(setConstantValues:)]
        pub fn setConstantValues(&self, constant_values: Option<&MTLFunctionConstantValues>);

        #[method(options)]
        pub fn options(&self) -> MTLFunctionOptions;

        #[method(setOptions:)]
        pub fn setOptions(&self, options: MTLFunctionOptions);

        #[cfg(feature = "MTLBinaryArchive")]
        #[method_id(@__retain_semantics Other binaryArchives)]
        pub unsafe fn binaryArchives(
            &self,
        ) -> Option<Retained<NSArray<ProtocolObject<dyn MTLBinaryArchive>>>>;

        #[cfg(feature = "MTLBinaryArchive")]
        #[method(setBinaryArchives:)]
        pub unsafe fn setBinaryArchives(
            &self,
            binary_archives: Option<&NSArray<ProtocolObject<dyn MTLBinaryArchive>>>,
        );
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl MTLFunctionDescriptor {
        #[method_id(@__retain_semantics Init init)]
        pub fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub fn new() -> Retained<Self>;
    }
);

impl DefaultRetained for MTLFunctionDescriptor {
    #[inline]
    fn default_id() -> Retained<Self> {
        Self::new()
    }
}

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct MTLIntersectionFunctionDescriptor;

    unsafe impl ClassType for MTLIntersectionFunctionDescriptor {
        #[inherits(NSObject)]
        type Super = MTLFunctionDescriptor;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSCopying for MTLIntersectionFunctionDescriptor {}

unsafe impl NSObjectProtocol for MTLIntersectionFunctionDescriptor {}

extern_methods!(
    unsafe impl MTLIntersectionFunctionDescriptor {}
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl MTLIntersectionFunctionDescriptor {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);