From fbc57ee4882eca6321f8e1f2f5a3b8fae448605b Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Mon, 7 Jun 2010 17:27:54 -0700 Subject: More work on the decoder. --- src/upb_decoder.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/upb_decoder.h') diff --git a/src/upb_decoder.h b/src/upb_decoder.h index ea20d3d..d40d9fc 100644 --- a/src/upb_decoder.h +++ b/src/upb_decoder.h @@ -1,15 +1,16 @@ /* * upb - a minimalist implementation of protocol buffers. * - * upb_decoder implements a high performance, callback-based, stream-oriented - * decoder (comparable to the SAX model in XML parsers). For parsing protobufs - * into in-memory messages (a more DOM-like model), see the routines in - * upb_msg.h, which are layered on top of this decoder. + * upb_decoder implements a high performance, streaming decoder for protobuf + * data that works by implementing upb_src and getting its data from a + * upb_bytesrc. * - * TODO: the decoder currently does not support returning unknown values. This - * can easily be added when it is needed. + * The decoder does not currently support non-blocking I/O, in the sense that + * if the bytesrc returns UPB_STATUS_TRYAGAIN it is not possible to resume the + * decoder when data becomes available again. Support for this could be added, + * but it would add complexity and perhaps cost efficiency also. * - * Copyright (c) 2009 Joshua Haberman. See LICENSE for details. + * Copyright (c) 2009-2010 Joshua Haberman. See LICENSE for details. */ #ifndef UPB_DECODER_H_ @@ -17,8 +18,8 @@ #include #include -#include "upb.h" -#include "descriptor.h" +#include "upb_def.h" +#include "upb_srcsink.h" #ifdef __cplusplus extern "C" { @@ -33,17 +34,17 @@ typedef struct upb_decoder upb_decoder; // Allocates and frees a upb_decoder, respectively. upb_decoder *upb_decoder_new(upb_msgdef *md); -void upb_decoder_free(upb_decoder *p); +void upb_decoder_free(upb_decoder *d); // Resets the internal state of an already-allocated decoder. This puts it in a // state where it has not seen any data, and expects the next data to be from // the beginning of a new protobuf. Parsers must be reset before they can be // used. A decoder can be reset multiple times. -void upb_decoder_reset(upb_decoder *p, upb_bytesrc *bytesrc); +void upb_decoder_reset(upb_decoder *d, upb_bytesrc *bytesrc); // Returns a upb_src pointer by which the decoder can be used. The returned -// upb_src is invalidated by upb_decoder_reset(). -upb_src *upb_decoder_getsrc(upb_decoder *p); +// upb_src is invalidated by upb_decoder_reset() or upb_decoder_free(). +upb_src *upb_decoder_getsrc(upb_decoder *d); #ifdef __cplusplus } /* extern "C" */ -- cgit v1.2.3