summaryrefslogtreecommitdiff
path: root/upb/descriptor.h
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2011-07-15 12:05:43 -0700
committerJoshua Haberman <joshua@reverberate.org>2011-07-15 12:05:43 -0700
commit10265aa56b22ac4f04e7ba08330138e4507534e4 (patch)
treee821c85219a10b4ee3df715ab774465fdf87cf1d /upb/descriptor.h
parent6a1f3a66939308668ab8dce0d195afec16e02af9 (diff)
Directory restructure.
Includes are now via upb/foo.h. Files specific to the protobuf format are now in upb/pb (the core library is concerned with message definitions, handlers, and byte streams, but knows nothing about any particular serializationf format).
Diffstat (limited to 'upb/descriptor.h')
-rw-r--r--upb/descriptor.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/upb/descriptor.h b/upb/descriptor.h
new file mode 100644
index 0000000..4d658fb
--- /dev/null
+++ b/upb/descriptor.h
@@ -0,0 +1,67 @@
+/*
+ * upb - a minimalist implementation of protocol buffers.
+ *
+ * Copyright (c) 2011 Google Inc. See LICENSE for details.
+ * Author: Josh Haberman <jhaberman@gmail.com>
+ *
+ * Routines for building defs by parsing descriptors in descriptor.proto format.
+ * This only needs to use the public API of upb_symtab. Later we may also
+ * add routines for dumping a symtab to a descriptor.
+ */
+
+#ifndef UPB_DESCRIPTOR_H
+#define UPB_DESCRIPTOR_H
+
+#include "upb/handlers.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* upb_descreader ************************************************************/
+
+// upb_descreader reads a descriptor and puts defs in a upb_symtabtxn.
+
+// We keep a stack of all the messages scopes we are currently in, as well as
+// the top-level file scope. This is necessary to correctly qualify the
+// definitions that are contained inside. "name" tracks the name of the
+// message or package (a bare name -- not qualified by any enclosing scopes).
+typedef struct {
+ char *name;
+ // Index of the first def that is under this scope. For msgdefs, the
+ // msgdef itself is at start-1.
+ int start;
+} upb_descreader_frame;
+
+typedef struct {
+ upb_deflist defs;
+ upb_symtabtxn *txn;
+ upb_descreader_frame stack[UPB_MAX_TYPE_DEPTH];
+ int stack_len;
+ upb_status status;
+
+ uint32_t number;
+ char *name;
+ bool saw_number;
+ bool saw_name;
+
+ char *default_string;
+
+ upb_fielddef *f;
+} upb_descreader;
+
+// Creates a new descriptor builder that will add defs to the given txn.
+void upb_descreader_init(upb_descreader *r, upb_symtabtxn *txn);
+void upb_descreader_uninit(upb_descreader *r);
+
+// Registers handlers that will load descriptor data into a symtabtxn.
+// Pass the descreader as the closure. The messages will have
+// upb_msgdef_layout() called on them before adding to the txn.
+upb_mhandlers *upb_descreader_reghandlers(upb_handlers *h);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback