diff options
Diffstat (limited to 'src/upb.h')
-rw-r--r-- | src/upb.h | 34 |
1 files changed, 4 insertions, 30 deletions
@@ -134,39 +134,13 @@ typedef upb_atomic_refcount_t upb_data; typedef uint32_t upb_strlen_t; -// We have several different representations for string, depending on whether -// it has a refcount (and likely in the future, depending on whether it is a -// slice of another string). We could just have one representation with -// members that are sometimes unused, but this is wasteful in memory. The -// flags that are always part of the first word tell us which representation -// to use. -// -// In a way, this is like inheritance but instead of using a virtual pointer, -// we do switch/case in every "virtual" method. This may sound expensive but -// in many cases the different cases compile to exactly the same code, so there -// is no branch. - -typedef struct { - uint32_t byte_size_and_flags; - upb_strlen_t byte_len; - // We expect the data to be 8-bit clean (uint8_t), but char* is such an - // ingrained convention that we follow it. - char *ptr; -} upb_norefcount_string; - -// Used for a string with a refcount. -typedef struct { - upb_data base; - upb_strlen_t byte_len; - char *ptr; - uint32_t byte_size; -} upb_refcounted_string; - +struct upb_norefcount_string; +struct upb_refcounted_string; typedef union { // Must be first, for the UPB_STATIC_STRING_PTR_INIT() macro. - upb_norefcount_string *norefcount; + struct upb_norefcount_string *norefcount; + struct upb_refcounted_string *refcounted; upb_data *base; - upb_refcounted_string *refcounted; } upb_strptr; // A single .proto value. The owner must have an out-of-band way of knowing |