diff options
author | Joshua Haberman <joshua@reverberate.org> | 2009-02-28 12:15:48 -0800 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2009-02-28 12:15:48 -0800 |
commit | 5a31f694a7cd276c29645bf560160d068f76ce50 (patch) | |
tree | 98ffc71e4b31c837f318d4cbd0c623d7c981343a /pbstream.h | |
parent | e195d5379deb5699ea7cb76e4b3077a2cffa40da (diff) |
Implemented the array part of the fieldnum lookup.
Diffstat (limited to 'pbstream.h')
-rw-r--r-- | pbstream.h | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -91,11 +91,21 @@ struct pbstream_field { /* The set of fields corresponding to a message definition. */ struct pbstream_fieldset { - /* TODO: a hybrid array/hashtable structure. */ int num_fields; - struct pbstream_field fields[]; + struct pbstream_field *fields; + int array_size; + struct pbstream_field **array; + /* TODO: the hashtable part. */ }; +/* Takes an array of num_fields fields and builds an optimized table for fast + * lookup of fields by number. The input fields need not be sorted. This + * fieldset must be freed with pbstream_free_fieldset(). */ +void pbstream_init_fieldset(struct pbstream_fieldset *fieldset, + struct pbstream_field *fields, + int num_fields); +void pbstream_free_fieldset(struct pbstream_fieldset *fieldset); + struct pbstream_parse_stack_frame { struct pbstream_fieldset *fieldset; size_t end_offset; /* unknown for the top frame, so we set to SIZE_MAX */ @@ -134,7 +144,7 @@ typedef enum pbstream_status { // Encountered a "group" on the wire (deprecated and unsupported). PBSTREAM_ERROR_GROUP = -3, - // Input was nested more than 64 deep. + // Input was nested more than PBSTREAM_MAX_STACK deep. PBSTREAM_ERROR_STACK_OVERFLOW = -4, /** NONFATAL ERRORS: the input was invalid, but we can continue if desired. */ |