1use glib::translate::*;
2use std::mem;
3use std::ptr;
4
5#[repr(C)]
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
7pub struct FenceClosure(ffi::CoglFenceClosure);
8
9impl GlibPtrDefault for FenceClosure {
10 type GlibType = ffi::CoglFenceClosure;
11}
12
13#[doc(hidden)]
14impl Uninitialized for FenceClosure {
15 #[inline]
16 unsafe fn uninitialized() -> Self {
17 mem::zeroed()
18 }
19}
20
21impl<'a> ToGlibPtr<'a, ffi::CoglFenceClosure> for FenceClosure {
22 type Storage = ();
23
24 #[inline]
25 fn to_glib_none(&self) -> Stash<'a, ffi::CoglFenceClosure, FenceClosure> {
26 Stash(self.0, ())
27 }
28}
29
30impl<'a> ToGlibPtrMut<'a, *mut ffi::CoglFenceClosure> for FenceClosure {
31 type Storage = ();
32
33 #[inline]
34 fn to_glib_none_mut(&'a mut self) -> StashMut<'a, *mut ffi::CoglFenceClosure, FenceClosure> {
35 StashMut(&mut self.0, ())
36 }
37}
38
39impl<'a> ToGlibContainerFromSlice<'a, *mut ffi::CoglFenceClosure> for &'a FenceClosure {
40 type Storage = (
41 Vec<Stash<'a, ffi::CoglFenceClosure, &'a FenceClosure>>,
42 Option<Vec<ffi::CoglFenceClosure>>,
43 );
44
45 fn to_glib_none_from_slice(
46 t: &'a [&'a FenceClosure],
47 ) -> (*mut ffi::CoglFenceClosure, Self::Storage) {
48 let v: Vec<_> = t.iter().map(|s| s.to_glib_none()).collect();
49 let mut v_ptr: Vec<_> = v.iter().map(|s| s.0).collect();
50 v_ptr.push(ptr::null_mut());
51
52 (
53 v_ptr.as_ptr() as *mut ffi::CoglFenceClosure,
54 (v, Some(v_ptr)),
55 )
56 }
57
58 fn to_glib_container_from_slice(
59 t: &'a [&'a FenceClosure],
60 ) -> (*mut ffi::CoglFenceClosure, Self::Storage) {
61 let v: Vec<_> = t.iter().map(|s| s.to_glib_none()).collect();
62
63 let v_ptr = unsafe {
64 let v_ptr = glib_sys::g_malloc0(mem::size_of::<ffi::CoglFenceClosure>() * (t.len() + 1))
65 as *mut ffi::CoglFenceClosure;
66
67 for (i, s) in v.iter().enumerate() {
68 ptr::write(v_ptr.add(i), s.0);
69 }
70
71 v_ptr
72 };
73
74 (v_ptr, (v, None))
75 }
76
77 fn to_glib_full_from_slice(_: &[&'a FenceClosure]) -> *mut ffi::CoglFenceClosure {
78 unimplemented!()
79 }
80}
81
82impl<'a> ToGlibContainerFromSlice<'a, *const ffi::CoglFenceClosure> for &'a FenceClosure {
83 type Storage = (
84 Vec<Stash<'a, ffi::CoglFenceClosure, &'a FenceClosure>>,
85 Option<Vec<ffi::CoglFenceClosure>>,
86 );
87
88 fn to_glib_none_from_slice(
89 t: &'a [&'a FenceClosure],
90 ) -> (*const ffi::CoglFenceClosure, Self::Storage) {
91 let v: Vec<_> = t.iter().map(|s| s.to_glib_none()).collect();
92 let mut v_ptr: Vec<_> = v.iter().map(|s| s.0).collect();
93 v_ptr.push(ptr::null_mut());
94
95 (
96 v_ptr.as_ptr() as *const ffi::CoglFenceClosure,
97 (v, Some(v_ptr)),
98 )
99 }
100
101 fn to_glib_container_from_slice(
102 t: &'a [&'a FenceClosure],
103 ) -> (*const ffi::CoglFenceClosure, Self::Storage) {
104 let v: Vec<_> = t.iter().map(|s| s.to_glib_none()).collect();
105
106 let v_ptr = unsafe {
107 let v_ptr = glib_sys::g_malloc0(mem::size_of::<ffi::CoglFenceClosure>() * (t.len() + 1))
108 as *mut ffi::CoglFenceClosure;
109
110 for (i, s) in v.iter().enumerate() {
111 ptr::write(v_ptr.add(i), s.0);
112 }
113
114 v_ptr as *const ffi::CoglFenceClosure
115 };
116
117 (v_ptr, (v, None))
118 }
119
120 fn to_glib_full_from_slice(_: &[&'a FenceClosure]) -> *const ffi::CoglFenceClosure {
121 unimplemented!()
122 }
123}
124
125impl FromGlibPtrNone<ffi::CoglFenceClosure> for FenceClosure {
126 #[inline]
127 unsafe fn from_glib_none(ptr: ffi::CoglFenceClosure) -> FenceClosure {
128 FenceClosure(ptr)
129 }
130}
131
132#[doc(hidden)]
133impl FromGlibPtrNone<*const ffi::CoglFenceClosure> for FenceClosure {
134 unsafe fn from_glib_none(ptr: *const ffi::CoglFenceClosure) -> Self {
135 *(ptr as *const FenceClosure)
136 }
137}
138
139#[doc(hidden)]
140impl FromGlibPtrNone<*mut ffi::CoglFenceClosure> for FenceClosure {
141 unsafe fn from_glib_none(ptr: *mut ffi::CoglFenceClosure) -> Self {
142 *(ptr as *mut FenceClosure)
143 }
144}
145
146impl FromGlibPtrBorrow<ffi::CoglFenceClosure> for FenceClosure {
147 #[inline]
148 unsafe fn from_glib_borrow(
149 ptr: ffi::CoglFenceClosure,
150 ) -> glib::translate::Borrowed<FenceClosure> {
151 glib::translate::Borrowed::new(FenceClosure(ptr))
152 }
153}
154
155#[doc(hidden)]
156impl FromGlibPtrBorrow<*mut ffi::CoglFenceClosure> for FenceClosure {
157 unsafe fn from_glib_borrow(ptr: *mut ffi::CoglFenceClosure) -> glib::translate::Borrowed<Self> {
158 glib::translate::Borrowed::new(*(ptr as *mut FenceClosure))
159 }
160}
161
162#[doc(hidden)]
163impl FromGlibPtrBorrow<*const ffi::CoglFenceClosure> for FenceClosure {
164 unsafe fn from_glib_borrow(
165 ptr: *const ffi::CoglFenceClosure,
166 ) -> glib::translate::Borrowed<Self> {
167 glib::translate::Borrowed::new(*(ptr as *const FenceClosure))
168 }
169}
170
171impl FromGlibPtrFull<ffi::CoglFenceClosure> for FenceClosure {
172 #[inline]
173 unsafe fn from_glib_full(_: ffi::CoglFenceClosure) -> FenceClosure {
174 unimplemented!()
175 }
176}
177
178impl FromGlibContainerAsVec<ffi::CoglFenceClosure, *mut ffi::CoglFenceClosure> for FenceClosure {
179 unsafe fn from_glib_none_num_as_vec(ptr: *mut ffi::CoglFenceClosure, num: usize) -> Vec<Self> {
180 if num == 0 || ptr.is_null() {
181 return Vec::new();
182 }
183
184 let mut res = Vec::with_capacity(num);
185 for i in 0..num {
186 res.push(from_glib_none(ptr::read(ptr.add(i))));
187 }
188 res
189 }
190
191 unsafe fn from_glib_container_num_as_vec(
192 ptr: *mut ffi::CoglFenceClosure,
193 num: usize,
194 ) -> Vec<Self> {
195 let res = FromGlibContainerAsVec::from_glib_none_num_as_vec(ptr, num);
196 glib_sys::g_free(ptr as *mut _);
197 res
198 }
199
200 unsafe fn from_glib_full_num_as_vec(ptr: *mut ffi::CoglFenceClosure, num: usize) -> Vec<Self> {
201 if num == 0 || ptr.is_null() {
202 return Vec::new();
203 }
204
205 let mut res = Vec::with_capacity(num);
206 for i in 0..num {
207 res.push(from_glib_full(ptr::read(ptr.add(i))));
208 }
209 glib_sys::g_free(ptr as *mut _);
210 res
211 }
212}
213
214impl FromGlibPtrArrayContainerAsVec<ffi::CoglFenceClosure, *mut ffi::CoglFenceClosure>
215 for FenceClosure
216{
217 unsafe fn from_glib_none_as_vec(ptr: *mut ffi::CoglFenceClosure) -> Vec<Self> {
218 FromGlibContainerAsVec::from_glib_none_num_as_vec(ptr, c_ptr_array_len(ptr))
219 }
220
221 unsafe fn from_glib_container_as_vec(ptr: *mut ffi::CoglFenceClosure) -> Vec<Self> {
222 FromGlibContainerAsVec::from_glib_container_num_as_vec(ptr, c_ptr_array_len(ptr))
223 }
224
225 unsafe fn from_glib_full_as_vec(ptr: *mut ffi::CoglFenceClosure) -> Vec<Self> {
226 FromGlibContainerAsVec::from_glib_full_num_as_vec(ptr, c_ptr_array_len(ptr))
227 }
228}