summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-05-27 10:22:55 -0700
committerJoshua Haberman <joshua@reverberate.org>2010-05-27 10:22:55 -0700
commit0034e6fdb82b7e0623983f44ba4fc1c98393d032 (patch)
tree032aeef1c5f1b231e8c1d763ffba5a42e23c736d
parent8c1e7170b74e1a6a29736f63507f83ddeb51f560 (diff)
Revisions to src and sink interfaces.
-rw-r--r--src/upb_srcsink.h56
1 files changed, 25 insertions, 31 deletions
diff --git a/src/upb_srcsink.h b/src/upb_srcsink.h
index 7c95059..6dd11d1 100644
--- a/src/upb_srcsink.h
+++ b/src/upb_srcsink.h
@@ -6,8 +6,8 @@
* This file defines four general-purpose interfaces for pulling/pushing either
* protobuf data or bytes:
*
- * - upb_src: pull interface for protobuf key/value pairs.
- * - upb_sink: push interface for protobuf key/value pairs.
+ * - upb_src: pull interface for protobuf data.
+ * - upb_sink: push interface for protobuf data.
* - upb_bytesrc: pull interface for bytes.
* - upb_bytesink: push interface for bytes.
*
@@ -48,6 +48,23 @@ bool upb_src_endmsg(upb_src *src);
// Returns the current error status for the stream.
upb_status *upb_src_status(upb_src *src);
+/* upb_sink *******************************************************************/
+
+// Puts the given fielddef into the stream.
+bool upb_sink_putdef(upb_sink *sink, upb_fielddef *def);
+
+// Puts the given value into the stream.
+bool upb_sink_putval(upb_sink *sink, upb_value val);
+
+// Starts a submessage. (needed? the def tells us we're starting a submsg.)
+bool upb_sink_startmsg(upb_sink *sink);
+
+// Ends a submessage.
+bool upb_sink_endmsg(upb_sink *sink);
+
+// Returns the current error status for the stream.
+upb_status *upb_sink_status(upb_sink *sink);
+
/* upb_bytesrc ****************************************************************/
// Returns the next string in the stream. The caller does not own a ref on the
@@ -62,37 +79,14 @@ bool upb_bytesrc_append(upb_bytesrc *src, upb_string *str, upb_strlen_t len);
// Returns the current error status for the stream.
upb_status *upb_bytesrc_status(upb_src *src);
-/* upb_sink callbacks *********************************************************/
+/* upb_bytesink ***************************************************************/
-// The value callback is called for a regular value (ie. not a string or
-// submessage).
-typedef upb_sink_status (*upb_value_cb)(upb_sink *s, upb_fielddef *f,
- upb_value val, upb_status *status);
-
-// The string callback is called for string data. "str" is the string in which
-// the data lives, but it may contain more data than the effective string.
-// "start" and "end" indicate the substring of "str" that is the effective
-// string. If "start" is <0, this string is a continuation of the previous
-// string for this field. If end > upb_strlen(str) then there is more data to
-// follow for this string. "end" can also be used as a hint for how much data
-// follows, but this is only a hint and is not guaranteed.
-//
-// The data is supplied this way to give you the opportunity to reference this
-// data instead of copying it (perhaps using upb_strslice), or to minimize
-// copying if it is unavoidable.
-typedef upb_sink_status (*upb_str_cb)(upb_sink *s, upb_fielddef *f,
- upb_strptr str,
- int32_t start, uint32_t end,
- upb_status *status);
-
-// The start and end callbacks are called when a submessage begins and ends,
-// respectively. The caller is responsible for ensuring that the nesting
-// level never exceeds UPB_MAX_NESTING.
-typedef upb_sink_status (*upb_start_cb)(upb_sink *s, upb_fielddef *f,
- upb_status *status);
-typedef upb_sink_status (*upb_end_cb)(upb_sink *s, upb_fielddef *f,
- upb_status *status);
+// Puts the given string. Returns the number of bytes that were actually,
+// consumed, which may be fewer than were in the string, or <0 on error.
+int32_t upb_bytesink_put(upb_bytesink *sink, upb_string *str);
+// Returns the current error status for the stream.
+upb_status *upb_bytesink_status(upb_bytesink *sink);
/* upb_sink implementation ****************************************************/
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback