summaryrefslogtreecommitdiff
path: root/src/upb_encoder.h
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-06-14 10:47:56 -0700
committerJoshua Haberman <joshua@reverberate.org>2010-06-14 10:47:56 -0700
commit35e5c248bee19703b7e3c9e43d7bd8fd7aa2a79d (patch)
tree05807171c7d4bdb42b85abf0e0e91baef2392d87 /src/upb_encoder.h
parent00b403a7373d783744bebdffde3696824d68b745 (diff)
Work to make upb_def consume a upb_src.
Diffstat (limited to 'src/upb_encoder.h')
-rw-r--r--src/upb_encoder.h49
1 files changed, 16 insertions, 33 deletions
diff --git a/src/upb_encoder.h b/src/upb_encoder.h
index b4d0c98..963af8b 100644
--- a/src/upb_encoder.h
+++ b/src/upb_encoder.h
@@ -20,27 +20,6 @@
extern "C" {
#endif
-/* upb_sizebuilder ************************************************************/
-
-// A upb_sizebuilder performs a pre-pass on data to be serialized that gathers
-// the sizes of submessages. This size data is required for serialization,
-// because we have to know at the beginning of a submessage how many encoded
-// bytes the submessage will represent.
-struct upb_sizebuilder;
-typedef struct upb_sizebuilder upb_sizebuilder;
-
-upb_sizebuilder *upb_sizebuilder_new(upb_msgdef *md);
-void upb_sizebuilder_free(upb_sizebuilder *sb);
-
-void upb_sizebuilder_reset(upb_sizebuilder *sb);
-
-// Returns a sink that must be used to perform the pre-pass. Note that the
-// pre-pass *must* occur in the opposite order from the actual encode that
-// follows, and the data *must* be identical both times (except for the
-// reversed order.
-upb_sink *upb_sizebuilder_sink(upb_sizebuilder *sb);
-
-
/* upb_encoder ****************************************************************/
// A upb_encoder is a upb_sink that emits data to a upb_bytesink in the protocol
@@ -51,21 +30,25 @@ typedef struct upb_encoder upb_encoder;
upb_encoder *upb_encoder_new(upb_msgdef *md);
void upb_encoder_free(upb_encoder *e);
-// Resets the given upb_encoder such that is is ready to begin encoding. The
-// upb_sizebuilder "sb" is used to determine submessage sizes; it must have
-// previously been initialized by feeding it the same data in reverse order.
-// "sb" may be null if and only if the data contains no submessages; groups
-// are ok and do not require sizes to be precalculated. The upb_bytesink
-// "out" is where the encoded output data will be sent.
-//
-// Both "sb" and "out" must live until the encoder is either reset or freed.
-void upb_encoder_reset(upb_encoder *e, upb_sizebuilder *sb, upb_bytesink *out);
+// Resets the given upb_encoder such that is is ready to begin encoding,
+// outputting data to "bytesink" (which must live until the encoder is
+// reset or destroyed).
+void upb_encoder_reset(upb_encoder *e, upb_bytesink *bytesink);
-// The upb_sink to which data can be sent to be encoded. Note that this data
-// must be identical to the data that was previously given to the sizebuilder
-// (if any).
+// Returns the upb_sink to which data can be written. The sink is invalidated
+// when the encoder is reset or destroyed. Note that if the client wants to
+// encode any length-delimited submessages it must first call
+// upb_encoder_buildsizes() below.
upb_sink *upb_encoder_sink(upb_encoder *e);
+// Call prior to pushing any data with embedded submessages. "src" must yield
+// exactly the same data as what will next be encoded, but in reverse order.
+// The encoder iterates over this data in order to determine the sizes of the
+// submessages. If any errors are returned by the upb_src, the status will
+// be saved in *status. If the client is sure that the upb_src will not throw
+// any errors, "status" may be NULL.
+void upb_encoder_buildsizes(upb_encoder *e, upb_src *src, upb_status *status);
+
#ifdef __cplusplus
} /* extern "C" */
#endif
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback