summaryrefslogtreecommitdiff
path: root/src/upb.h
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-01-02 22:08:25 -0800
committerJoshua Haberman <joshua@reverberate.org>2010-01-02 22:08:25 -0800
commit15604083c7323a1bcd7a591a6025aca98bd57fd2 (patch)
treeb96ec5e115fd0edd297f6c7f0de20d767e95729f /src/upb.h
parentfa5710f1cad50ddd17605c73d4661acbf265a469 (diff)
Move string representations back upb.h -> upb_data.h.
Diffstat (limited to 'src/upb.h')
-rw-r--r--src/upb.h34
1 files changed, 4 insertions, 30 deletions
diff --git a/src/upb.h b/src/upb.h
index ecd5637..2809418 100644
--- a/src/upb.h
+++ b/src/upb.h
@@ -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
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback