search
暂无数据
Feature Types API更新时间:2026-05-22 21:10:26

Feature Types API

Feature 框架的基础数据类型定义,供 Feature 开发者使用。

头文件:#include <feature_types.h>

openvela 实现说明

  • 前端无关:将各类前端(QuickJS、WAMR 等)的对象封装为统一的 ft_value_t 类型,Feature 开发者无需感知具体前端差异
  • 类型系统:通过 FeaturePrimitiveType 枚举为参数传递提供统一的类型标识,内部通过 FT_SET_PRIMITIVE_TYPE(base, flags) 宏编码类型信息与内存管理标志
  • 引用计数:TypeFlags 标记类型是否需要托管内存(TYPE_FLAGS_POINTER 需要 malloc/free,TYPE_FLAGS_VALUE 则不需要)
  • 错误码范围:通用错误码从 200 开始,自定义错误码从 400 起,开发者可自行扩展

基本类型别名

为基本 C 类型提供带 Ft 前缀的别名,便于在 Feature 接口中标识类型语义。

typedef int       FtInt;       // 等价于 int32_t
typedef int8_t    FtInt8;
typedef uint8_t   FtUint8;
typedef int16_t   FtInt16;
typedef uint16_t  FtUint16;
typedef int32_t   FtInt32;
typedef uint32_t  FtUint32;
typedef int64_t   FtInt64;
typedef uint64_t  FtUint64;
typedef float     FtFloat;
typedef double    FtDouble;
typedef bool      FtBool;
typedef const char*   FtString;  // 常量字符串
typedef ft_value_t*   FtAny;     // 通用 ft_value_t 引用

typedef int32_t   FtCallbackId;  // 回调 ID
typedef int32_t   FtEventId;     // 事件 ID
typedef int32_t   FtPromiseId;   // Promise ID

句柄类型

Feature 框架核心对象的不透明句柄,开发者只能通过框架 API 操作,不应直接访问底层结构。

typedef void* FeatureRegistryHandle;    // Feature 注册表句柄
typedef void* FeatureManagerHandle;     // Feature 管理器句柄
typedef void* FeatureProtoHandle;       // Feature 原型句柄(一个快应用对应一个)
typedef void* FeatureInstanceHandle;    // Feature 实例句柄(每次 require 产生一个)
typedef void* FeatureInterfaceHandle;   // Feature 接口句柄
typedef void* FeatureRuntimeContext;    // 前端运行时上下文(如 QuickJS RuntimeContext)
typedef void* FeatureRawContextHandle;  // 原始运行时上下文

typedef struct _FeatureWorker* FeatureWorkerHandle;  // Worker 句柄
typedef uintptr_t FeatureType;          // Feature 类型标志

回调函数类型

// 通用 Native 函数指针
typedef void (*NativeFunc)(void);

// Feature 异步任务回调
typedef void (*FeatureTaskCallback)(int status, void* data);

// Feature 异步任务回调扩展版(带 instance 句柄)
typedef void (*FeatureTaskCallbackExt)(int status, uint64_t data,
                                       FeatureInstanceHandle feature);

// 事件变更监听回调
typedef void (*FeatureEventChangeListener)(FeatureInstanceHandle data,
                                           FtEventId eid,
                                           FeatureEventStatus status);

// Manager userdata 释放回调
typedef void (*ManagerUserdataFreeCallback)(void* data);

// Feature 注册函数
typedef bool (*FeatureRegistryFunc)(FeatureRegistryHandle);

枚举类型

FeatureTaskMode

Feature 异步任务的运行模式。

enum FeatureTaskMode {
    FEATURE_TASK_MODE_FREE   = 0,  // 异步任务已结束
    FEATURE_TASK_MODE_NORMAL = 1,  // 异步任务正常运行
};

FeaturePromiseType

Promise 类型标识。Feature 框架兼容传统 callback 和 Promise 两种异步模型。

typedef enum FeaturePromiseType {
    FEATURE_PROMISE_TYPE_INVALID   = -1,  // 无效类型
    FEATURE_PROMISE_TYPE_PROMISE   = 0,   // Promise 模型
    FEATURE_PROMISE_TYPE_CALLBACKS = 1,   // Callback 模型
} FeaturePromiseType;

TypeFlags

类型的内存管理标志,用于决定是否需要释放。

enum TypeFlags {
    TYPE_FLAGS_VALUE             = 1,    // 值类型,无需释放
    TYPE_FLAGS_POINTER,                  // 指针类型,需要 malloc/free
    TYPE_FLAGS_RAWPOINTER         = TYPE_FLAGS_POINTER | 1,  // 原始指针,无需释放
    TYPE_FLAGS_UNMANAGED_POINTER  = TYPE_FLAGS_RAWPOINTER,   // 非托管指针
};

