diff options
Diffstat (limited to 'upb')
-rw-r--r-- | upb/port_def.inc | 18 | ||||
-rw-r--r-- | upb/port_undef.inc | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/upb/port_def.inc b/upb/port_def.inc new file mode 100644 index 0000000..33ff78c --- /dev/null +++ b/upb/port_def.inc @@ -0,0 +1,18 @@ + +#if UINTPTR_MAX == 0xffffffff +#define UPB_SIZE(size32, size64) size32 +#else +#define UPB_SIZE(size32, size64) size64 +#endif + +#define UPB_FIELD_AT(msg, fieldtype, offset) \ + *(fieldtype*)((const char*)(msg) + offset) + +#define UPB_READ_ONEOF(msg, fieldtype, offset, case_offset, case_val, default) \ + UPB_FIELD_AT(msg, int, case_offset) == case_val \ + ? UPB_FIELD_AT(msg, fieldtype, offset) \ + : default + +#define UPB_WRITE_ONEOF(msg, fieldtype, offset, value, case_offset, case_val) \ + UPB_FIELD_AT(msg, int, case_offset) = case_val; \ + UPB_FIELD_AT(msg, fieldtype, offset) = value; diff --git a/upb/port_undef.inc b/upb/port_undef.inc new file mode 100644 index 0000000..7db97ca --- /dev/null +++ b/upb/port_undef.inc @@ -0,0 +1,5 @@ + +#undef UPB_SIZE +#undef UPB_FIELD_AT +#undef UPB_READ_ONEOF +#undef UPB_WRITE_ONEOF |