From 0034e6fdb82b7e0623983f44ba4fc1c98393d032 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Thu, 27 May 2010 10:22:55 -0700 Subject: Revisions to src and sink interfaces. --- src/upb_srcsink.h | 56 +++++++++++++++++++++++++------------------------------ 1 file 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 ****************************************************/ -- cgit v1.2.3