Warning, /sdk/rust-qt-binding-generator/tests/rust_list/src/interface.rs is written in an unsupported language. File is not indexed.
0001 /* generated by rust_qt_binding_generator */ 0002 use libc::{c_char, c_ushort, c_int}; 0003 use std::slice; 0004 use std::char::decode_utf16; 0005 0006 use std::sync::Arc; 0007 use std::sync::atomic::{AtomicPtr, Ordering}; 0008 use std::ptr::null; 0009 0010 use implementation::*; 0011 0012 0013 #[repr(C)] 0014 pub struct COption<T> { 0015 data: T, 0016 some: bool, 0017 } 0018 0019 impl<T> COption<T> { 0020 #![allow(dead_code)] 0021 fn into(self) -> Option<T> { 0022 if self.some { 0023 Some(self.data) 0024 } else { 0025 None 0026 } 0027 } 0028 } 0029 0030 impl<T> From<Option<T>> for COption<T> 0031 where 0032 T: Default, 0033 { 0034 fn from(t: Option<T>) -> COption<T> { 0035 if let Some(v) = t { 0036 COption { 0037 data: v, 0038 some: true, 0039 } 0040 } else { 0041 COption { 0042 data: T::default(), 0043 some: false, 0044 } 0045 } 0046 } 0047 } 0048 0049 0050 pub enum QString {} 0051 0052 fn set_string_from_utf16(s: &mut String, str: *const c_ushort, len: c_int) { 0053 let utf16 = unsafe { slice::from_raw_parts(str, to_usize(len)) }; 0054 let characters = decode_utf16(utf16.iter().cloned()) 0055 .map(|r| r.unwrap()); 0056 s.clear(); 0057 s.extend(characters); 0058 } 0059 0060 0061 0062 #[repr(C)] 0063 #[derive(PartialEq, Eq, Debug)] 0064 pub enum SortOrder { 0065 Ascending = 0, 0066 Descending = 1, 0067 } 0068 0069 #[repr(C)] 0070 pub struct QModelIndex { 0071 row: c_int, 0072 internal_id: usize, 0073 } 0074 0075 0076 fn to_usize(n: c_int) -> usize { 0077 if n < 0 { 0078 panic!("Cannot cast {} to usize", n); 0079 } 0080 n as usize 0081 } 0082 0083 0084 fn to_c_int(n: usize) -> c_int { 0085 if n > c_int::max_value() as usize { 0086 panic!("Cannot cast {} to c_int", n); 0087 } 0088 n as c_int 0089 } 0090 0091 0092 pub struct NoRoleQObject {} 0093 0094 pub struct NoRoleEmitter { 0095 qobject: Arc<AtomicPtr<NoRoleQObject>>, 0096 new_data_ready: extern fn(*mut NoRoleQObject), 0097 } 0098 0099 unsafe impl Send for NoRoleEmitter {} 0100 0101 impl NoRoleEmitter { 0102 /// Clone the emitter 0103 /// 0104 /// The emitter can only be cloned when it is mutable. The emitter calls 0105 /// into C++ code which may call into Rust again. If emmitting is possible 0106 /// from immutable structures, that might lead to access to a mutable 0107 /// reference. That is undefined behaviour and forbidden. 0108 pub fn clone(&mut self) -> NoRoleEmitter { 0109 NoRoleEmitter { 0110 qobject: self.qobject.clone(), 0111 new_data_ready: self.new_data_ready, 0112 } 0113 } 0114 fn clear(&self) { 0115 let n: *const NoRoleQObject = null(); 0116 self.qobject.store(n as *mut NoRoleQObject, Ordering::SeqCst); 0117 } 0118 pub fn new_data_ready(&mut self) { 0119 let ptr = self.qobject.load(Ordering::SeqCst); 0120 if !ptr.is_null() { 0121 (self.new_data_ready)(ptr); 0122 } 0123 } 0124 } 0125 0126 #[derive(Clone)] 0127 pub struct NoRoleList { 0128 qobject: *mut NoRoleQObject, 0129 layout_about_to_be_changed: extern fn(*mut NoRoleQObject), 0130 layout_changed: extern fn(*mut NoRoleQObject), 0131 data_changed: extern fn(*mut NoRoleQObject, usize, usize), 0132 begin_reset_model: extern fn(*mut NoRoleQObject), 0133 end_reset_model: extern fn(*mut NoRoleQObject), 0134 begin_insert_rows: extern fn(*mut NoRoleQObject, usize, usize), 0135 end_insert_rows: extern fn(*mut NoRoleQObject), 0136 begin_move_rows: extern fn(*mut NoRoleQObject, usize, usize, usize), 0137 end_move_rows: extern fn(*mut NoRoleQObject), 0138 begin_remove_rows: extern fn(*mut NoRoleQObject, usize, usize), 0139 end_remove_rows: extern fn(*mut NoRoleQObject), 0140 } 0141 0142 impl NoRoleList { 0143 pub fn layout_about_to_be_changed(&mut self) { 0144 (self.layout_about_to_be_changed)(self.qobject); 0145 } 0146 pub fn layout_changed(&mut self) { 0147 (self.layout_changed)(self.qobject); 0148 } 0149 pub fn data_changed(&mut self, first: usize, last: usize) { 0150 (self.data_changed)(self.qobject, first, last); 0151 } 0152 pub fn begin_reset_model(&mut self) { 0153 (self.begin_reset_model)(self.qobject); 0154 } 0155 pub fn end_reset_model(&mut self) { 0156 (self.end_reset_model)(self.qobject); 0157 } 0158 pub fn begin_insert_rows(&mut self, first: usize, last: usize) { 0159 (self.begin_insert_rows)(self.qobject, first, last); 0160 } 0161 pub fn end_insert_rows(&mut self) { 0162 (self.end_insert_rows)(self.qobject); 0163 } 0164 pub fn begin_move_rows(&mut self, first: usize, last: usize, destination: usize) { 0165 (self.begin_move_rows)(self.qobject, first, last, destination); 0166 } 0167 pub fn end_move_rows(&mut self) { 0168 (self.end_move_rows)(self.qobject); 0169 } 0170 pub fn begin_remove_rows(&mut self, first: usize, last: usize) { 0171 (self.begin_remove_rows)(self.qobject, first, last); 0172 } 0173 pub fn end_remove_rows(&mut self) { 0174 (self.end_remove_rows)(self.qobject); 0175 } 0176 } 0177 0178 pub trait NoRoleTrait { 0179 fn new(emit: NoRoleEmitter, model: NoRoleList) -> Self; 0180 fn emit(&mut self) -> &mut NoRoleEmitter; 0181 fn row_count(&self) -> usize; 0182 fn insert_rows(&mut self, _row: usize, _count: usize) -> bool { false } 0183 fn remove_rows(&mut self, _row: usize, _count: usize) -> bool { false } 0184 fn can_fetch_more(&self) -> bool { 0185 false 0186 } 0187 fn fetch_more(&mut self) {} 0188 fn sort(&mut self, _: u8, _: SortOrder) {} 0189 fn user_age(&self, index: usize) -> u8; 0190 fn set_user_age(&mut self, index: usize, _: u8) -> bool; 0191 fn user_name(&self, index: usize) -> &str; 0192 fn set_user_name(&mut self, index: usize, _: String) -> bool; 0193 } 0194 0195 #[no_mangle] 0196 pub extern "C" fn no_role_new( 0197 no_role: *mut NoRoleQObject, 0198 no_role_new_data_ready: extern fn(*mut NoRoleQObject), 0199 no_role_layout_about_to_be_changed: extern fn(*mut NoRoleQObject), 0200 no_role_layout_changed: extern fn(*mut NoRoleQObject), 0201 no_role_data_changed: extern fn(*mut NoRoleQObject, usize, usize), 0202 no_role_begin_reset_model: extern fn(*mut NoRoleQObject), 0203 no_role_end_reset_model: extern fn(*mut NoRoleQObject), 0204 no_role_begin_insert_rows: extern fn(*mut NoRoleQObject, usize, usize), 0205 no_role_end_insert_rows: extern fn(*mut NoRoleQObject), 0206 no_role_begin_move_rows: extern fn(*mut NoRoleQObject, usize, usize, usize), 0207 no_role_end_move_rows: extern fn(*mut NoRoleQObject), 0208 no_role_begin_remove_rows: extern fn(*mut NoRoleQObject, usize, usize), 0209 no_role_end_remove_rows: extern fn(*mut NoRoleQObject), 0210 ) -> *mut NoRole { 0211 let no_role_emit = NoRoleEmitter { 0212 qobject: Arc::new(AtomicPtr::new(no_role)), 0213 new_data_ready: no_role_new_data_ready, 0214 }; 0215 let model = NoRoleList { 0216 qobject: no_role, 0217 layout_about_to_be_changed: no_role_layout_about_to_be_changed, 0218 layout_changed: no_role_layout_changed, 0219 data_changed: no_role_data_changed, 0220 begin_reset_model: no_role_begin_reset_model, 0221 end_reset_model: no_role_end_reset_model, 0222 begin_insert_rows: no_role_begin_insert_rows, 0223 end_insert_rows: no_role_end_insert_rows, 0224 begin_move_rows: no_role_begin_move_rows, 0225 end_move_rows: no_role_end_move_rows, 0226 begin_remove_rows: no_role_begin_remove_rows, 0227 end_remove_rows: no_role_end_remove_rows, 0228 }; 0229 let d_no_role = NoRole::new(no_role_emit, model); 0230 Box::into_raw(Box::new(d_no_role)) 0231 } 0232 0233 #[no_mangle] 0234 pub unsafe extern "C" fn no_role_free(ptr: *mut NoRole) { 0235 Box::from_raw(ptr).emit().clear(); 0236 } 0237 0238 #[no_mangle] 0239 pub unsafe extern "C" fn no_role_row_count(ptr: *const NoRole) -> c_int { 0240 to_c_int((&*ptr).row_count()) 0241 } 0242 #[no_mangle] 0243 pub unsafe extern "C" fn no_role_insert_rows(ptr: *mut NoRole, row: c_int, count: c_int) -> bool { 0244 (&mut *ptr).insert_rows(to_usize(row), to_usize(count)) 0245 } 0246 #[no_mangle] 0247 pub unsafe extern "C" fn no_role_remove_rows(ptr: *mut NoRole, row: c_int, count: c_int) -> bool { 0248 (&mut *ptr).remove_rows(to_usize(row), to_usize(count)) 0249 } 0250 #[no_mangle] 0251 pub unsafe extern "C" fn no_role_can_fetch_more(ptr: *const NoRole) -> bool { 0252 (&*ptr).can_fetch_more() 0253 } 0254 #[no_mangle] 0255 pub unsafe extern "C" fn no_role_fetch_more(ptr: *mut NoRole) { 0256 (&mut *ptr).fetch_more() 0257 } 0258 #[no_mangle] 0259 pub unsafe extern "C" fn no_role_sort( 0260 ptr: *mut NoRole, 0261 column: u8, 0262 order: SortOrder, 0263 ) { 0264 (&mut *ptr).sort(column, order) 0265 } 0266 0267 #[no_mangle] 0268 pub unsafe extern "C" fn no_role_data_user_age(ptr: *const NoRole, row: c_int) -> u8 { 0269 let o = &*ptr; 0270 o.user_age(to_usize(row)) 0271 } 0272 0273 #[no_mangle] 0274 pub unsafe extern "C" fn no_role_set_data_user_age( 0275 ptr: *mut NoRole, row: c_int, 0276 v: u8, 0277 ) -> bool { 0278 (&mut *ptr).set_user_age(to_usize(row), v) 0279 } 0280 0281 #[no_mangle] 0282 pub unsafe extern "C" fn no_role_data_user_name( 0283 ptr: *const NoRole, row: c_int, 0284 d: *mut QString, 0285 set: extern fn(*mut QString, *const c_char, len: c_int), 0286 ) { 0287 let o = &*ptr; 0288 let data = o.user_name(to_usize(row)); 0289 let s: *const c_char = data.as_ptr() as *const c_char; 0290 set(d, s, to_c_int(data.len())); 0291 } 0292 0293 #[no_mangle] 0294 pub unsafe extern "C" fn no_role_set_data_user_name( 0295 ptr: *mut NoRole, row: c_int, 0296 s: *const c_ushort, len: c_int, 0297 ) -> bool { 0298 let o = &mut *ptr; 0299 let mut v = String::new(); 0300 set_string_from_utf16(&mut v, s, len); 0301 o.set_user_name(to_usize(row), v) 0302 } 0303 0304 pub struct PersonsQObject {} 0305 0306 pub struct PersonsEmitter { 0307 qobject: Arc<AtomicPtr<PersonsQObject>>, 0308 new_data_ready: extern fn(*mut PersonsQObject), 0309 } 0310 0311 unsafe impl Send for PersonsEmitter {} 0312 0313 impl PersonsEmitter { 0314 /// Clone the emitter 0315 /// 0316 /// The emitter can only be cloned when it is mutable. The emitter calls 0317 /// into C++ code which may call into Rust again. If emmitting is possible 0318 /// from immutable structures, that might lead to access to a mutable 0319 /// reference. That is undefined behaviour and forbidden. 0320 pub fn clone(&mut self) -> PersonsEmitter { 0321 PersonsEmitter { 0322 qobject: self.qobject.clone(), 0323 new_data_ready: self.new_data_ready, 0324 } 0325 } 0326 fn clear(&self) { 0327 let n: *const PersonsQObject = null(); 0328 self.qobject.store(n as *mut PersonsQObject, Ordering::SeqCst); 0329 } 0330 pub fn new_data_ready(&mut self) { 0331 let ptr = self.qobject.load(Ordering::SeqCst); 0332 if !ptr.is_null() { 0333 (self.new_data_ready)(ptr); 0334 } 0335 } 0336 } 0337 0338 #[derive(Clone)] 0339 pub struct PersonsList { 0340 qobject: *mut PersonsQObject, 0341 layout_about_to_be_changed: extern fn(*mut PersonsQObject), 0342 layout_changed: extern fn(*mut PersonsQObject), 0343 data_changed: extern fn(*mut PersonsQObject, usize, usize), 0344 begin_reset_model: extern fn(*mut PersonsQObject), 0345 end_reset_model: extern fn(*mut PersonsQObject), 0346 begin_insert_rows: extern fn(*mut PersonsQObject, usize, usize), 0347 end_insert_rows: extern fn(*mut PersonsQObject), 0348 begin_move_rows: extern fn(*mut PersonsQObject, usize, usize, usize), 0349 end_move_rows: extern fn(*mut PersonsQObject), 0350 begin_remove_rows: extern fn(*mut PersonsQObject, usize, usize), 0351 end_remove_rows: extern fn(*mut PersonsQObject), 0352 } 0353 0354 impl PersonsList { 0355 pub fn layout_about_to_be_changed(&mut self) { 0356 (self.layout_about_to_be_changed)(self.qobject); 0357 } 0358 pub fn layout_changed(&mut self) { 0359 (self.layout_changed)(self.qobject); 0360 } 0361 pub fn data_changed(&mut self, first: usize, last: usize) { 0362 (self.data_changed)(self.qobject, first, last); 0363 } 0364 pub fn begin_reset_model(&mut self) { 0365 (self.begin_reset_model)(self.qobject); 0366 } 0367 pub fn end_reset_model(&mut self) { 0368 (self.end_reset_model)(self.qobject); 0369 } 0370 pub fn begin_insert_rows(&mut self, first: usize, last: usize) { 0371 (self.begin_insert_rows)(self.qobject, first, last); 0372 } 0373 pub fn end_insert_rows(&mut self) { 0374 (self.end_insert_rows)(self.qobject); 0375 } 0376 pub fn begin_move_rows(&mut self, first: usize, last: usize, destination: usize) { 0377 (self.begin_move_rows)(self.qobject, first, last, destination); 0378 } 0379 pub fn end_move_rows(&mut self) { 0380 (self.end_move_rows)(self.qobject); 0381 } 0382 pub fn begin_remove_rows(&mut self, first: usize, last: usize) { 0383 (self.begin_remove_rows)(self.qobject, first, last); 0384 } 0385 pub fn end_remove_rows(&mut self) { 0386 (self.end_remove_rows)(self.qobject); 0387 } 0388 } 0389 0390 pub trait PersonsTrait { 0391 fn new(emit: PersonsEmitter, model: PersonsList) -> Self; 0392 fn emit(&mut self) -> &mut PersonsEmitter; 0393 fn row_count(&self) -> usize; 0394 fn insert_rows(&mut self, _row: usize, _count: usize) -> bool { false } 0395 fn remove_rows(&mut self, _row: usize, _count: usize) -> bool { false } 0396 fn can_fetch_more(&self) -> bool { 0397 false 0398 } 0399 fn fetch_more(&mut self) {} 0400 fn sort(&mut self, _: u8, _: SortOrder) {} 0401 fn user_name(&self, index: usize) -> &str; 0402 fn set_user_name(&mut self, index: usize, _: String) -> bool; 0403 } 0404 0405 #[no_mangle] 0406 pub extern "C" fn persons_new( 0407 persons: *mut PersonsQObject, 0408 persons_new_data_ready: extern fn(*mut PersonsQObject), 0409 persons_layout_about_to_be_changed: extern fn(*mut PersonsQObject), 0410 persons_layout_changed: extern fn(*mut PersonsQObject), 0411 persons_data_changed: extern fn(*mut PersonsQObject, usize, usize), 0412 persons_begin_reset_model: extern fn(*mut PersonsQObject), 0413 persons_end_reset_model: extern fn(*mut PersonsQObject), 0414 persons_begin_insert_rows: extern fn(*mut PersonsQObject, usize, usize), 0415 persons_end_insert_rows: extern fn(*mut PersonsQObject), 0416 persons_begin_move_rows: extern fn(*mut PersonsQObject, usize, usize, usize), 0417 persons_end_move_rows: extern fn(*mut PersonsQObject), 0418 persons_begin_remove_rows: extern fn(*mut PersonsQObject, usize, usize), 0419 persons_end_remove_rows: extern fn(*mut PersonsQObject), 0420 ) -> *mut Persons { 0421 let persons_emit = PersonsEmitter { 0422 qobject: Arc::new(AtomicPtr::new(persons)), 0423 new_data_ready: persons_new_data_ready, 0424 }; 0425 let model = PersonsList { 0426 qobject: persons, 0427 layout_about_to_be_changed: persons_layout_about_to_be_changed, 0428 layout_changed: persons_layout_changed, 0429 data_changed: persons_data_changed, 0430 begin_reset_model: persons_begin_reset_model, 0431 end_reset_model: persons_end_reset_model, 0432 begin_insert_rows: persons_begin_insert_rows, 0433 end_insert_rows: persons_end_insert_rows, 0434 begin_move_rows: persons_begin_move_rows, 0435 end_move_rows: persons_end_move_rows, 0436 begin_remove_rows: persons_begin_remove_rows, 0437 end_remove_rows: persons_end_remove_rows, 0438 }; 0439 let d_persons = Persons::new(persons_emit, model); 0440 Box::into_raw(Box::new(d_persons)) 0441 } 0442 0443 #[no_mangle] 0444 pub unsafe extern "C" fn persons_free(ptr: *mut Persons) { 0445 Box::from_raw(ptr).emit().clear(); 0446 } 0447 0448 #[no_mangle] 0449 pub unsafe extern "C" fn persons_row_count(ptr: *const Persons) -> c_int { 0450 to_c_int((&*ptr).row_count()) 0451 } 0452 #[no_mangle] 0453 pub unsafe extern "C" fn persons_insert_rows(ptr: *mut Persons, row: c_int, count: c_int) -> bool { 0454 (&mut *ptr).insert_rows(to_usize(row), to_usize(count)) 0455 } 0456 #[no_mangle] 0457 pub unsafe extern "C" fn persons_remove_rows(ptr: *mut Persons, row: c_int, count: c_int) -> bool { 0458 (&mut *ptr).remove_rows(to_usize(row), to_usize(count)) 0459 } 0460 #[no_mangle] 0461 pub unsafe extern "C" fn persons_can_fetch_more(ptr: *const Persons) -> bool { 0462 (&*ptr).can_fetch_more() 0463 } 0464 #[no_mangle] 0465 pub unsafe extern "C" fn persons_fetch_more(ptr: *mut Persons) { 0466 (&mut *ptr).fetch_more() 0467 } 0468 #[no_mangle] 0469 pub unsafe extern "C" fn persons_sort( 0470 ptr: *mut Persons, 0471 column: u8, 0472 order: SortOrder, 0473 ) { 0474 (&mut *ptr).sort(column, order) 0475 } 0476 0477 #[no_mangle] 0478 pub unsafe extern "C" fn persons_data_user_name( 0479 ptr: *const Persons, row: c_int, 0480 d: *mut QString, 0481 set: extern fn(*mut QString, *const c_char, len: c_int), 0482 ) { 0483 let o = &*ptr; 0484 let data = o.user_name(to_usize(row)); 0485 let s: *const c_char = data.as_ptr() as *const c_char; 0486 set(d, s, to_c_int(data.len())); 0487 } 0488 0489 #[no_mangle] 0490 pub unsafe extern "C" fn persons_set_data_user_name( 0491 ptr: *mut Persons, row: c_int, 0492 s: *const c_ushort, len: c_int, 0493 ) -> bool { 0494 let o = &mut *ptr; 0495 let mut v = String::new(); 0496 set_string_from_utf16(&mut v, s, len); 0497 o.set_user_name(to_usize(row), v) 0498 }