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 encoding Javascript objects 33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * into binary, wire-format protocol buffers (in the form of Uint8Arrays) that 34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * a server can consume directly. 35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * jspb's BinaryWriter class defines methods for efficiently encoding 37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Javascript objects into binary, wire-format protocol buffers and supports 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * all the fundamental field types used in protocol buffers. 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Major caveat 1 - Users of this library _must_ keep their Javascript proto 41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * parsing code in sync with the original .proto file - presumably you'll be 42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * using the typed jspb code generator, but if you bypass that you'll need 43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to keep things in sync by hand. 44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Major caveat 2 - Javascript is unable to accurately represent integers 46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * larger than 2^53 due to its use of a double-precision floating point format 47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * for all numbers. BinaryWriter does not make any special effort to preserve 48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * precision for values above this limit - if you need to pass 64-bit integers 49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * (hash codes, for example) between the client and server without precision 50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * loss, do _not_ use this library. 51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Major caveat 3 - This class uses typed arrays and must not be used on older 53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * browsers that do not support them. 54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @author aappleby@google.com (Austin Appleby) 56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.provide('jspb.BinaryWriter'); 59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('goog.asserts'); 61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('goog.crypt.base64'); 62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.BinaryConstants'); 63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.BinaryEncoder'); 64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.arith.Int64'); 65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.arith.UInt64'); 66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammergoog.require('jspb.utils'); 67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * BinaryWriter implements encoders for all the wire types specified in 72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * https://developers.google.com/protocol-buffers/docs/encoding. 73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @constructor 75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @struct 76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter = function() { 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Blocks of serialized data that will be concatenated once all messages have 80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * been written. 81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {!Array<!Uint8Array|!Array<number>>} 82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_ = []; 84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Total number of bytes in the blocks_ array. Does _not_ include bytes in 87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the encoder below. 88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {number} 89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_ = 0; 91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Binary encoder holding pieces of a message that we're still serializing. 94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * When we get to a stopping point (either the start of a new submessage, or 95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * when we need to append a raw Uint8Array), the encoder's buffer will be 96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * added to the block array above and the encoder will be reset. 97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {!jspb.BinaryEncoder} 98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_ = new jspb.BinaryEncoder(); 100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer /** 102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * A stack of bookmarks containing the parent blocks for each message started 103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * via beginSubMessage(), needed as bookkeeping for endSubMessage(). 104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * TODO(aappleby): Deprecated, users should be calling writeMessage(). 105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private {!Array.<!Array.<number>>} 106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.bookmarks_ = []; 108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Append a typed array of bytes onto the buffer. 113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!Uint8Array} arr The byte array to append. 115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.appendUint8Array_ = function(arr) { 118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var temp = this.encoder_.end(); 119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_.push(temp); 120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_.push(arr); 121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_ += temp.length + arr.length; 122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Begins a new message by writing the field header and returning a bookmark 127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * which we will use to patch in the message length to in endDelimited_ below. 128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Array.<number>} 130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.beginDelimited_ = function(field) { 133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.encoder_.end(); 135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_.push(bookmark); 136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_ += bookmark.length; 137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer bookmark.push(this.totalLength_); 138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return bookmark; 139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Ends a message by encoding the _change_ in length of the buffer to the 144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * parent block and adds the number of bytes needed to encode that length to 145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the total byte length. 146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!Array.<number>} bookmark 147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.endDelimited_ = function(bookmark) { 150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var oldLength = bookmark.pop(); 151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var messageLength = this.totalLength_ + this.encoder_.length() - oldLength; 152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(messageLength >= 0); 153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer while (messageLength > 127) { 155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer bookmark.push((messageLength & 0x7f) | 0x80); 156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer messageLength = messageLength >>> 7; 157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_++; 158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer bookmark.push(messageLength); 161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_++; 162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a pre-serialized message to the buffer. 167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!Uint8Array} bytes The array of bytes to write. 168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} start The start of the range to write. 169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} end The end of the range to write. 170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSerializedMessage = function( 172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer bytes, start, end) { 173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.appendUint8Array_(bytes.subarray(start, end)); 174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a pre-serialized message to the buffer if the message and endpoints 179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * are non-null. 180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Uint8Array} bytes The array of bytes to write. 181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?number} start The start of the range to write. 182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?number} end The end of the range to write. 183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.maybeWriteSerializedMessage = function( 185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer bytes, start, end) { 186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (bytes != null && start != null && end != null) { 187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSerializedMessage(bytes, start, end); 188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Resets the writer, throwing away any accumulated buffers. 194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.reset = function() { 196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_ = []; 197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.end(); 198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.totalLength_ = 0; 199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.bookmarks_ = []; 200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Converts the encoded data into a Uint8Array. 205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {!Uint8Array} 206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.getResultBuffer = function() { 208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(this.bookmarks_.length == 0); 209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var flat = new Uint8Array(this.totalLength_ + this.encoder_.length()); 211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var blocks = this.blocks_; 213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var blockCount = blocks.length; 214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var offset = 0; 215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < blockCount; i++) { 217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var block = blocks[i]; 218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer flat.set(block, offset); 219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer offset += block.length; 220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var tail = this.encoder_.end(); 223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer flat.set(tail, offset); 224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer offset += tail.length; 225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Post condition: `flattened` must have had every byte written. 227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(offset == flat.length); 228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Replace our block list with the flattened block, which lets GC reclaim 230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // the temp blocks sooner. 231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.blocks_ = [flat]; 232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return flat; 234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Converts the encoded data into a bas64-encoded string. 239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @return {string} 240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.getResultBase64String = function() { 242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return goog.crypt.base64.encodeByteArray(this.getResultBuffer()); 243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Begins a new sub-message. The client must call endSubMessage() when they're 248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * done. 249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * TODO(aappleby): Deprecated. Move callers to writeMessage(). 250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number of the sub-message. 251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.beginSubMessage = function(field) { 253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.bookmarks_.push(this.beginDelimited_(field)); 254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Finishes a sub-message and packs it into the parent messages' buffer. 259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * TODO(aappleby): Deprecated. Move callers to writeMessage(). 260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.endSubMessage = function() { 262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(this.bookmarks_.length >= 0); 263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(this.bookmarks_.pop()); 264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Encodes a (field number, wire type) tuple into a wire-format field header 269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * and stores it in the buffer as a varint. 270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} wireType The wire-type of the field, as specified in the 272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * protocol buffer documentation. 273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeFieldHeader_ = 276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, wireType) { 277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(field >= 1 && field == Math.floor(field)); 278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var x = field * 8 + wireType; 279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(x); 280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a field of any valid scalar type to the binary stream. 285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.BinaryConstants.FieldType} fieldType 286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {jspb.AnyFieldType} value 288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeAny = function(fieldType, field, value) { 290b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var fieldTypes = jspb.BinaryConstants.FieldType; 291b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer switch (fieldType) { 292b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.DOUBLE: 293b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeDouble(field, /** @type {number} */(value)); 294b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 295b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FLOAT: 296b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFloat(field, /** @type {number} */(value)); 297b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 298b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.INT64: 299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeInt64(field, /** @type {number} */(value)); 300b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.UINT64: 302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUint64(field, /** @type {number} */(value)); 303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 304b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.INT32: 305b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeInt32(field, /** @type {number} */(value)); 306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FIXED64: 308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixed64(field, /** @type {number} */(value)); 309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FIXED32: 311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixed32(field, /** @type {number} */(value)); 312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.BOOL: 314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeBool(field, /** @type {boolean} */(value)); 315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.STRING: 317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeString(field, /** @type {string} */(value)); 318b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 319b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.GROUP: 320b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Group field type not supported in writeAny()'); 321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 322b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.MESSAGE: 323b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Message field type not supported in writeAny()'); 324b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 325b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.BYTES: 326b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeBytes(field, /** @type {?Uint8Array} */(value)); 327b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 328b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.UINT32: 329b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUint32(field, /** @type {number} */(value)); 330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 331b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.ENUM: 332b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeEnum(field, /** @type {number} */(value)); 333b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 334b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SFIXED32: 335b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSfixed32(field, /** @type {number} */(value)); 336b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 337b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SFIXED64: 338b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSfixed64(field, /** @type {number} */(value)); 339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 340b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SINT32: 341b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSint32(field, /** @type {number} */(value)); 342b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 343b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.SINT64: 344b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSint64(field, /** @type {number} */(value)); 345b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.FHASH64: 347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixedHash64(field, /** @type {string} */(value)); 348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 349b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer case fieldTypes.VHASH64: 350b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeVarintHash64(field, /** @type {string} */(value)); 351b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 352b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer default: 353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.fail('Invalid field type in writeAny()'); 354b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return; 355b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 356b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 357b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a varint field to the buffer without range checking. 361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUnsignedVarint32_ = function(field, value) { 366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value); 369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a varint field to the buffer without range checking. 374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSignedVarint32_ = function(field, value) { 379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint32(value); 382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a varint field to the buffer without range checking. 387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUnsignedVarint64_ = function(field, value) { 392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint64(value); 395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a varint field to the buffer without range checking. 400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSignedVarint64_ = function(field, value) { 405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint64(value); 408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a zigzag varint field to the buffer without range checking. 413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeZigzagVarint32_ = function(field, value) { 418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeZigzagVarint32(value); 421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a zigzag varint field to the buffer without range checking. 426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeZigzagVarint64_ = function(field, value) { 431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeZigzagVarint64(value); 434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an int32 field to the buffer. Numbers outside the range [-2^31,2^31) 439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeInt32 = function(field, value) { 444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_31) && 446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_31)); 447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSignedVarint32_(field, value); 448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an int32 field represented as a string to the buffer. Numbers outside 453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the range [-2^31,2^31) will be truncated. 454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The value to write. 456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeInt32String = function(field, value) { 458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var intValue = /** {number} */ parseInt(value, 10); 460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((intValue >= -jspb.BinaryConstants.TWO_TO_31) && 461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (intValue < jspb.BinaryConstants.TWO_TO_31)); 462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSignedVarint32_(field, intValue); 463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an int64 field to the buffer. Numbers outside the range [-2^63,2^63) 468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeInt64 = function(field, value) { 473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_63) && 475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_63)); 476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSignedVarint64_(field, value); 477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a int64 field (with value as a string) to the buffer. 482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The value to write. 484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeInt64String = function(field, value) { 486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var num = jspb.arith.Int64.fromString(value); 488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSplitVarint64(num.lo, num.hi); 490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a uint32 field to the buffer. Numbers outside the range [0,2^32) 495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUint32 = function(field, value) { 500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= 0) && 502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_32)); 503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUnsignedVarint32_(field, value); 504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a uint32 field represented as a string to the buffer. Numbers outside 509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the range [0,2^32) will be truncated. 510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The value to write. 512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUint32String = function(field, value) { 514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var intValue = /** {number} */ parseInt(value, 10); 516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((intValue >= 0) && 517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (intValue < jspb.BinaryConstants.TWO_TO_32)); 518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUnsignedVarint32_(field, intValue); 519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a uint64 field to the buffer. Numbers outside the range [0,2^64) 524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 525b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 526b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUint64 = function(field, value) { 529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= 0) && 531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_64)); 532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUnsignedVarint64_(field, value); 533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a uint64 field (with value as a string) to the buffer. 538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The value to write. 540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeUint64String = function(field, value) { 542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var num = jspb.arith.UInt64.fromString(value); 544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSplitVarint64(num.lo, num.hi); 546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a sint32 field to the buffer. Numbers outside the range [-2^31,2^31) 551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 553b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 554b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 555b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSint32 = function(field, value) { 556b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 557b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_31) && 558b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_31)); 559b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeZigzagVarint32_(field, value); 560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 562b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 563b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 564b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a sint64 field to the buffer. Numbers outside the range [-2^63,2^63) 565b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 566b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 567b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 568b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 569b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSint64 = function(field, value) { 570b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 571b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_63) && 572b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_63)); 573b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeZigzagVarint64_(field, value); 574b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 575b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 576b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 577b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 578b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a fixed32 field to the buffer. Numbers outside the range [0,2^32) 579b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 580b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 581b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 582b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 583b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeFixed32 = function(field, value) { 584b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 585b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= 0) && 586b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_32)); 587b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED32); 588b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUint32(value); 589b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 590b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 591b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 592b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 593b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a fixed64 field to the buffer. Numbers outside the range [0,2^64) 594b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * will be truncated. 595b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 596b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 597b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 598b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeFixed64 = function(field, value) { 599b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 600b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= 0) && 601b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_64)); 602b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED64); 603b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUint64(value); 604b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 605b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 606b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 607b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 608b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a sfixed32 field to the buffer. Numbers outside the range 609b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * [-2^31,2^31) will be truncated. 610b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 611b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 612b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 613b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSfixed32 = function(field, value) { 614b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 615b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_31) && 616b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_31)); 617b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED32); 618b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeInt32(value); 619b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 620b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 621b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 622b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 623b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a sfixed64 field to the buffer. Numbers outside the range 624b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * [-2^63,2^63) will be truncated. 625b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 626b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 627b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 628b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeSfixed64 = function(field, value) { 629b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 630b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_63) && 631b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_63)); 632b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED64); 633b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeInt64(value); 634b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 635b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 636b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 637b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 638b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a single-precision floating point field to the buffer. Numbers 639b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * requiring more than 32 bits of precision will be truncated. 640b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 641b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 642b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 643b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeFloat = function(field, value) { 644b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 645b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED32); 646b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeFloat(value); 647b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 648b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 649b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 650b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 651b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a double-precision floating point field to the buffer. As this is the 652b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * native format used by JavaScript, no precision will be lost. 653b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 654b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 655b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 656b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeDouble = function(field, value) { 657b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 658b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED64); 659b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeDouble(value); 660b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 661b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 662b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 663b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 664b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a boolean field to the buffer. 665b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 666b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {boolean?} value The value to write. 667b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeBool = function(field, value) { 669b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 670b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(goog.isBoolean(value)); 671b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 672b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeBool(value); 673b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 674b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 675b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 676b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 677b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an enum field to the buffer. 678b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 679b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number?} value The value to write. 680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeEnum = function(field, value) { 682b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 683b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_31) && 684b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (value < jspb.BinaryConstants.TWO_TO_31)); 685b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 686b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint32(value); 687b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 688b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 689b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 690b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a string field to the buffer. 692b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 693b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The string to write. 694b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 695b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeString = function(field, value) { 696b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 697b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 698b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeString(value); 699b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 700b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 702b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 703b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 704b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an arbitrary byte field to the buffer. Note - to match the behavior 705b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * of the C++ implementation, empty byte arrays _are_ serialized. 706b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 707b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?jspb.ByteSource} value The array of bytes to write. 708b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 709b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeBytes = function(field, value) { 710b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 711b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bytes = jspb.utils.byteSourceToUint8Array(value); 712b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 713b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(bytes.length); 714b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.appendUint8Array_(bytes); 715b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 716b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 717b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 718b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 719b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a message to the buffer. 720b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template MessageType 721b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 722b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?MessageType} value The message to write. 723b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!jspb.WriterFunction} writerCallback Will be invoked with the value 724b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to write and the writer to write it with. 725b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 726b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeMessage = function( 727b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value, writerCallback) { 728b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 729b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 730b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer writerCallback(value, this); 731b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 732b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 733b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 734b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 735b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 736b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a group message to the buffer. 737b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 738b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template MessageType 739b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 740b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?MessageType} value The message to write, wrapped with START_GROUP / 741b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * END_GROUP tags. Will be a no-op if 'value' is null. 742b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!jspb.WriterFunction} writerCallback Will be invoked with the value 743b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to write and the writer to write it with. 744b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 745b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeGroup = function( 746b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value, writerCallback) { 747b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 748b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.START_GROUP); 749b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer writerCallback(value, this); 750b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.END_GROUP); 751b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 752b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 753b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 754b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 755b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a 64-bit hash string field (8 characters @ 8 bits of data each) to 756b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the buffer. 757b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 758b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The hash string. 759b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 760b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeFixedHash64 = function(field, value) { 761b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 762b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(value.length == 8); 763b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.FIXED64); 764b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeFixedHash64(value); 765b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 766b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 767b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 768b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 769b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a 64-bit hash string field (8 characters @ 8 bits of data each) to 770b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the buffer. 771b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 772b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {string?} value The hash string. 773b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 774b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeVarintHash64 = function(field, value) { 775b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 776b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer goog.asserts.assert(value.length == 8); 777b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.VARINT); 778b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeVarintHash64(value); 779b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 780b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 781b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 782b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 783b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated varint field. 784b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 785b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 786b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 787b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 788b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUnsignedVarint32_ = 789b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 790b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 791b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 792b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUnsignedVarint32_(field, value[i]); 793b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 794b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 795b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 796b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 797b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 798b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated varint field. 799b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 800b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 801b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 802b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 803b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSignedVarint32_ = 804b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 805b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 806b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 807b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSignedVarint32_(field, value[i]); 808b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 809b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 810b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 811b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 812b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 813b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated varint field. 814b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 815b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 816b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 817b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 818b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUnsignedVarint64_ = 819b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 820b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 821b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 822b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUnsignedVarint64_(field, value[i]); 823b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 824b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 825b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 826b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 827b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 828b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated varint field. 829b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 830b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 831b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 832b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 833b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSignedVarint64_ = 834b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 835b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 836b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 837b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSignedVarint64_(field, value[i]); 838b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 839b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 840b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 841b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 842b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 843b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated zigzag field. 844b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 845b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 846b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 847b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 848b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedZigzag32_ = function(field, value) { 849b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 850b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 851b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeZigzagVarint32_(field, value[i]); 852b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 853b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 854b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 855b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 856b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 857b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated zigzag field. 858b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 859b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 860b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 861b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 862b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedZigzag_ = function(field, value) { 863b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 864b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 865b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeZigzagVarint64_(field, value[i]); 866b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 867b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 868b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 869b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 870b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 871b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated 32-bit int field. 872b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 873b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 874b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 875b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedInt32 = 876b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedSignedVarint32_; 877b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 878b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 879b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 880b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers formatted as strings to the buffer as a repeated 881b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 32-bit int field. 882b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 883b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of ints to write. 884b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 885b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedInt32String = 886b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 887b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 888b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 889b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeInt32String(field, value[i]); 890b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 891b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 892b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 893b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 894b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 895b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated 64-bit int field. 896b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 897b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 898b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 899b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedInt64 = 900b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedSignedVarint64_; 901b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 902b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 903b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 904b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers formatted as strings to the buffer as a repeated 905b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 64-bit int field. 906b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 907b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of ints to write. 908b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 909b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedInt64String = 910b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 911b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 912b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 913b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeInt64String(field, value[i]); 914b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 915b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 916b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 917b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 918b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 919b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a repeated unsigned 32-bit int 920b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * field. 921b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 922b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 923b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 924b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUint32 = 925b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedUnsignedVarint32_; 926b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 927b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 928b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 929b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers formatted as strings to the buffer as a repeated 930b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned 32-bit int field. 931b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 932b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of ints to write. 933b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 934b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUint32String = 935b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 936b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 937b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 938b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUint32String(field, value[i]); 939b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 940b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 941b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 942b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 943b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 944b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a repeated unsigned 64-bit int 945b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * field. 946b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 947b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 948b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 949b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUint64 = 950b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedUnsignedVarint64_; 951b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 952b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 953b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 954b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers formatted as strings to the buffer as a repeated 955b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned 64-bit int field. 956b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 957b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of ints to write. 958b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 959b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedUint64String = 960b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 961b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 962b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 963b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeUint64String(field, value[i]); 964b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 965b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 966b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 967b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 968b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 969b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a repeated signed 32-bit int field. 970b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 971b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 972b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 973b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSint32 = 974b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedZigzag32_; 975b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 976b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 977b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 978b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a repeated signed 64-bit int field. 979b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 980b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 981b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 982b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSint64 = 983b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writeRepeatedZigzag_; 984b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 985b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 986b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 987b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated fixed32 field. This 988b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * works for both signed and unsigned fixed32s. 989b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 990b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 991b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 992b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedFixed32 = function(field, value) { 993b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 994b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 995b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixed32(field, value[i]); 996b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 997b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 998b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 999b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1000b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1001b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated fixed64 field. This 1002b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * works for both signed and unsigned fixed64s. 1003b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1004b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1005b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1006b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedFixed64 = function(field, value) { 1007b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1008b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1009b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixed64(field, value[i]); 1010b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1011b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1012b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1013b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1014b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1015b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated sfixed32 field. 1016b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1017b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1018b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1019b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSfixed32 = function(field, value) { 1020b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1021b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1022b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSfixed32(field, value[i]); 1023b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1024b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1025b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1026b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1027b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1028b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated sfixed64 field. 1029b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1030b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1031b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1032b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedSfixed64 = function(field, value) { 1033b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1034b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1035b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeSfixed64(field, value[i]); 1036b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1037b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1038b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1039b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1040b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1041b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated float field. 1042b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1043b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1044b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1045b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedFloat = function(field, value) { 1046b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1047b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1048b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFloat(field, value[i]); 1049b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1050b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1051b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1052b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1053b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1054b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a repeated double field. 1055b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1056b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1057b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1058b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedDouble = function(field, value) { 1059b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1060b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1061b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeDouble(field, value[i]); 1062b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1063b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1064b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1065b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1066b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1067b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of booleans to the buffer as a repeated bool field. 1068b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1069b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<boolean>} value The array of ints to write. 1070b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1071b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedBool = function(field, value) { 1072b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1073b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1074b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeBool(field, value[i]); 1075b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1076b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1077b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1078b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1079b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1080b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of enums to the buffer as a repeated enum field. 1081b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1082b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1083b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1084b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedEnum = function(field, value) { 1085b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1086b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1087b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeEnum(field, value[i]); 1088b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1089b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1090b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1091b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1092b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1093b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of strings to the buffer as a repeated string field. 1094b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1095b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of strings to write. 1096b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1097b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedString = function(field, value) { 1098b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1099b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeString(field, value[i]); 1101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of arbitrary byte fields to the buffer. 1107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<!jspb.ByteSource>} value The arrays of arrays of bytes to 1109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * write. 1110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedBytes = function(field, value) { 1112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeBytes(field, value[i]); 1115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of messages to the buffer. 1121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template MessageType 1122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<MessageType>} value The array of messages to 1124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * write. 1125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!jspb.WriterFunction} writerCallback Will be invoked with the value 1126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to write and the writer to write it with. 1127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedMessage = function( 1129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value, writerCallback) { 1130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer writerCallback(value[i], this); 1134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of group messages to the buffer. 1141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @template MessageType 1142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<MessageType>} value The array of messages to 1144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * write. 1145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {!jspb.WriterFunction} writerCallback Will be invoked with the value 1146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * to write and the writer to write it with. 1147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedGroup = function( 1149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value, writerCallback) { 1150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.START_GROUP); 1153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer writerCallback(value[i], this); 1154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.END_GROUP); 1155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a 64-bit hash string field (8 characters @ 8 bits of data each) to 1161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the buffer. 1162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of hashes to write. 1164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedFixedHash64 = 1166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 1167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFixedHash64(field, value[i]); 1170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a repeated 64-bit hash string field (8 characters @ 8 bits of data 1176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * each) to the buffer. 1177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of hashes to write. 1179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writeRepeatedVarintHash64 = 1181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 1182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null) return; 1183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeVarintHash64(field, value[i]); 1185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed varint field. 1191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUnsignedVarint32_ = function( 1196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value) { 1197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value[i]); 1201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed varint field. 1208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSignedVarint32_ = function( 1213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value) { 1214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint32(value[i]); 1218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed varint field. 1225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUnsignedVarint64_ = function( 1230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value) { 1231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint64(value[i]); 1235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed varint field. 1242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSignedVarint64_ = function( 1247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field, value) { 1248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint64(value[i]); 1252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed zigzag field. 1259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedZigzag32_ = function(field, value) { 1264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeZigzagVarint32(value[i]); 1268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed zigzag field. 1275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @private 1278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedZigzag64_ = function(field, value) { 1280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeZigzagVarint64(value[i]); 1284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1290b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed 32-bit int field. 1291b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1292b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1293b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1294b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedInt32 = 1295b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedSignedVarint32_; 1296b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1297b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1298b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1299b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers represented as strings to the buffer as a packed 1300b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 32-bit int field. 1301b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 1302b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value 1303b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1304b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedInt32String = function(field, value) { 1305b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1306b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1307b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1308b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSignedVarint32(parseInt(value[i], 10)); 1309b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1310b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1311b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1312b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1313b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1314b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1315b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed 64-bit int field. 1316b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1317b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1318b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1319b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedInt64 = 1320b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedSignedVarint64_; 1321b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1322b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1323b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1324b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers represented as strings to the buffer as a packed 1325b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * 64-bit int field. 1326b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 1327b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value 1328b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1329b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedInt64String = 1330b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 1331b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1332b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1333b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1334b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var num = jspb.arith.Int64.fromString(value[i]); 1335b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSplitVarint64(num.lo, num.hi); 1336b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1337b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1338b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1339b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1340b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1341b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1342b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a packed unsigned 32-bit int field. 1343b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1344b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1345b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1346b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUint32 = 1347b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedUnsignedVarint32_; 1348b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1349b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1350b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1351b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers represented as strings to the buffer as a packed 1352b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned 32-bit int field. 1353b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 1354b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value 1355b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1356b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUint32String = 1357b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 1358b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(parseInt(value[i], 10)); 1362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a packed unsigned 64-bit int field. 1369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUint64 = 1373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedUnsignedVarint64_; 1374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers represented as strings to the buffer as a packed 1378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * unsigned 64-bit int field. 1379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field 1380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value 1381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedUint64String = 1383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer function(field, value) { 1384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var num = jspb.arith.UInt64.fromString(value[i]); 1388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeSplitVarint64(num.lo, num.hi); 1389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a packed signed 32-bit int field. 1396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSint32 = 1400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedZigzag32_; 1401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array numbers to the buffer as a packed signed 64-bit int field. 1405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSint64 = 1409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer jspb.BinaryWriter.prototype.writePackedZigzag64_; 1410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed fixed32 field. 1414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedFixed32 = function(field, value) { 1418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 4); 1421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUint32(value[i]); 1423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed fixed64 field. 1429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedFixed64 = function(field, value) { 1433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 8); 1436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUint64(value[i]); 1438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed sfixed32 field. 1444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSfixed32 = function(field, value) { 1448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 4); 1451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeInt32(value[i]); 1453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed sfixed64 field. 1459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedSfixed64 = function(field, value) { 1463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 8); 1466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeInt64(value[i]); 1468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed float field. 1474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedFloat = function(field, value) { 1478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 4); 1481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeFloat(value[i]); 1483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of numbers to the buffer as a packed double field. 1489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedDouble = function(field, value) { 1493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 8); 1496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeDouble(value[i]); 1498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of booleans to the buffer as a packed bool field. 1504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<boolean>} value The array of ints to write. 1506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedBool = function(field, value) { 1508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length); 1511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeBool(value[i]); 1513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes an array of enums to the buffer as a packed enum field. 1519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<number>} value The array of ints to write. 1521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedEnum = function(field, value) { 1523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1525b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1526b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeEnum(value[i]); 1527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a 64-bit hash string field (8 characters @ 8 bits of data each) to 1534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the buffer. 1535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of hashes to write. 1537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedFixedHash64 = function(field, value) { 1539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.writeFieldHeader_(field, jspb.BinaryConstants.WireType.DELIMITED); 1541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeUnsignedVarint32(value.length * 8); 1542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeFixedHash64(value[i]); 1544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 1548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/** 1549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Writes a 64-bit hash string field (8 characters @ 8 bits of data each) to 1550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * the buffer. 1551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {number} field The field number. 1552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * @param {?Array.<string>} value The array of hashes to write. 1553b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */ 1554b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerjspb.BinaryWriter.prototype.writePackedVarintHash64 = function(field, value) { 1555b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if (value == null || !value.length) return; 1556b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer var bookmark = this.beginDelimited_(field); 1557b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for (var i = 0; i < value.length; i++) { 1558b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.encoder_.writeVarintHash64(value[i]); 1559b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 1560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer this.endDelimited_(bookmark); 1561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}; 1562