summaryrefslogtreecommitdiff
path: root/pbstream.h
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2009-02-28 12:15:48 -0800
committerJoshua Haberman <joshua@reverberate.org>2009-02-28 12:15:48 -0800
commit5a31f694a7cd276c29645bf560160d068f76ce50 (patch)
tree98ffc71e4b31c837f318d4cbd0c623d7c981343a /pbstream.h
parente195d5379deb5699ea7cb76e4b3077a2cffa40da (diff)
Implemented the array part of the fieldnum lookup.
Diffstat (limited to 'pbstream.h')
-rw-r--r--pbstream.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/pbstream.h b/pbstream.h
index b8befc6..cd6fe3a 100644
--- a/pbstream.h
+++ b/pbstream.h
@@ -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. */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback