Core compiles, though with warnings, and is still incomplete.

pull/13171/head
Joshua Haberman 15 years ago
parent f49f7f94c1
commit 602e093504
  1. 528
      descriptor/descriptor.c
  2. 3
      src/upb_data.h
  3. 8
      src/upb_table.c

File diff suppressed because it is too large Load Diff

@ -190,8 +190,8 @@ typedef struct {
} upb_refcounted_string; } upb_refcounted_string;
typedef union { typedef union {
upb_string_common common;
upb_norefcount_string norefcount; upb_norefcount_string norefcount;
upb_string_common common;
upb_refcounted_string refcounted; upb_refcounted_string refcounted;
} upb_string; } upb_string;
@ -303,6 +303,7 @@ upb_string *upb_strreadfile(const char *filename);
// Initialize with the given macro, which must resolve to a const char*. You // Initialize with the given macro, which must resolve to a const char*. You
// must not dynamically allocate this type. // must not dynamically allocate this type.
typedef upb_string upb_static_string; typedef upb_string upb_static_string;
#define UPB_STRLIT_LEN(str, len) {0 | UPB_DATA_FROZEN, len, str}
#define UPB_STRLIT(str) {{{0 | UPB_DATA_FROZEN}, sizeof(str), str}} #define UPB_STRLIT(str) {{{0 | UPB_DATA_FROZEN}, sizeof(str), str}}
// Allows using upb_strings in printf, ie: // Allows using upb_strings in printf, ie:

@ -50,19 +50,19 @@ void upb_inttable_free(struct upb_inttable *t) { upb_table_free(&t->t); }
void upb_strtable_free(struct upb_strtable *t) { void upb_strtable_free(struct upb_strtable *t) {
// Free refs from the strtable. // Free refs from the strtable.
struct upb_strtable_entry *e = upb_strtable_begin(t); struct upb_strtable_entry *e = upb_strtable_begin(t);
for(; e; e = upb_strtable_next(&m->ntof, e)) { for(; e; e = upb_strtable_next(t, e)) {
upb_string_unref(e->key); upb_string_unref(e->key);
} }
upb_table_free(&t->t); upb_table_free(&t->t);
} }
static uint32_t strtable_bucket(struct upb_strtable *t, struct upb_string *key) static uint32_t strtable_bucket(struct upb_strtable *t, upb_string *key)
{ {
uint32_t hash = MurmurHash2(key->ptr, key->byte_len, 0); uint32_t hash = MurmurHash2(upb_string_getrobuf(key), upb_strlen(key), 0);
return (hash & (upb_strtable_size(t)-1)) + 1; return (hash & (upb_strtable_size(t)-1)) + 1;
} }
void *upb_strtable_lookup(struct upb_strtable *t, struct upb_string *key) void *upb_strtable_lookup(struct upb_strtable *t, upb_string *key)
{ {
uint32_t bucket = strtable_bucket(t, key); uint32_t bucket = strtable_bucket(t, key);
struct upb_strtable_entry *e; struct upb_strtable_entry *e;

Loading…
Cancel
Save