FeaturePrimitiveType

参数传递时使用的原始类型编码。通过宏 FT_SET_PRIMITIVE_TYPE(base, flags) 将类型基数与内存管理标志组合编码。

#define FT_SET_PRIMITIVE_TYPE(base, flags) ((base << 2) | (flags))

enum FeaturePrimitiveType {
    FT_VOID      = FT_SET_PRIMITIVE_TYPE(FT_VOID_BASE,    TYPE_FLAGS_VALUE),    // 1
    FT_INT       = FT_SET_PRIMITIVE_TYPE(FT_INT_BASE,     TYPE_FLAGS_VALUE),    // 5
    FT_INT8      = FT_SET_PRIMITIVE_TYPE(FT_INT8_BASE,    TYPE_FLAGS_VALUE),    // 9
    FT_UINT8     = FT_SET_PRIMITIVE_TYPE(FT_UINT8_BASE,   TYPE_FLAGS_VALUE),    // 13
    FT_INT16     = FT_SET_PRIMITIVE_TYPE(FT_INT16_BASE,   TYPE_FLAGS_VALUE),    // 17
    FT_UINT16    = FT_SET_PRIMITIVE_TYPE(FT_UINT16_BASE,  TYPE_FLAGS_VALUE),    // 21
    FT_INT32     = FT_SET_PRIMITIVE_TYPE(FT_INT32_BASE,   TYPE_FLAGS_VALUE),    // 25
    FT_UINT32    = FT_SET_PRIMITIVE_TYPE(FT_UINT32_BASE,  TYPE_FLAGS_VALUE),    // 29
    FT_INT64     = FT_SET_PRIMITIVE_TYPE(FT_INT64_BASE,   TYPE_FLAGS_VALUE),    // 33
    FT_UINT64    = FT_SET_PRIMITIVE_TYPE(FT_UINT64_BASE,  TYPE_FLAGS_VALUE),    // 37
    FT_FLOAT     = FT_SET_PRIMITIVE_TYPE(FT_FLOAT_BASE,   TYPE_FLAGS_VALUE),    // 41
    FT_DOUBLE    = FT_SET_PRIMITIVE_TYPE(FT_DOUBLE_BASE,  TYPE_FLAGS_VALUE),    // 45
    FT_BOOLEAN   = FT_SET_PRIMITIVE_TYPE(FT_BOOLEAN_BASE, TYPE_FLAGS_VALUE),    // 49
    FT_STRING    = FT_SET_PRIMITIVE_TYPE(FT_STRING_BASE,  TYPE_FLAGS_POINTER),  // 54
    FT_CHAR      = FT_STRING,                                                   // 54,与 FT_STRING 等价
    FT_ANY_REF   = FT_SET_PRIMITIVE_TYPE(FT_ANY_REF_BASE,  TYPE_FLAGS_POINTER), // 58
    FT_JSON_OBJ  = FT_SET_PRIMITIVE_TYPE(FT_JSON_OBJ_BASE, TYPE_FLAGS_POINTER), // 62
};

FeatureErrorCode

Feature 框架的错误码定义。

typedef enum FeatureErrorCode {
    FT_ERR_GENERAL           = 200,   // 通用错误
    FT_ERR_ARGS              = 202,   // 参数错误
    FT_ERR_TIMEOUT           = 204,   // 超时
    FT_ERR_IOERROR           = 300,   // IO 错误
    FT_ERR_PATH_NOT_EXISTS   = 301,   // 路径不存在
    FT_ERR_CUSTOM_BEGIN      = 400,   // 自定义错误码起点
    FT_ERR_TASK_FAILED       = 1000,  // 任务失败
    FT_ERR_TASK_NOT_EXISTS   = 1001,  // 任务不存在
    FT_ERR_CANCEL_ERROR_CODE = 1002,  // 取消错误
} FeatureErrorCode;

FeatureEventStatus

事件变更状态,用于通知监听器事件被添加或移除。

typedef enum FeatureEventStatus {
    FEATURE_EVENT_ADDED,    // 事件被添加
    FEATURE_EVENT_REMOVED,  // 事件被移除
} FeatureEventStatus;

FeaturePermsRejectReason

权限拒绝原因。

typedef enum FeaturePermsRejectReason {
    FEATURE_PERMS_DENIED = 400,  // 权限被拒绝
    FEATURE_PERMS_ERROR,         // 权限错误
    FEATURE_PERMS_NO_BG,         // 权限不允许后台
} FeaturePermsRejectReason;

FeatureWorkerCancelResult

