You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.7 KiB
124 lines
4.7 KiB
|
2 weeks ago
|
/******************************************************************************
|
||
|
|
|
||
|
|
版权所有 (C), 2018-2099, Radkil
|
||
|
|
|
||
|
|
******************************************************************************
|
||
|
|
文 件 名 : pb_lua_desc.h
|
||
|
|
功能描述 : pb_lua 消息描述符类型 + X-macro。
|
||
|
|
由 pb_lua.c 与生成的 pb_lua_registry.c 共享。
|
||
|
|
字段表内容随 Type_FIELDLIST 自动; 消息注册由生成器维护。
|
||
|
|
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
#ifndef __PB_LUA_DESC_H__
|
||
|
|
#define __PB_LUA_DESC_H__
|
||
|
|
|
||
|
|
#include <stddef.h>
|
||
|
|
#include <stdint.h>
|
||
|
|
#include <stdbool.h>
|
||
|
|
#include "pb.h"
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
PB_LUA_T_BOOL = 0,
|
||
|
|
PB_LUA_T_INT32,
|
||
|
|
PB_LUA_T_INT64,
|
||
|
|
PB_LUA_T_DOUBLE,
|
||
|
|
PB_LUA_T_STRING,
|
||
|
|
PB_LUA_T_MESSAGE,
|
||
|
|
PB_LUA_T_UNSUPPORTED
|
||
|
|
} pb_lua_ftype_t;
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
const char *name;
|
||
|
|
uint8_t tag;
|
||
|
|
uint8_t ltype; /* pb_lua_ftype_t */
|
||
|
|
uint16_t offset;
|
||
|
|
int16_t has_offset; /* -1 = 无 has_ */
|
||
|
|
uint16_t size;
|
||
|
|
const void *aux; /* MESSAGE→pb_lua_msg_t*; 否则 NULL */
|
||
|
|
} pb_lua_field_t;
|
||
|
|
|
||
|
|
typedef struct pb_lua_msg {
|
||
|
|
const char *name;
|
||
|
|
const pb_msgdesc_t *msg;
|
||
|
|
size_t c_size;
|
||
|
|
size_t max_encoded;
|
||
|
|
const pb_lua_field_t *fields;
|
||
|
|
size_t nfields;
|
||
|
|
} pb_lua_msg_t;
|
||
|
|
|
||
|
|
/*── X-macro: 由 Type_FIELDLIST 生成字段表 ────────────────────── */
|
||
|
|
|
||
|
|
#define PB_LUA_MSGREF_(type) (&type##_lua_desc)
|
||
|
|
#define PB_LUA_MSGREF(type) PB_LUA_MSGREF_(type)
|
||
|
|
|
||
|
|
#define PB_LUA_HAS_OPTIONAL(a, f) ((int16_t)offsetof(a, has_##f))
|
||
|
|
#define PB_LUA_HAS_REQUIRED(a, f) ((int16_t)-1)
|
||
|
|
#define PB_LUA_HAS_SINGULAR(a, f) ((int16_t)-1)
|
||
|
|
#define PB_LUA_HAS_REPEATED(a, f) ((int16_t)-1)
|
||
|
|
|
||
|
|
#define PB_LUA_AUX_NULL(a, f) NULL
|
||
|
|
#define PB_LUA_AUX_MESSAGE(a, f) PB_LUA_MSGREF(a##_##f##_MSGTYPE)
|
||
|
|
#define PB_LUA_AUX_MSG_W_CB(a, f) PB_LUA_AUX_MESSAGE(a, f)
|
||
|
|
#define PB_LUA_AUX_ENUM(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_UENUM(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_BOOL(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_INT32(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_INT64(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_DOUBLE(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_FLOAT(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_STRING(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_BYTES(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_UINT32(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_UINT64(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_SINT32(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_SINT64(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_FIXED32(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_FIXED64(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_SFIXED32(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_SFIXED64(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_EXTENSION(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
#define PB_LUA_AUX_FIXED_LENGTH_BYTES(a, f) PB_LUA_AUX_NULL(a, f)
|
||
|
|
|
||
|
|
#define PB_LUA_FT_BOOL PB_LUA_T_BOOL
|
||
|
|
#define PB_LUA_FT_INT32 PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_INT64 PB_LUA_T_INT64
|
||
|
|
#define PB_LUA_FT_DOUBLE PB_LUA_T_DOUBLE
|
||
|
|
#define PB_LUA_FT_FLOAT PB_LUA_T_DOUBLE
|
||
|
|
#define PB_LUA_FT_ENUM PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_UENUM PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_STRING PB_LUA_T_STRING
|
||
|
|
#define PB_LUA_FT_MESSAGE PB_LUA_T_MESSAGE
|
||
|
|
#define PB_LUA_FT_MSG_W_CB PB_LUA_T_MESSAGE
|
||
|
|
#define PB_LUA_FT_BYTES PB_LUA_T_UNSUPPORTED
|
||
|
|
#define PB_LUA_FT_UINT32 PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_UINT64 PB_LUA_T_INT64
|
||
|
|
#define PB_LUA_FT_SINT32 PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_SINT64 PB_LUA_T_INT64
|
||
|
|
#define PB_LUA_FT_FIXED32 PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_FIXED64 PB_LUA_T_INT64
|
||
|
|
#define PB_LUA_FT_SFIXED32 PB_LUA_T_INT32
|
||
|
|
#define PB_LUA_FT_SFIXED64 PB_LUA_T_INT64
|
||
|
|
#define PB_LUA_FT_EXTENSION PB_LUA_T_UNSUPPORTED
|
||
|
|
#define PB_LUA_FT_FIXED_LENGTH_BYTES PB_LUA_T_UNSUPPORTED
|
||
|
|
|
||
|
|
#define PB_LUA_EMIT(a, atype, htype, ltype, name, tag) \
|
||
|
|
{ #name, (uint8_t)(tag), (uint8_t)PB_LUA_FT_##ltype, \
|
||
|
|
(uint16_t)offsetof(a, name), \
|
||
|
|
PB_LUA_HAS_##htype(a, name), \
|
||
|
|
(uint16_t)sizeof(((a *)0)->name), \
|
||
|
|
PB_LUA_AUX_##ltype(a, name) },
|
||
|
|
|
||
|
|
#define PB_LUA_FIELDS(Struct) Struct##_FIELDLIST(PB_LUA_EMIT, Struct)
|
||
|
|
|
||
|
|
#define PB_LUA_MSGDESC(Struct, StructName, MaxEnc) \
|
||
|
|
{ StructName, &Struct##_msg, sizeof(Struct), (MaxEnc), \
|
||
|
|
Struct##_fields_lua, \
|
||
|
|
sizeof(Struct##_fields_lua) / sizeof(Struct##_fields_lua[0]) }
|
||
|
|
|
||
|
|
/* ── 全局注册表(生成的 pb_lua_registry.c 强符号定义) ─────────── */
|
||
|
|
extern const pb_lua_msg_t *const g_pb_msgs[];
|
||
|
|
extern const int g_pb_msgs_count;
|
||
|
|
|
||
|
|
#endif /* __PB_LUA_DESC_H__ */
|