- vqt6: 包装类统一补 __new__ 堆分配, 修"创建函数栈帧 alloca"被存进字段/跨帧返回后 _ptr 悬垂(传给 QLayout::addWidget 等即崩溃); 菜单类按依赖顺序前移, menuBar()/statusBar() 改返回裸指针; 接入 Qt6 Charts 并新增 _bridge_canvas(Canvas 手绘板 / Graph3D 软件 3D 网络图 / ChartView 折线图); 新增自绘 QRadioButton(圆环+内点, 过渡动画)、剪贴板、应用级字体族 API - 新增模块: gzip.vp(RFC1952/1951 解码器)、torch/(torch-lite 稠密张量 + conv/pool 前反向) - vipersimd: 新增 scalar_fma/add/mul/sqrt_array 未向量化对照内核(与对应 SIMD 版逐位一致) - w32: 新增 UTF-8/UTF-16 路径转换, CreateFile/CreateDirectory 走 W 系列, 修中文路径被按 GBK 误读; read_all 参数 max_count -> buf_size 并文档化"容量含终止符"契约 - requests: https 响应缓冲按需翻倍扩容(上限 256MB), 修 MB 级正文(如 MNIST .gz)被 4KB 静默截断 - vipermath: 重写 exp 为范围归约 + 短泰勒, 修负值发散(x=-30 得 3.7e10)与 NaN 触发 2^31 次缩放导致的卡死 - builtins: 新增 sizet/uzt 别名; stdarg: va_arg 参数 CType -> CPtr - chore: 删除 vendored jpeg change.log
168 lines
7.4 KiB
C
168 lines
7.4 KiB
C
// ============================================================
|
||
// vqt6/_bridge.h — C 桥接层头文件
|
||
//
|
||
// 作用: 把 Qt6 C++ API 包装成 extern "C" 函数,供 Viper FFI 调用
|
||
// 编译: 作为静态库 libvqt6_bridge.a 或动态库 vqt6_bridge.dll
|
||
// ============================================================
|
||
|
||
#ifndef VQT6_BRIDGE_H
|
||
#define VQT6_BRIDGE_H
|
||
|
||
#include <stddef.h>
|
||
#include <stdint.h>
|
||
|
||
#if defined(_WIN32)
|
||
# if defined(VQT6_BRIDGE_STATIC)
|
||
# define VQT6_API
|
||
# elif defined(VQT6_BRIDGE_BUILD)
|
||
# define VQT6_API __declspec(dllexport)
|
||
# else
|
||
# define VQT6_API __declspec(dllimport)
|
||
# endif
|
||
#else
|
||
# if defined(__GNUC__) && (__GNUC__ >= 4)
|
||
# define VQT6_API __attribute__((visibility("default")))
|
||
# else
|
||
# define VQT6_API
|
||
# endif
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
// ============================================================
|
||
// QString
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qstring_create(const char* utf8);
|
||
VQT6_API size_t vqt6_qstring_to_utf8(void* qstr, char* buf, size_t buf_size);
|
||
VQT6_API void vqt6_qstring_free(void* qstr);
|
||
VQT6_API int vqt6_qstring_length(void* qstr);
|
||
VQT6_API int vqt6_qstring_is_empty(void* qstr);
|
||
VQT6_API int vqt6_qstring_equals(void* qstr, void* other);
|
||
VQT6_API void* vqt6_qstring_append(void* qstr, void* other);
|
||
VQT6_API void vqt6_asset_url_utf8(char* buf, int buf_size, const char* name);
|
||
|
||
// ============================================================
|
||
// QByteArray
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qbytearray_create(const void* data, size_t size);
|
||
VQT6_API void* vqt6_qbytearray_data(void* qba, size_t* out_size);
|
||
VQT6_API size_t vqt6_qbytearray_size(void* qba);
|
||
VQT6_API void vqt6_qbytearray_free(void* qba);
|
||
|
||
// ============================================================
|
||
// QObject
|
||
// ============================================================
|
||
VQT6_API void vqt6_qobject_delete(void* obj);
|
||
VQT6_API void vqt6_qobject_delete_later(void* obj);
|
||
VQT6_API void vqt6_qobject_set_object_name(void* obj, void* name);
|
||
VQT6_API void* vqt6_qobject_object_name(void* obj);
|
||
VQT6_API void vqt6_qobject_set_parent(void* child, void* parent);
|
||
VQT6_API void* vqt6_qobject_parent(void* obj);
|
||
VQT6_API int vqt6_qobject_connect(void* sender, const char* signal_name,
|
||
void* receiver, const char* slot_name);
|
||
VQT6_API int vqt6_qobject_disconnect(void* sender, const char* signal_name,
|
||
void* receiver, const char* slot_name);
|
||
VQT6_API void vqt6_qobject_install_event_filter(void* watched, void* filter);
|
||
VQT6_API void vqt6_qobject_remove_event_filter(void* watched, void* filter);
|
||
|
||
// ============================================================
|
||
// QCoreApplication
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qcoreapp_create(const char* app_name);
|
||
VQT6_API void* vqt6_qcoreapp_instance(void);
|
||
VQT6_API int vqt6_qcoreapp_exec(void* app);
|
||
VQT6_API void vqt6_qcoreapp_quit(void* app, int exit_code);
|
||
VQT6_API void vqt6_qcoreapp_exit(void* app, int exit_code);
|
||
VQT6_API void vqt6_qcoreapp_process_events(void* app, int flags);
|
||
VQT6_API void vqt6_qcoreapp_post_event(void* receiver, void* event);
|
||
VQT6_API int vqt6_qcoreapp_send_event(void* receiver, void* event);
|
||
VQT6_API void* vqt6_qcoreapp_organization_name(void* app);
|
||
VQT6_API void vqt6_qcoreapp_set_organization_name(void* app, void* name);
|
||
VQT6_API void* vqt6_qcoreapp_application_name(void* app);
|
||
VQT6_API void vqt6_qcoreapp_set_application_name(void* app, void* name);
|
||
|
||
// ============================================================
|
||
// QTimer
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qtimer_create(void);
|
||
VQT6_API void* vqt6_qtimer_create_with_parent(void* parent);
|
||
VQT6_API void vqt6_qtimer_start(void* timer, int interval_ms);
|
||
VQT6_API void vqt6_qtimer_stop(void* timer);
|
||
VQT6_API void vqt6_qtimer_set_interval(void* timer, int interval_ms);
|
||
VQT6_API int vqt6_qtimer_interval(void* timer);
|
||
VQT6_API int vqt6_qtimer_is_active(void* timer);
|
||
VQT6_API void vqt6_qtimer_set_single_shot(void* timer, int single_shot);
|
||
VQT6_API int vqt6_qtimer_is_single_shot(void* timer);
|
||
|
||
// ============================================================
|
||
// QVariant
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qvariant_create_int(int value);
|
||
VQT6_API void* vqt6_qvariant_create_double(double value);
|
||
VQT6_API void* vqt6_qvariant_create_bool(int value);
|
||
VQT6_API void* vqt6_qvariant_create_string(void* s);
|
||
VQT6_API int vqt6_qvariant_to_int(void* v, int* ok);
|
||
VQT6_API double vqt6_qvariant_to_double(void* v, int* ok);
|
||
VQT6_API int vqt6_qvariant_to_bool(void* v, int* ok);
|
||
VQT6_API void* vqt6_qvariant_to_string(void* v);
|
||
VQT6_API int vqt6_qvariant_type_id(void* v);
|
||
VQT6_API int vqt6_qvariant_is_valid(void* v);
|
||
VQT6_API void vqt6_qvariant_free(void* v);
|
||
|
||
// ============================================================
|
||
// QEvent
|
||
// ============================================================
|
||
VQT6_API int vqt6_qevent_type(void* event);
|
||
VQT6_API void vqt6_qevent_accept(void* event);
|
||
VQT6_API void vqt6_qevent_ignore(void* event);
|
||
VQT6_API int vqt6_qevent_is_accepted(void* event);
|
||
|
||
// ============================================================
|
||
// QStringList
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qstringlist_create(void);
|
||
VQT6_API void vqt6_qstringlist_append(void* list, void* str);
|
||
VQT6_API int vqt6_qstringlist_size(void* list);
|
||
VQT6_API void* vqt6_qstringlist_at(void* list, int index);
|
||
VQT6_API void vqt6_qstringlist_free(void* list);
|
||
|
||
// ============================================================
|
||
// QByteArrayList
|
||
// ============================================================
|
||
VQT6_API void* vqt6_qbytearraylist_create(void);
|
||
VQT6_API void vqt6_qbytearraylist_append(void* list, void* qba);
|
||
VQT6_API int vqt6_qbytearraylist_size(void* list);
|
||
VQT6_API void* vqt6_qbytearraylist_at(void* list, int index);
|
||
VQT6_API void vqt6_qbytearraylist_free(void* list);
|
||
|
||
// ============================================================
|
||
// 全局回调注册表
|
||
// ============================================================
|
||
typedef void (*vqt6_slot_callback_t)(int slot_id, void* user_data);
|
||
VQT6_API void vqt6_register_slot(int slot_id, void* user_data);
|
||
VQT6_API void vqt6_unregister_slot(int slot_id);
|
||
VQT6_API void vqt6_trigger_slot(int slot_id);
|
||
// 分配新 slot_id 并注册回调(信号→回调桥梁,Qt 信号触发时调用 cb(slot_id, user_data))
|
||
VQT6_API int vqt6_signal_register(vqt6_slot_callback_t cb, void* user_data);
|
||
VQT6_API void vqt6_signal_unregister(int slot_id);
|
||
|
||
// ============================================================
|
||
// 信号连接(QTimer → timeout)
|
||
// ============================================================
|
||
VQT6_API void vqt6_qtimer_connect_timeout(void* timer, vqt6_slot_callback_t cb, void* user_data);
|
||
|
||
// ============================================================
|
||
// 剪贴板(复制链接等)
|
||
// ============================================================
|
||
VQT6_API void vqt6_clipboard_set_text_utf8(const char* utf8);
|
||
// 读取剪贴板文本到 buf(UTF-8); 返回写入字节数(不含结尾 NUL)
|
||
VQT6_API int vqt6_clipboard_text_utf8(char* buf, int buf_size);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif // VQT6_BRIDGE_H
|