Worker 取消结果。

enum FeatureWorkerCancelResult {
    FeatureWorkerCancelSuccess,       // 成功取消
    FeatureWorkerCancelPending,       // 任务处于 pending,未能取消
    FeatureWorkerCancelInvalid,       // Worker 无效
    FeatureWorkerCancelUnknownError,  // 未知错误
};

FeatureWorkerState

Worker 运行状态。

enum FeatureWorkerState {
    FEATURE_WORKER_PENDING,    // 等待中
    FEATURE_WORKER_RUNNING,    // 运行中
    FEATURE_WORKER_INVALID,    // 无效状态
    FEATURE_WORKER_RESOLVED,   // 已 resolve
    FEATURE_WORKER_REJECTED,   // 已 reject
    FEATURE_WORKER_FINISHED,   // 已完成
};

FeatureManagerType

Feature 管理器类型。

typedef enum FeatureManagerType {
    FEATURE_MANAGER_JS,    // JS 类型 Feature 管理器
    FEATURE_MANAGER_WAMR,  // WAMR 类型 Feature 管理器
} FeatureManagerType;

结构体

FtArray

Feature 框架通用动态数组结构。

typedef struct FtArray {
    int32_t _size;       // 当前数组实际元素数
    int32_t _capacity;   // 当前容量
    void*   _element;    // 元素指针
} FtArray;

FtJsonObject

JSON 对象句柄,内部为柔性字符串。

typedef struct _FtJsonObject {
    char str[0];  // 内部字符串数据
} *FtJsonObject;

AppendData

用于向数组追加元素的通用联合体,支持多种基本类型。

typedef union AppendData {
    int32_t     i32;  // 32 位有符号整数
    int64_t     i64;  // 64 位有符号整数
    uint32_t    u32;  // 32 位无符号整数
    uint64_t    u64;  // 64 位无符号整数
    float       f32;  // 单精度浮点
    double      f64;  // 双精度浮点
    void*       ptr;  // 任意指针
    const char* str;  // 字符串
} AppendData;

FtVariParams

可变长参数包。

typedef struct FtVariParams {
    int32_t     vari_count;  // 参数数量
    ft_value_t* vari_args;   // 参数数组指针
} FtVariParams;

FeatureWorkerResult

Worker 的执行结果联合体。

typedef union _FeatureWorkerResult {
    int64_t  ival;   // 有符号整数结果
    uint64_t uval;   // 无符号整数结果
    double   dval;   // 浮点结果
    char*    str;    // 字符串结果
    void*    ptr;    // 指针结果
} FeatureWorkerResult;

VTable

Feature 接口创建时使用的虚函数表。

typedef struct VTable {
    int               size;       // 成员数量
    NativeFunc        finalizer;  // 析构函数
    const NativeFunc* members;    // 成员函数数组
} VTable;

FeatureManagerCreateInfo

创建 Feature 管理器时所需的配置信息。

typedef struct FeatureManagerCreateInfo {
    FeatureRawContextHandle raw_ctx;       // 原始上下文句柄
    ReleaseRawContextCb     release_cb;    // 原始上下文释放回调
    FeatureManagerType      manager_type;  // 管理器类型(JS / WAMR)
    const char*             package_name;  // 快应用包名
} FeatureManagerCreateInfo;

FeatureMemoryDump

内存诊断回调结构,用于在调试时统计内存使用情况。

typedef struct {
    MemoryDumpCountCB     count;       // 单项内存计数回调
    MemoryDumpCountMetaCB count_meta;  // 带名称的元数据计数回调
    MemoryDumpSubCB       sub;         // 递归子项回调
} FeatureMemoryDump;

ArgsErrorInfo

参数错误信息。当 Feature 调用参数类型不匹配时,通过 ArgsErrorCb 回调传递此信息。

typedef struct {
    int         argc;        // 参数个数
    void*       argv;        // 参数列表指针
    int         error_code;  // 错误码
    const char* error_msg;   // 错误消息
} ArgsErrorInfo;

FeaturePermissionsInfo

权限检查信息。

typedef struct FeaturePermissionsInfo {
    const FeaturePermissions* permissions;   // 权限描述
    const char*               api_name;      // API 名称
    bool                      has_async_cbs; // 是否带异步回调
} FeaturePermissionsInfo;

FeatureRegistryTable

Feature 注册表,用于批量注册多个 Feature。

typedef struct _FeatureRegistryTable {
    size_t              count;    // 条目数
    FeatureRegistryFunc data[];   // 注册函数数组(柔性成员)
} FeatureRegistryTable, *FeatureRegistryTableHandle;

文档内容是否有帮助?
有帮助
无帮助