1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format 2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc. All rights reserved. 3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/ 4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without 6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are 7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met: 8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Redistributions of source code must retain the above copyright 10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer. 11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Redistributions in binary form must reproduce the above 12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer 13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the 14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution. 15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// * Neither the name of Google Inc. nor the names of its 16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from 17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission. 18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// 19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @fileoverview This file contains utilities for converting binary, 33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * wire-format protocol buffers into Javascript data structures. 34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * jspb's BinaryReader class wraps the BinaryDecoder class to add methods 36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * that understand the protocol buffer syntax and can do the type checking and 37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * bookkeeping necessary to parse trees of nested messages. 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Major caveat - Users of this library _must_ keep their Javascript proto 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * parsing code in sync with the original .proto file - presumably you'll be 41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * using the typed jspb code generator, but if you bypass that you'll need 42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to keep things in sync by hand. 43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @author aappleby@google.com (Austin Appleby) 45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.provide('jspb.BinaryReader'); 48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('goog.asserts'); 50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.BinaryConstants'); 51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.BinaryDecoder'); 52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * BinaryReader implements the decoders for all the wire types specified in 57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * https://developers.google.com/protocol-buffers/docs/encoding. 58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.ByteSource=} opt_bytes The bytes we're reading from. 60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_start The optional offset to start reading at. 61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_length The optional length of the block to read - 62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * we'll throw an assertion if we go off the end of the block. 63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @constructor 64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @struct 65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader = function(opt_bytes, opt_start, opt_length) { 67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Wire-format decoder. 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {!jspb.BinaryDecoder} 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_ = jspb.BinaryDecoder.alloc(opt_bytes, opt_start, opt_length); 72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Cursor immediately before the field tag. 75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {number} 76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.fieldCursor_ = this.decoder_.getCursor(); 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Field number of the next field in the buffer, filled in by nextField(). 81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {number} 82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER; 84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Wire type of the next proto field in the buffer, filled in by 87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * nextField(). 88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {jspb.BinaryConstants.WireType} 89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID; 91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Set to true if this reader encountered an error due to corrupt data. 94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {boolean} 95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = false; 97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * User-defined reader callbacks. 100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {Object.<string, function(!jspb.BinaryReader):*>} 101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.readCallbacks_ = null; 103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Global pool of BinaryReader instances. 108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {!Array.<!jspb.BinaryReader>} 109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.instanceCache_ = []; 111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Pops an instance off the instance cache, or creates one if the cache is 115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * empty. 116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.ByteSource=} opt_bytes The bytes we're reading from. 117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_start The optional offset to start reading at. 118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_length The optional length of the block to read - 119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * we'll throw an assertion if we go off the end of the block. 120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!jspb.BinaryReader} 121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.alloc = 123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(opt_bytes, opt_start, opt_length) { 124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (jspb.BinaryReader.instanceCache_.length) { 125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var newReader = jspb.BinaryReader.instanceCache_.pop(); 126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (opt_bytes) { 127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer newReader.decoder_.setBlock(opt_bytes, opt_start, opt_length); 128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return newReader; 130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else { 131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return new jspb.BinaryReader(opt_bytes, opt_start, opt_length); 132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Alias for the above method. 138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.ByteSource=} opt_bytes The bytes we're reading from. 139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_start The optional offset to start reading at. 140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number=} opt_length The optional length of the block to read - 141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * we'll throw an assertion if we go off the end of the block. 142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!jspb.BinaryReader} 143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.alloc = jspb.BinaryReader.alloc; 145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Puts this instance back in the instance cache. 149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.free = function() { 151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.clear(); 152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER; 153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID; 154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = false; 155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.readCallbacks_ = null; 156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (jspb.BinaryReader.instanceCache_.length < 100) { 158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryReader.instanceCache_.push(this); 159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the cursor immediately before the current field's tag. 165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The internal read cursor. 166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getFieldCursor = function() { 168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.fieldCursor_; 169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the internal read cursor. 174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The internal read cursor. 175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getCursor = function() { 177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.getCursor(); 178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the raw buffer. 183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {?Uint8Array} The raw buffer. 184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getBuffer = function() { 186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.getBuffer(); 187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The field number of the next field in the buffer, or 192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * INVALID_FIELD_NUMBER if there is no next field. 193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getFieldNumber = function() { 195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.nextField_; 196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {jspb.BinaryConstants.WireType} The wire type of the next field 201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * in the stream, or WireType.INVALID if there is no next field. 202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getWireType = function() { 204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.nextWireType_; 205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {boolean} Whether the current wire type is an end-group tag. Used as 210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * an exit condition in decoder loops in generated code. 211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.isEndGroup = function() { 213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP; 214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns true if this reader hit an error due to corrupt data. 219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {boolean} 220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getError = function() { 222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.error_ || this.decoder_.getError(); 223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Points this reader at a new block of bytes. 228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!Uint8Array} bytes The block of bytes we're reading from. 229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} start The offset to start reading at. 230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} length The length of the block to read. 231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.setBlock = function(bytes, start, length) { 233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.setBlock(bytes, start, length); 234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER; 235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID; 236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Rewinds the stream cursor to the beginning of the buffer and resets all 241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * internal state. 242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.reset = function() { 244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.reset(); 245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER; 246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID; 247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Advances the stream cursor by the given number of bytes. 252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} count The number of bytes to advance by. 253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.advance = function(count) { 255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.advance(count); 256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads the next field header in the stream if there is one, returns true if 261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * we saw a valid field header or false if we've read the whole stream. 262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Throws an error if we encountered a deprecated START_GROUP/END_GROUP field. 263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {boolean} True if the stream contains more fields. 264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.nextField = function() { 266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // If we're at the end of the block, there are no more fields. 267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.decoder_.atEnd()) { 268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return false; 269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // If we hit an error decoding the previous field, stop now before we 272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // try to decode anything else 273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.getError()) { 274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Decoder hit an error'); 275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return false; 276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Otherwise just read the header of the next field. 279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.fieldCursor_ = this.decoder_.getCursor(); 280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var header = this.decoder_.readUnsignedVarint32(); 281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var nextField = header >>> 3; 283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var nextWireType = /** @type {jspb.BinaryConstants.WireType} */ 284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (header & 0x7); 285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // If the wire type isn't one of the valid ones, something's broken. 287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (nextWireType != jspb.BinaryConstants.WireType.VARINT && 288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nextWireType != jspb.BinaryConstants.WireType.FIXED32 && 289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nextWireType != jspb.BinaryConstants.WireType.FIXED64 && 290b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nextWireType != jspb.BinaryConstants.WireType.DELIMITED && 291b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nextWireType != jspb.BinaryConstants.WireType.START_GROUP && 292b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nextWireType != jspb.BinaryConstants.WireType.END_GROUP) { 293b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire type'); 294b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = true; 295b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return false; 296b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 297b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 298b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextField_ = nextField; 299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = nextWireType; 300b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return true; 302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 304b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 305b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Winds the reader back to just before this field's header. 307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.unskipHeader = function() { 309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.unskipVarint((this.nextField_ << 3) | this.nextWireType_); 310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips all contiguous fields whose header matches the one we just read. 315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipMatchingFields = function() { 317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var field = this.nextField_; 318b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.unskipHeader(); 319b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 320b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer while (this.nextField() && (this.getFieldNumber() == field)) { 321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipField(); 322b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 323b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 324b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (!this.decoder_.atEnd()) { 325b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.unskipHeader(); 326b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 327b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 328b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 329b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 331b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next varint field in the binary stream. 332b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 333b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipVarintField = function() { 334b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextWireType_ != jspb.BinaryConstants.WireType.VARINT) { 335b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire type for skipVarintField'); 336b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipField(); 337b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 338b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 340b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.skipVarint(); 341b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 342b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 343b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 344b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 345b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next delimited field in the binary stream. 346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipDelimitedField = function() { 348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextWireType_ != jspb.BinaryConstants.WireType.DELIMITED) { 349b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire type for skipDelimitedField'); 350b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipField(); 351b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 352b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 354b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 355b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.advance(length); 356b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 357b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next fixed32 field in the binary stream. 361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipFixed32Field = function() { 363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED32) { 364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire type for skipFixed32Field'); 365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipField(); 366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.advance(4); 370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next fixed64 field in the binary stream. 375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipFixed64Field = function() { 377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED64) { 378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire type for skipFixed64Field'); 379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipField(); 380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.advance(8); 384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next group field in the binary stream. 389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipGroup = function() { 391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Keep a stack of start-group tags that must be matched by end-group tags. 392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var nestedGroups = [this.nextField_]; 393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer do { 394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (!this.nextField()) { 395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Unmatched start-group tag: stream EOF'); 396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = true; 397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextWireType_ == 400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryConstants.WireType.START_GROUP) { 401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Nested group start. 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer nestedGroups.push(this.nextField_); 403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } else if (this.nextWireType_ == 404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryConstants.WireType.END_GROUP) { 405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Group end: check that it matches top-of-stack. 406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (this.nextField_ != nestedGroups.pop()) { 407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Unmatched end-group tag'); 408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = true; 409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } while (nestedGroups.length > 0); 413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Skips over the next field in the binary stream - this is useful if we're 418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * decoding a message that contain unknown fields. 419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.skipField = function() { 421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer switch (this.nextWireType_) { 422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case jspb.BinaryConstants.WireType.VARINT: 423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipVarintField(); 424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer break; 425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case jspb.BinaryConstants.WireType.FIXED64: 426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipFixed64Field(); 427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer break; 428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case jspb.BinaryConstants.WireType.DELIMITED: 429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipDelimitedField(); 430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer break; 431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case jspb.BinaryConstants.WireType.FIXED32: 432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipFixed32Field(); 433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer break; 434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case jspb.BinaryConstants.WireType.START_GROUP: 435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.skipGroup(); 436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer break; 437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer default: 438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid wire encoding for field.'); 439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Registers a user-defined read callback. 445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string} callbackName 446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {function(!jspb.BinaryReader):*} callback 447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.registerReadCallback = 449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(callbackName, callback) { 450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (goog.isNull(this.readCallbacks_)) { 451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.readCallbacks_ = {}; 452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(!this.readCallbacks_[callbackName]); 454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.readCallbacks_[callbackName] = callback; 455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Runs a registered read callback. 460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string} callbackName The name the callback is registered under. 461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {*} The value returned by the callback. 462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.runReadCallback = function(callbackName) { 464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(!goog.isNull(this.readCallbacks_)); 465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var callback = this.readCallbacks_[callbackName]; 466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(callback); 467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return callback(this); 468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a field of any valid non-message type from the binary stream. 473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.BinaryConstants.FieldType} fieldType 474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {jspb.AnyFieldType} 475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readAny = function(fieldType) { 477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ = jspb.BinaryConstants.FieldTypeToWireType(fieldType); 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var fieldTypes = jspb.BinaryConstants.FieldType; 479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer switch (fieldType) { 480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.DOUBLE: 481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readDouble(); 482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FLOAT: 483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readFloat(); 484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.INT64: 485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readInt64(); 486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.UINT64: 487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readUint64(); 488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.INT32: 489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readInt32(); 490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FIXED64: 491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readFixed64(); 492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FIXED32: 493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readFixed32(); 494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.BOOL: 495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readBool(); 496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.STRING: 497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readString(); 498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.GROUP: 499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Group field type not supported in readAny()'); 500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.MESSAGE: 501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Message field type not supported in readAny()'); 502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.BYTES: 503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readBytes(); 504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.UINT32: 505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readUint32(); 506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.ENUM: 507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readEnum(); 508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SFIXED32: 509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readSfixed32(); 510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SFIXED64: 511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readSfixed64(); 512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SINT32: 513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readSint32(); 514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SINT64: 515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readSint64(); 516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FHASH64: 517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readFixedHash64(); 518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.VHASH64: 519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readVarintHash64(); 520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer default: 521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid field type in readAny()'); 522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return 0; 524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 525b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 526b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Deserialize a proto into the provided message object using the provided 529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * reader function. This function is templated as we currently have one client 530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * who is using manual deserialization instead of the code-generated versions. 531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template T 532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {T} message 533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {function(T, !jspb.BinaryReader)} reader 534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readMessage = function(message, reader) { 536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED); 538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Save the current endpoint of the decoder and move it to the end of the 540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // embedded message. 541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var oldEnd = this.decoder_.getEnd(); 542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var newEnd = this.decoder_.getCursor() + length; 544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.setEnd(newEnd); 545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Deserialize the embedded message. 547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer reader(message, this); 548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Advance the decoder past the embedded message and restore the endpoint. 550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.setCursor(newEnd); 551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.setEnd(oldEnd); 552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 553b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 554b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 555b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 556b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Deserialize a proto into the provided message object using the provided 557b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * reader function, assuming that the message is serialized as a group 558b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * with the given tag. 559b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template T 560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {T} message 562b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {function(T, !jspb.BinaryReader)} reader 563b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 564b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readGroup = 565b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, message, reader) { 566b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Ensure that the wire type is correct. 567b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 568b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.START_GROUP); 569b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Ensure that the field number is correct. 570b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(this.nextField_ == field); 571b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 572b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Deserialize the message. The deserialization will stop at an END_GROUP tag. 573b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer reader(message, this); 574b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 575b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (!this.error_ && 576b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ != jspb.BinaryConstants.WireType.END_GROUP) { 577b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Group submessage did not end with an END_GROUP tag'); 578b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.error_ = true; 579b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 580b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 581b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 582b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 583b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 584b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Return a decoder that wraps the current delimited field. 585b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!jspb.BinaryDecoder} 586b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 587b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.getFieldDecoder = function() { 588b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 589b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED); 590b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 591b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 592b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var start = this.decoder_.getCursor(); 593b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var end = start + length; 594b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 595b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var innerDecoder = 596b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(), start, length); 597b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.decoder_.setCursor(end); 598b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return innerDecoder; 599b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 600b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 601b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 602b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 603b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 32-bit integer field from the binary stream, or throws an 604b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 605b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 606b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the signed 32-bit integer field. 607b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 608b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readInt32 = function() { 609b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 610b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 611b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readSignedVarint32(); 612b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 613b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 614b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 615b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 616b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 32-bit integer field from the binary stream, or throws an 617b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 618b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 619b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the value as a string. 620b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 621b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The value of the signed 32-bit integer field as a decimal 622b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * string. 623b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 624b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readInt32String = function() { 625b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 626b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 627b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readSignedVarint32String(); 628b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 629b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 630b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 631b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 632b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 64-bit integer field from the binary stream, or throws an 633b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 634b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 635b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the signed 64-bit integer field. 636b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 637b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readInt64 = function() { 638b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 639b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 640b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readSignedVarint64(); 641b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 642b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 643b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 644b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 645b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 64-bit integer field from the binary stream, or throws an 646b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 647b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 648b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the value as a string. 649b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 650b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The value of the signed 64-bit integer field as a decimal 651b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * string. 652b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 653b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readInt64String = function() { 654b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 655b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 656b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readSignedVarint64String(); 657b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 658b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 659b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 660b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 661b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 32-bit integer field from the binary stream, or throws an 662b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 663b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 664b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the unsigned 32-bit integer field. 665b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 666b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readUint32 = function() { 667b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 669b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUnsignedVarint32(); 670b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 671b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 672b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 673b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 674b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 32-bit integer field from the binary stream, or throws an 675b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 676b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 677b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the value as a string. 678b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 679b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The value of the unsigned 32-bit integer field as a decimal 680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * string. 681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 682b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readUint32String = function() { 683b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 684b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 685b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUnsignedVarint32String(); 686b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 687b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 688b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 689b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 690b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 64-bit integer field from the binary stream, or throws an 691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 692b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 693b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the unsigned 64-bit integer field. 694b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 695b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readUint64 = function() { 696b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 697b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 698b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUnsignedVarint64(); 699b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 700b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 702b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 703b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 64-bit integer field from the binary stream, or throws an 704b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 705b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 706b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Returns the value as a string. 707b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 708b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The value of the unsigned 64-bit integer field as a decimal 709b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * string. 710b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 711b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readUint64String = function() { 712b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 713b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 714b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUnsignedVarint64String(); 715b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 716b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 717b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 718b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 719b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed zigzag-encoded 32-bit integer field from the binary stream, 720b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * or throws an error if the next field in the stream is not of the correct 721b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * wire type. 722b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 723b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the signed 32-bit integer field. 724b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 725b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readSint32 = function() { 726b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 727b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 728b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readZigzagVarint32(); 729b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 730b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 731b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 732b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 733b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed zigzag-encoded 64-bit integer field from the binary stream, 734b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * or throws an error if the next field in the stream is not of the correct 735b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * wire type. 736b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 737b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the signed 64-bit integer field. 738b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 739b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readSint64 = function() { 740b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 741b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 742b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readZigzagVarint64(); 743b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 744b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 745b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 746b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 747b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 32-bit fixed-length integer fiield from the binary stream, 748b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * or throws an error if the next field in the stream is not of the correct 749b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * wire type. 750b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 751b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the double field. 752b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 753b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readFixed32 = function() { 754b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 755b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32); 756b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUint32(); 757b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 758b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 759b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 760b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 761b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an unsigned 64-bit fixed-length integer fiield from the binary stream, 762b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * or throws an error if the next field in the stream is not of the correct 763b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * wire type. 764b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 765b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the float field. 766b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 767b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readFixed64 = function() { 768b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 769b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64); 770b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readUint64(); 771b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 772b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 773b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 774b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 775b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 32-bit fixed-length integer fiield from the binary stream, or 776b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * throws an error if the next field in the stream is not of the correct wire 777b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * type. 778b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 779b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the double field. 780b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 781b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readSfixed32 = function() { 782b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 783b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32); 784b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readInt32(); 785b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 786b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 787b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 788b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 789b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a signed 64-bit fixed-length integer fiield from the binary stream, or 790b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * throws an error if the next field in the stream is not of the correct wire 791b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * type. 792b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 793b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the float field. 794b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 795b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readSfixed64 = function() { 796b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 797b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64); 798b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readInt64(); 799b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 800b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 801b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 802b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 803b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a 32-bit floating-point field from the binary stream, or throws an 804b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 805b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 806b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the float field. 807b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 808b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readFloat = function() { 809b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 810b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32); 811b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readFloat(); 812b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 813b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 814b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 815b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 816b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a 64-bit floating-point field from the binary stream, or throws an 817b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * error if the next field in the stream is not of the correct wire type. 818b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 819b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the double field. 820b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 821b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readDouble = function() { 822b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 823b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64); 824b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readDouble(); 825b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 826b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 827b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 828b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 829b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a boolean field from the binary stream, or throws an error if the next 830b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * field in the stream is not of the correct wire type. 831b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 832b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {boolean} The value of the boolean field. 833b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 834b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readBool = function() { 835b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 836b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 837b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return !!this.decoder_.readUnsignedVarint32(); 838b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 839b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 840b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 841b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 842b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads an enum field from the binary stream, or throws an error if the next 843b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * field in the stream is not of the correct wire type. 844b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 845b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {number} The value of the enum field. 846b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 847b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readEnum = function() { 848b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 849b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 850b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readSignedVarint64(); 851b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 852b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 853b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 854b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 855b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a string field from the binary stream, or throws an error if the next 856b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * field in the stream is not of the correct wire type. 857b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 858b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The value of the string field. 859b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 860b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readString = function() { 861b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 862b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED); 863b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 864b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readString(length); 865b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 866b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 867b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 868b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 869b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a length-prefixed block of bytes from the binary stream, or returns 870b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * null if the next field in the stream has an invalid length value. 871b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 872b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Uint8Array} The block of bytes. 873b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 874b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readBytes = function() { 875b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 876b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED); 877b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 878b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readBytes(length); 879b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 880b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 881b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 882b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 883b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a 64-bit varint or fixed64 field from the stream and returns it as a 884b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 8-character Unicode string for use as a hash table key, or throws an error 885b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * if the next field in the stream is not of the correct wire type. 886b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 887b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The hash value. 888b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 889b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readVarintHash64 = function() { 890b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 891b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT); 892b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readVarintHash64(); 893b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 894b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 895b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 896b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 897b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a 64-bit varint or fixed64 field from the stream and returns it as a 898b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 8-character Unicode string for use as a hash table key, or throws an error 899b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * if the next field in the stream is not of the correct wire type. 900b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 901b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} The hash value. 902b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 903b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readFixedHash64 = function() { 904b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 905b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64); 906b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.decoder_.readFixedHash64(); 907b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 908b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 909b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 910b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 911b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed scalar field using the supplied raw reader function. 912b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {function()} decodeMethod 913b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array} 914b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 915b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 916b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedField_ = function(decodeMethod) { 917b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert( 918b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED); 919b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var length = this.decoder_.readUnsignedVarint32(); 920b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var end = this.decoder_.getCursor() + length; 921b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var result = []; 922b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer while (this.decoder_.getCursor() < end) { 923b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // TODO(aappleby): .call is slow 924b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer result.push(decodeMethod.call(this.decoder_)); 925b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 926b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return result; 927b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 928b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 929b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 930b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 931b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed int32 field, which consists of a length header and a list of 932b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * signed varints. 933b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 934b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 935b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedInt32 = function() { 936b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readSignedVarint32); 937b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 938b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 939b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 940b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 941b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed int32 field, which consists of a length header and a list of 942b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * signed varints. Returns a list of strings. 943b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 944b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 945b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedInt32String = function() { 946b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readSignedVarint32String); 947b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 948b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 949b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 950b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 951b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed int64 field, which consists of a length header and a list of 952b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * signed varints. 953b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 954b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 955b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedInt64 = function() { 956b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readSignedVarint64); 957b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 958b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 959b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 960b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 961b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed int64 field, which consists of a length header and a list of 962b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * signed varints. Returns a list of strings. 963b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 964b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 965b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedInt64String = function() { 966b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readSignedVarint64String); 967b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 968b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 969b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 970b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 971b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed uint32 field, which consists of a length header and a list of 972b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. 973b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 974b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 975b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedUint32 = function() { 976b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUnsignedVarint32); 977b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 978b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 979b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 980b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 981b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed uint32 field, which consists of a length header and a list of 982b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. Returns a list of strings. 983b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 984b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 985b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedUint32String = function() { 986b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUnsignedVarint32String); 987b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 988b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 989b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 990b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 991b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed uint64 field, which consists of a length header and a list of 992b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. 993b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 994b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 995b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedUint64 = function() { 996b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUnsignedVarint64); 997b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 998b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 999b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1000b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1001b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed uint64 field, which consists of a length header and a list of 1002b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. Returns a list of strings. 1003b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 1004b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1005b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedUint64String = function() { 1006b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUnsignedVarint64String); 1007b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1008b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1009b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1010b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1011b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed sint32 field, which consists of a length header and a list of 1012b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * zigzag varints. 1013b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1014b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1015b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedSint32 = function() { 1016b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readZigzagVarint32); 1017b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1018b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1019b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1020b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1021b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed sint64 field, which consists of a length header and a list of 1022b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * zigzag varints. 1023b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1024b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1025b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedSint64 = function() { 1026b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readZigzagVarint64); 1027b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1028b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1029b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1030b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1031b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed fixed32 field, which consists of a length header and a list 1032b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * of unsigned 32-bit ints. 1033b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1034b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1035b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedFixed32 = function() { 1036b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUint32); 1037b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1038b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1039b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1040b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1041b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed fixed64 field, which consists of a length header and a list 1042b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * of unsigned 64-bit ints. 1043b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1044b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1045b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedFixed64 = function() { 1046b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readUint64); 1047b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1048b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1049b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1050b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1051b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed sfixed32 field, which consists of a length header and a list 1052b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * of 32-bit ints. 1053b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1054b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1055b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedSfixed32 = function() { 1056b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readInt32); 1057b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1058b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1059b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1060b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1061b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed sfixed64 field, which consists of a length header and a list 1062b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * of 64-bit ints. 1063b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1064b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1065b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedSfixed64 = function() { 1066b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readInt64); 1067b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1068b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1069b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1070b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1071b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed float field, which consists of a length header and a list of 1072b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * floats. 1073b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1074b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1075b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedFloat = function() { 1076b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readFloat); 1077b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1078b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1079b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1080b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1081b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed double field, which consists of a length header and a list of 1082b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * doubles. 1083b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1084b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1085b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedDouble = function() { 1086b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readDouble); 1087b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1088b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1089b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1090b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1091b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed bool field, which consists of a length header and a list of 1092b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. 1093b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<boolean>} 1094b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1095b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedBool = function() { 1096b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readBool); 1097b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1098b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1099b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed enum field, which consists of a length header and a list of 1102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned varints. 1103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 1104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedEnum = function() { 1106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readEnum); 1107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed varint hash64 field, which consists of a length header and a 1112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * list of varint hash64s. 1113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 1114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedVarintHash64 = function() { 1116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readVarintHash64); 1117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Reads a packed fixed hash64 field, which consists of a length header and a 1122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * list of fixed hash64s. 1123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<string>} 1124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryReader.prototype.readPackedFixedHash64 = function() { 1126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return this.readPackedField_(this.decoder_.readFixedHash64); 1127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1128