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