Convert demo
parent
5bcb96b561
commit
af7b64b82d
|
@ -1,8 +1,9 @@
|
|||
/* generated by rust_qt_binding_generator */
|
||||
#![allow(unknown_lints)]
|
||||
#![allow(mutex_atomic, needless_pass_by_value)]
|
||||
use libc::{c_int, c_void, uint8_t, uint16_t};
|
||||
use libc::{c_char, c_ushort, c_int, c_void, uint8_t, uint16_t};
|
||||
use std::slice;
|
||||
use std::char::decode_utf16;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::ptr::null;
|
||||
|
@ -36,65 +37,20 @@ where
|
|||
}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QString {
|
||||
data: *const uint8_t,
|
||||
len: c_int,
|
||||
}
|
||||
pub enum QString {}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QStringIn {
|
||||
data: *const uint16_t,
|
||||
len: c_int,
|
||||
}
|
||||
|
||||
impl QStringIn {
|
||||
fn convert(&self) -> String {
|
||||
let data = unsafe { slice::from_raw_parts(self.data, self.len as usize) };
|
||||
String::from_utf16_lossy(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a str> for QString {
|
||||
fn from(string: &'a str) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a String> for QString {
|
||||
fn from(string: &'a String) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
fn set_string_from_utf16(s: &mut String, str: *const c_ushort, len: c_int) {
|
||||
let utf16 = unsafe { slice::from_raw_parts(str, len as usize) };
|
||||
let characters = decode_utf16(utf16.iter().cloned())
|
||||
.into_iter()
|
||||
.map(|r| r.unwrap());
|
||||
s.clear();
|
||||
s.extend(characters);
|
||||
}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QByteArray {
|
||||
data: *const uint8_t,
|
||||
len: c_int,
|
||||
}
|
||||
|
||||
impl QByteArray {
|
||||
fn convert(&self) -> Vec<u8> {
|
||||
let data = unsafe { slice::from_raw_parts(self.data, self.len as usize) };
|
||||
Vec::from(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a [u8]> for QByteArray {
|
||||
fn from(value: &'a [u8]) -> QByteArray {
|
||||
QByteArray {
|
||||
len: value.len() as c_int,
|
||||
data: value.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
pub enum QByteArray {}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
|
@ -508,13 +464,15 @@ pub unsafe extern "C" fn fibonacci_list_sort(
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn fibonacci_list_data_fibonacci_number(ptr: *const FibonacciList, row: c_int) -> u64 {
|
||||
(&*ptr).fibonacci_number(row as usize).into()
|
||||
pub extern "C" fn fibonacci_list_data_fibonacci_number(ptr: *const FibonacciList, row: c_int) -> u64 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.fibonacci_number(row as usize).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn fibonacci_list_data_row(ptr: *const FibonacciList, row: c_int) -> u64 {
|
||||
(&*ptr).row(row as usize).into()
|
||||
pub extern "C" fn fibonacci_list_data_row(ptr: *const FibonacciList, row: c_int) -> u64 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.row(row as usize).into()
|
||||
}
|
||||
|
||||
pub struct FileSystemTreeQObject {}
|
||||
|
@ -641,24 +599,30 @@ pub unsafe extern "C" fn file_system_tree_free(ptr: *mut FileSystemTree) {
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_path_get(
|
||||
pub extern "C" fn file_system_tree_path_get(
|
||||
ptr: *const FileSystemTree,
|
||||
p: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
set: fn(*mut c_void, *const c_char, c_int),
|
||||
) {
|
||||
let data = (&*ptr).path();
|
||||
if let Some(data) = data {
|
||||
set(p, data.into());
|
||||
let o = unsafe { &*ptr };
|
||||
let v = o.path();
|
||||
if let Some(v) = v {
|
||||
let s: *const c_char = v.as_ptr() as (*const c_char);
|
||||
set(p, s, v.len() as c_int);
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_path_set(ptr: *mut FileSystemTree, v: QStringIn) {
|
||||
(&mut *ptr).set_path(Some(v.convert()));
|
||||
pub extern "C" fn file_system_tree_path_set(ptr: *mut FileSystemTree, v: *const c_ushort, len: c_int) {
|
||||
let o = unsafe { &mut *ptr };
|
||||
let mut s = String::new();
|
||||
set_string_from_utf16(&mut s, v, len);
|
||||
o.set_path(Some(s));
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_path_set_none(ptr: *mut FileSystemTree) {
|
||||
(&mut *ptr).set_path(None);
|
||||
pub extern "C" fn file_system_tree_path_set_none(ptr: *mut FileSystemTree) {
|
||||
let o = unsafe { &mut *ptr };
|
||||
o.set_path(None);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
@ -734,50 +698,59 @@ pub unsafe extern "C" fn file_system_tree_row(ptr: *const FileSystemTree, item:
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_icon(
|
||||
pub extern "C" fn file_system_tree_data_file_icon(
|
||||
ptr: *const FileSystemTree, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QByteArray),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).file_icon(item);
|
||||
set(d, (data).into());
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.file_icon(item);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_name(
|
||||
pub extern "C" fn file_system_tree_data_file_name(
|
||||
ptr: *const FileSystemTree, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).file_name(item);
|
||||
set(d, (&data).into());
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.file_name(item);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_path(
|
||||
pub extern "C" fn file_system_tree_data_file_path(
|
||||
ptr: *const FileSystemTree, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).file_path(item);
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.file_path(item);
|
||||
if let Some(data) = data {
|
||||
set(d, QString::from(&data));
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_permissions(ptr: *const FileSystemTree, item: usize) -> i32 {
|
||||
(&*ptr).file_permissions(item).into()
|
||||
pub extern "C" fn file_system_tree_data_file_permissions(ptr: *const FileSystemTree, item: usize) -> i32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.file_permissions(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_size(ptr: *const FileSystemTree, item: usize) -> COption<u64> {
|
||||
(&*ptr).file_size(item).into()
|
||||
pub extern "C" fn file_system_tree_data_file_size(ptr: *const FileSystemTree, item: usize) -> COption<u64> {
|
||||
let o = unsafe { &*ptr };
|
||||
o.file_size(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn file_system_tree_data_file_type(ptr: *const FileSystemTree, item: usize) -> i32 {
|
||||
(&*ptr).file_type(item).into()
|
||||
pub extern "C" fn file_system_tree_data_file_type(ptr: *const FileSystemTree, item: usize) -> i32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.file_type(item).into()
|
||||
}
|
||||
|
||||
pub struct ProcessesQObject {}
|
||||
|
@ -987,48 +960,57 @@ pub unsafe extern "C" fn processes_row(ptr: *const Processes, item: usize) -> c_
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_cmd(
|
||||
pub extern "C" fn processes_data_cmd(
|
||||
ptr: *const Processes, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).cmd(item);
|
||||
set(d, (&data).into());
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.cmd(item);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_cpu_percentage(ptr: *const Processes, item: usize) -> u8 {
|
||||
(&*ptr).cpu_percentage(item).into()
|
||||
pub extern "C" fn processes_data_cpu_percentage(ptr: *const Processes, item: usize) -> u8 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.cpu_percentage(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_cpu_usage(ptr: *const Processes, item: usize) -> f32 {
|
||||
(&*ptr).cpu_usage(item).into()
|
||||
pub extern "C" fn processes_data_cpu_usage(ptr: *const Processes, item: usize) -> f32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.cpu_usage(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_memory(ptr: *const Processes, item: usize) -> u64 {
|
||||
(&*ptr).memory(item).into()
|
||||
pub extern "C" fn processes_data_memory(ptr: *const Processes, item: usize) -> u64 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.memory(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_name(
|
||||
pub extern "C" fn processes_data_name(
|
||||
ptr: *const Processes, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).name(item);
|
||||
set(d, (data).into());
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.name(item);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_pid(ptr: *const Processes, item: usize) -> u32 {
|
||||
(&*ptr).pid(item).into()
|
||||
pub extern "C" fn processes_data_pid(ptr: *const Processes, item: usize) -> u32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.pid(item).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn processes_data_uid(ptr: *const Processes, item: usize) -> u32 {
|
||||
(&*ptr).uid(item).into()
|
||||
pub extern "C" fn processes_data_uid(ptr: *const Processes, item: usize) -> u32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.uid(item).into()
|
||||
}
|
||||
|
||||
pub struct TimeSeriesQObject {}
|
||||
|
@ -1172,8 +1154,9 @@ pub unsafe extern "C" fn time_series_sort(
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn time_series_data_cos(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
(&*ptr).cos(row as usize).into()
|
||||
pub extern "C" fn time_series_data_cos(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.cos(row as usize).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
@ -1185,8 +1168,9 @@ pub unsafe extern "C" fn time_series_set_data_cos(
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn time_series_data_sin(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
(&*ptr).sin(row as usize).into()
|
||||
pub extern "C" fn time_series_data_sin(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.sin(row as usize).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
@ -1198,8 +1182,9 @@ pub unsafe extern "C" fn time_series_set_data_sin(
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn time_series_data_time(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
(&*ptr).time(row as usize).into()
|
||||
pub extern "C" fn time_series_data_time(ptr: *const TimeSeries, row: c_int) -> f32 {
|
||||
let o = unsafe { &*ptr };
|
||||
o.time(row as usize).into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
|
|
@ -39,40 +39,15 @@ namespace {
|
|||
}
|
||||
};
|
||||
|
||||
struct qstring_t {
|
||||
private:
|
||||
const void* data;
|
||||
int len;
|
||||
public:
|
||||
qstring_t(const QString& v):
|
||||
data(static_cast<const void*>(v.utf16())),
|
||||
len(v.size()) {
|
||||
}
|
||||
operator QString() const {
|
||||
return QString::fromUtf8(static_cast<const char*>(data), len);
|
||||
}
|
||||
};
|
||||
typedef void (*qstring_set)(QString*, qstring_t*);
|
||||
void set_qstring(QString* v, qstring_t* val) {
|
||||
*v = *val;
|
||||
typedef void (*qstring_set)(QString* val, const char* utf8, int nbytes);
|
||||
void set_qstring(QString* val, const char* utf8, int nbytes) {
|
||||
*val = QString::fromUtf8(utf8, nbytes);
|
||||
}
|
||||
|
||||
struct qbytearray_t {
|
||||
private:
|
||||
const char* data;
|
||||
int len;
|
||||
public:
|
||||
qbytearray_t(const QByteArray& v):
|
||||
data(v.data()),
|
||||
len(v.size()) {
|
||||
}
|
||||
operator QByteArray() const {
|
||||
return QByteArray(data, len);
|
||||
}
|
||||
};
|
||||
typedef void (*qbytearray_set)(QByteArray*, qbytearray_t*);
|
||||
void set_qbytearray(QByteArray* v, qbytearray_t* val) {
|
||||
*v = *val;
|
||||
typedef void (*qbytearray_set)(QByteArray* val, const char* bytes, int nbytes);
|
||||
void set_qbytearray(QByteArray* v, const char* bytes, int nbytes) {
|
||||
v->truncate(0);
|
||||
v->append(bytes, nbytes);
|
||||
}
|
||||
|
||||
struct qmodelindex_t {
|
||||
|
@ -516,7 +491,7 @@ extern "C" {
|
|||
void (*)(FileSystemTree*));
|
||||
void file_system_tree_free(FileSystemTree::Private*);
|
||||
void file_system_tree_path_get(const FileSystemTree::Private*, QString*, qstring_set);
|
||||
void file_system_tree_path_set(FileSystemTree::Private*, qstring_t);
|
||||
void file_system_tree_path_set(FileSystemTree::Private*, const ushort *str, int len);
|
||||
void file_system_tree_path_set_none(FileSystemTree::Private*);
|
||||
};
|
||||
|
||||
|
@ -1380,7 +1355,7 @@ void FileSystemTree::setPath(const QString& v) {
|
|||
if (v.isNull()) {
|
||||
file_system_tree_path_set_none(m_d);
|
||||
} else {
|
||||
file_system_tree_path_set(m_d, v);
|
||||
file_system_tree_path_set(m_d, reinterpret_cast<const ushort*>(v.data()), v.size());
|
||||
}
|
||||
}
|
||||
Processes::Processes(bool /*owned*/, QObject *parent):
|
||||
|
|
16
src/rust.cpp
16
src/rust.cpp
|
@ -607,33 +607,33 @@ pub extern "C" fn %2_data_%3(
|
|||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let o = unsafe { & *ptr };
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.%3(%6);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as i32);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
)").arg(o.name, lcname, snakeCase(ip.name), indexDecl, index);
|
||||
} else if (ip.type.name == "QString") {
|
||||
r << QString(R"(
|
||||
#[no_mangle]
|
||||
pub extern "C" fn %2_data_%3(
|
||||
ptr: *const %1%5,
|
||||
ptr: *const %1%4,
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let o = unsafe { &mut *ptr };
|
||||
let data = o.%3(%6);
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.%3(%5);
|
||||
if let Some(data) = data {
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len());
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
}
|
||||
)").arg(o.name, lcname, snakeCase(ip.name), ip.type.name, indexDecl, index);
|
||||
)").arg(o.name, lcname, snakeCase(ip.name), indexDecl, index);
|
||||
} else {
|
||||
r << QString(R"(
|
||||
#[no_mangle]
|
||||
pub extern "C" fn %2_data_%3(ptr: *const %1%5) -> %4 {
|
||||
let o = unsafe { &mut *ptr };
|
||||
let o = unsafe { &*ptr };
|
||||
o.%3(%6).into()
|
||||
}
|
||||
)").arg(o.name, lcname, snakeCase(ip.name), rustCType(ip), indexDecl, index);
|
||||
|
|
|
@ -204,10 +204,10 @@ pub extern "C" fn persons_data_user_name(
|
|||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let o = unsafe { & *ptr };
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.user_name(row as usize);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as i32);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
/* generated by rust_qt_binding_generator */
|
||||
#![allow(unknown_lints)]
|
||||
#![allow(mutex_atomic, needless_pass_by_value)]
|
||||
use libc::{c_int, c_void, uint8_t, uint16_t};
|
||||
use libc::{c_char, c_ushort, c_int, c_void, uint8_t, uint16_t};
|
||||
use std::slice;
|
||||
use std::char::decode_utf16;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::ptr::null;
|
||||
|
@ -10,42 +11,17 @@ use std::ptr::null;
|
|||
use implementation::*;
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QString {
|
||||
data: *const uint8_t,
|
||||
len: c_int,
|
||||
pub enum QString {}
|
||||
|
||||
fn set_string_from_utf16(s: &mut String, str: *const c_ushort, len: c_int) {
|
||||
let utf16 = unsafe { slice::from_raw_parts(str, len as usize) };
|
||||
let characters = decode_utf16(utf16.iter().cloned())
|
||||
.into_iter()
|
||||
.map(|r| r.unwrap());
|
||||
s.clear();
|
||||
s.extend(characters);
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QStringIn {
|
||||
data: *const uint16_t,
|
||||
len: c_int,
|
||||
}
|
||||
|
||||
impl QStringIn {
|
||||
fn convert(&self) -> String {
|
||||
let data = unsafe { slice::from_raw_parts(self.data, self.len as usize) };
|
||||
String::from_utf16_lossy(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a str> for QString {
|
||||
fn from(string: &'a str) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a String> for QString {
|
||||
fn from(string: &'a String) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct GroupQObject {}
|
||||
|
||||
|
@ -153,18 +129,23 @@ pub unsafe extern "C" fn inner_object_free(ptr: *mut InnerObject) {
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn inner_object_description_get(
|
||||
pub extern "C" fn inner_object_description_get(
|
||||
ptr: *const InnerObject,
|
||||
p: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
set: fn(*mut c_void, *const c_char, c_int),
|
||||
) {
|
||||
let data = (&*ptr).description();
|
||||
set(p, data.into());
|
||||
let o = unsafe { &*ptr };
|
||||
let v = o.description();
|
||||
let s: *const c_char = v.as_ptr() as (*const c_char);
|
||||
set(p, s, v.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn inner_object_description_set(ptr: *mut InnerObject, v: QStringIn) {
|
||||
(&mut *ptr).set_description(v.convert());
|
||||
pub extern "C" fn inner_object_description_set(ptr: *mut InnerObject, v: *const c_ushort, len: c_int) {
|
||||
let o = unsafe { &mut *ptr };
|
||||
let mut s = String::new();
|
||||
set_string_from_utf16(&mut s, v, len);
|
||||
o.set_description(s);
|
||||
}
|
||||
|
||||
pub struct PersonQObject {}
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
/* generated by rust_qt_binding_generator */
|
||||
#![allow(unknown_lints)]
|
||||
#![allow(mutex_atomic, needless_pass_by_value)]
|
||||
use libc::{c_int, c_void, uint8_t, uint16_t};
|
||||
use libc::{c_char, c_ushort, c_int, c_void, uint8_t, uint16_t};
|
||||
use std::slice;
|
||||
use std::char::decode_utf16;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::ptr::null;
|
||||
|
@ -36,42 +37,17 @@ where
|
|||
}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QString {
|
||||
data: *const uint8_t,
|
||||
len: c_int,
|
||||
pub enum QString {}
|
||||
|
||||
fn set_string_from_utf16(s: &mut String, str: *const c_ushort, len: c_int) {
|
||||
let utf16 = unsafe { slice::from_raw_parts(str, len as usize) };
|
||||
let characters = decode_utf16(utf16.iter().cloned())
|
||||
.into_iter()
|
||||
.map(|r| r.unwrap());
|
||||
s.clear();
|
||||
s.extend(characters);
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct QStringIn {
|
||||
data: *const uint16_t,
|
||||
len: c_int,
|
||||
}
|
||||
|
||||
impl QStringIn {
|
||||
fn convert(&self) -> String {
|
||||
let data = unsafe { slice::from_raw_parts(self.data, self.len as usize) };
|
||||
String::from_utf16_lossy(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a str> for QString {
|
||||
fn from(string: &'a str) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a String> for QString {
|
||||
fn from(string: &'a String) -> QString {
|
||||
QString {
|
||||
len: string.len() as c_int,
|
||||
data: string.as_ptr(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
|
@ -267,19 +243,24 @@ pub unsafe extern "C" fn persons_row(ptr: *const Persons, item: usize) -> c_int
|
|||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn persons_data_user_name(
|
||||
pub extern "C" fn persons_data_user_name(
|
||||
ptr: *const Persons, item: usize,
|
||||
d: *mut c_void,
|
||||
set: fn(*mut c_void, QString),
|
||||
d: *mut QString,
|
||||
set: fn(*mut QString, *const c_char, len: c_int),
|
||||
) {
|
||||
let data = (&*ptr).user_name(item);
|
||||
set(d, (data).into());
|
||||
let o = unsafe { &*ptr };
|
||||
let data = o.user_name(item);
|
||||
let s: *const c_char = data.as_ptr() as (*const c_char);
|
||||
set(d, s, data.len() as c_int);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn persons_set_data_user_name(
|
||||
pub extern "C" fn persons_set_data_user_name(
|
||||
ptr: *mut Persons, item: usize,
|
||||
v: QStringIn,
|
||||
s: *const c_ushort, len: c_int,
|
||||
) -> bool {
|
||||
(&mut *ptr).set_user_name(item, v.convert())
|
||||
let o = unsafe { &mut *ptr };
|
||||
let mut v = String::new();
|
||||
set_string_from_utf16(&mut v, s, len);
|
||||
o.set_user_name(item, v)
|
||||
}
|
||||
|
|
|
@ -3,22 +3,9 @@
|
|||
|
||||
namespace {
|
||||
|
||||
struct qstring_t {
|
||||
private:
|
||||
const void* data;
|
||||
int len;
|
||||
public:
|
||||
qstring_t(const QString& v):
|
||||
data(static_cast<const void*>(v.utf16())),
|
||||
len(v.size()) {
|
||||
}
|
||||
operator QString() const {
|
||||
return QString::fromUtf8(static_cast<const char*>(data), len);
|
||||
}
|
||||
};
|
||||
typedef void (*qstring_set)(QString*, qstring_t*);
|
||||
void set_qstring(QString* v, qstring_t* val) {
|
||||
*v = *val;
|
||||
typedef void (*qstring_set)(QString* val, const char* utf8, int nbytes);
|
||||
void set_qstring(QString* val, const char* utf8, int nbytes) {
|
||||
*val = QString::fromUtf8(utf8, nbytes);
|
||||
}
|
||||
inline void innerObjectDescriptionChanged(InnerObject* o)
|
||||
{
|
||||
|
@ -35,7 +22,7 @@ extern "C" {
|
|||
InnerObject::Private* inner_object_new(InnerObject*, void (*)(InnerObject*));
|
||||
void inner_object_free(InnerObject::Private*);
|
||||
void inner_object_description_get(const InnerObject::Private*, QString*, qstring_set);
|
||||
void inner_object_description_set(InnerObject::Private*, qstring_t);
|
||||
void inner_object_description_set(InnerObject::Private*, const ushort *str, int len);
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
|
@ -103,7 +90,7 @@ QString InnerObject::description() const
|
|||
return v;
|
||||
}
|
||||
void InnerObject::setDescription(const QString& v) {
|
||||
inner_object_description_set(m_d, v);
|
||||
inner_object_description_set(m_d, reinterpret_cast<const ushort*>(v.data()), v.size());
|
||||
}
|
||||
Person::Person(bool /*owned*/, QObject *parent):
|
||||
QObject(parent),
|
||||
|
|
|
@ -15,22 +15,9 @@ namespace {
|
|||
}
|
||||
};
|
||||
|
||||
struct qstring_t {
|
||||
private:
|
||||
const void* data;
|
||||
int len;
|
||||
public:
|
||||
qstring_t(const QString& v):
|
||||
data(static_cast<const void*>(v.utf16())),
|
||||
len(v.size()) {
|
||||
}
|
||||
operator QString() const {
|
||||
return QString::fromUtf8(static_cast<const char*>(data), len);
|
||||
}
|
||||
};
|
||||
typedef void (*qstring_set)(QString*, qstring_t*);
|
||||
void set_qstring(QString* v, qstring_t* val) {
|
||||
*v = *val;
|
||||
typedef void (*qstring_set)(QString* val, const char* utf8, int nbytes);
|
||||
void set_qstring(QString* val, const char* utf8, int nbytes) {
|
||||
*val = QString::fromUtf8(utf8, nbytes);
|
||||
}
|
||||
|
||||
struct qmodelindex_t {
|
||||
|
@ -40,7 +27,7 @@ namespace {
|
|||
}
|
||||
extern "C" {
|
||||
void persons_data_user_name(const Persons::Private*, quintptr, QString*, qstring_set);
|
||||
bool persons_set_data_user_name(Persons::Private*, quintptr, qstring_t);
|
||||
bool persons_set_data_user_name(Persons::Private*, quintptr, const ushort* s, int len);
|
||||
void persons_sort(Persons::Private*, unsigned char column, Qt::SortOrder order = Qt::AscendingOrder);
|
||||
|
||||
int persons_row_count(const Persons::Private*, quintptr, bool);
|
||||
|
@ -140,7 +127,7 @@ QVariant Persons::userName(const QModelIndex& index) const
|
|||
bool Persons::setUserName(const QModelIndex& index, const QVariant& value)
|
||||
{
|
||||
bool set = false;
|
||||
set = persons_set_data_user_name(m_d, index.internalId(), value.value<QString>());
|
||||
const QString s = value.value<QString>(); set = persons_set_data_user_name(m_d, index.internalId(), s.utf16(), s.length());
|
||||
if (set) {
|
||||
emit dataChanged(index, index);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue