ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CBOR-XS/README
(Generate patch)

Comparing CBOR-XS/README (file contents):
Revision 1.12 by root, Sun Dec 1 17:10:42 2013 UTC vs.
Revision 1.13 by root, Sun Jan 5 14:24:54 2014 UTC

286 protocol and you need to know where the first CBOR string ends amd 286 protocol and you need to know where the first CBOR string ends amd
287 the next one starts. 287 the next one starts.
288 288
289 CBOR::XS->new->decode_prefix ("......") 289 CBOR::XS->new->decode_prefix ("......")
290 => ("...", 3) 290 => ("...", 3)
291
292 INCREMENTAL PARSING
293 In some cases, there is the need for incremental parsing of JSON texts.
294 While this module always has to keep both CBOR text and resulting Perl
295 data structure in memory at one time, it does allow you to parse a CBOR
296 stream incrementally, using a similar to using "decode_prefix" to see if
297 a full CBOR object is available, but is much more efficient.
298
299 It basically works by parsing as much of a CBOR string as possible - if
300 the CBOR data is not complete yet, the pasrer will remember where it
301 was, to be able to restart when more data has been accumulated. Once
302 enough data is available to either decode a complete CBOR value or raise
303 an error, a real decode will be attempted.
304
305 A typical use case would be a network protocol that consists of sending
306 and receiving CBOR-encoded messages. The solution that works with CBOR
307 and about anything else is by prepending a length to every CBOR value,
308 so the receiver knows how many octets to read. More compact (and
309 slightly slower) would be to just send CBOR values back-to-back, as
310 "CBOR::XS" knows where a CBOR value ends, and doesn't need an explicit
311 length.
312
313 The following methods help with this:
314
315 @decoded = $cbor->incr_parse ($buffer)
316 This method attempts to decode exactly one CBOR value from the
317 beginning of the given $buffer. The value is removed from the
318 $buffer on success. When $buffer doesn't contain a complete value
319 yet, it returns nothing. Finally, when the $buffer doesn't start
320 with something that could ever be a valid CBOR value, it raises an
321 exception, just as "decode" would. In the latter case the decoder
322 state is undefined and must be reset before being able to parse
323 further.
324
325 This method modifies the $buffer in place. When no CBOR value can be
326 decoded, the decoder stores the current string offset. On the next
327 call, continues decoding at the place where it stopped before. For
328 this to make sense, the $buffer must begin with the same octets as
329 on previous unsuccessful calls.
330
331 You can call this method in scalar context, in which case it either
332 returns a decoded value or "undef". This makes it impossible to
333 distinguish between CBOR null values (which decode to "undef") and
334 an unsuccessful decode, which is often acceptable.
335
336 @decoded = $cbor->incr_parse_multiple ($buffer)
337 Same as "incr_parse", but attempts to decode as many CBOR values as
338 possible in one go, instead of at most one. Calls to "incr_parse"
339 and "incr_parse_multiple" can be interleaved.
340
341 $cbor->incr_reset
342 Resets the incremental decoder. This throws away any saved state, so
343 that subsequent calls to "incr_parse" or "incr_parse_multiple" start
344 to parse a new CBOR value from the beginning of the $buffer again.
345
346 This method can be caled at any time, but it *must* be called if you
347 want to change your $buffer or there was a decoding error and you
348 want to reuse the $cbor object for future incremental parsings.
291 349
292MAPPING 350MAPPING
293 This section describes how CBOR::XS maps Perl values to CBOR values and 351 This section describes how CBOR::XS maps Perl values to CBOR values and
294 vice versa. These mappings are designed to "do the right thing" in most 352 vice versa. These mappings are designed to "do the right thing" in most
295 circumstances automatically, preserving round-tripping characteristics 353 circumstances automatically, preserving round-tripping characteristics

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines