Files
Viper_VRTE/vqt6/_bridge.h
T
TermiNexus 728d090815 feat(vqt6/vipermath/vipersimd/w32/requests): 自绘 Canvas/Graph3D/ChartView 与 Qt6 Charts、新增 gzip 与 torch-lite 模块, 修包装类悬垂指针与中文路径/exp/大文件下载
- 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
2026-09-10 23:09:05 +08:00

168 lines
7.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// 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