Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4122 lines
137 KiB
4122 lines
137 KiB
/** |
|
* @fileoverview Kernel is a class to provide type-checked accessing |
|
* (read/write bool/int32/string/...) on binary data. |
|
* |
|
* When creating the Kernel with the binary data, there is no deep |
|
* decoding done (which requires full type information). The deep decoding is |
|
* deferred until the first time accessing (when accessors can provide |
|
* full type information). |
|
* |
|
* Because accessors can be statically analyzed and stripped, unlike eager |
|
* binary decoding (which requires the full type information of all defined |
|
* fields), Kernel will only need the full type information of used |
|
* fields. |
|
*/ |
|
goog.module('protobuf.runtime.Kernel'); |
|
|
|
const BinaryStorage = goog.require('protobuf.runtime.BinaryStorage'); |
|
const BufferDecoder = goog.require('protobuf.binary.BufferDecoder'); |
|
const ByteString = goog.require('protobuf.ByteString'); |
|
const Int64 = goog.require('protobuf.Int64'); |
|
const InternalMessage = goog.require('protobuf.binary.InternalMessage'); |
|
const Storage = goog.require('protobuf.runtime.Storage'); |
|
const WireType = goog.require('protobuf.binary.WireType'); |
|
const Writer = goog.require('protobuf.binary.Writer'); |
|
const reader = goog.require('protobuf.binary.reader'); |
|
const {CHECK_TYPE, checkCriticalElementIndex, checkCriticalState, checkCriticalType, checkCriticalTypeBool, checkCriticalTypeBoolArray, checkCriticalTypeByteString, checkCriticalTypeByteStringArray, checkCriticalTypeDouble, checkCriticalTypeDoubleArray, checkCriticalTypeFloat, checkCriticalTypeFloatIterable, checkCriticalTypeMessageArray, checkCriticalTypeSignedInt32, checkCriticalTypeSignedInt32Array, checkCriticalTypeSignedInt64, checkCriticalTypeSignedInt64Array, checkCriticalTypeString, checkCriticalTypeStringArray, checkCriticalTypeUnsignedInt32, checkCriticalTypeUnsignedInt32Array, checkDefAndNotNull, checkElementIndex, checkFieldNumber, checkFunctionExists, checkState, checkTypeDouble, checkTypeFloat, checkTypeSignedInt32, checkTypeSignedInt64, checkTypeUnsignedInt32} = goog.require('protobuf.internal.checks'); |
|
const {Field, IndexEntry} = goog.require('protobuf.binary.field'); |
|
const {buildIndex} = goog.require('protobuf.binary.indexer'); |
|
const {createTag, get32BitVarintLength, getTagLength} = goog.require('protobuf.binary.tag'); |
|
|
|
|
|
/** |
|
* Validates the index entry has the correct wire type. |
|
* @param {!IndexEntry} indexEntry |
|
* @param {!WireType} expected |
|
*/ |
|
function validateWireType(indexEntry, expected) { |
|
const wireType = Field.getWireType(indexEntry); |
|
checkCriticalState( |
|
wireType === expected, |
|
`Expected wire type: ${expected} but found: ${wireType}`); |
|
} |
|
|
|
/** |
|
* Checks if the object implements InternalMessage interface. |
|
* @param {?} obj |
|
* @return {!InternalMessage} |
|
*/ |
|
function checkIsInternalMessage(obj) { |
|
const message = /** @type {!InternalMessage} */ (obj); |
|
checkFunctionExists(message.internalGetKernel); |
|
return message; |
|
} |
|
|
|
/** |
|
* Checks if the instanceCreator returns an instance that implements the |
|
* InternalMessage interface. |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @template T |
|
*/ |
|
function checkInstanceCreator(instanceCreator) { |
|
if (CHECK_TYPE) { |
|
const emptyMessage = instanceCreator(Kernel.createEmpty()); |
|
checkFunctionExists(emptyMessage.internalGetKernel); |
|
} |
|
} |
|
|
|
/** |
|
* Reads the last entry of the index array using the given read function. |
|
* This is used to implement parsing singular primitive fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {function(!BufferDecoder, number):T} readFunc |
|
* @param {!WireType} wireType |
|
* @return {T} |
|
* @template T |
|
*/ |
|
function readOptional(indexArray, bufferDecoder, readFunc, wireType) { |
|
const index = indexArray.length - 1; |
|
checkElementIndex(index, indexArray.length); |
|
const indexEntry = indexArray[index]; |
|
validateWireType(indexEntry, wireType); |
|
return readFunc(bufferDecoder, Field.getStartIndex(indexEntry)); |
|
} |
|
|
|
/** |
|
* Converts all entries of the index array to the template type using given read |
|
* methods and return an Iterable containing those converted values. |
|
* Primitive repeated fields may be encoded either packed or unpacked. Thus, two |
|
* read methods are needed for those two cases. |
|
* This is used to implement parsing repeated primitive fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {function(!BufferDecoder, number):T} singularReadFunc |
|
* @param {function(!BufferDecoder, number):!Array<T>} packedReadFunc |
|
* @param {!WireType} expectedWireType |
|
* @return {!Array<T>} |
|
* @template T |
|
*/ |
|
function readRepeatedPrimitive( |
|
indexArray, bufferDecoder, singularReadFunc, packedReadFunc, |
|
expectedWireType) { |
|
// Fast path when there is a single packed entry. |
|
if (indexArray.length === 1 && |
|
Field.getWireType(indexArray[0]) === WireType.DELIMITED) { |
|
return packedReadFunc(bufferDecoder, Field.getStartIndex(indexArray[0])); |
|
} |
|
|
|
let /** !Array<T> */ result = []; |
|
for (const indexEntry of indexArray) { |
|
const wireType = Field.getWireType(indexEntry); |
|
const startIndex = Field.getStartIndex(indexEntry); |
|
if (wireType === WireType.DELIMITED) { |
|
result = result.concat(packedReadFunc(bufferDecoder, startIndex)); |
|
} else { |
|
validateWireType(indexEntry, expectedWireType); |
|
result.push(singularReadFunc(bufferDecoder, startIndex)); |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
/** |
|
* Converts all entries of the index array to the template type using the given |
|
* read function and return an Array containing those converted values. This is |
|
* used to implement parsing repeated non-primitive fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {function(!BufferDecoder, number):T} singularReadFunc |
|
* @return {!Array<T>} |
|
* @template T |
|
*/ |
|
function readRepeatedNonPrimitive(indexArray, bufferDecoder, singularReadFunc) { |
|
const result = new Array(indexArray.length); |
|
for (let i = 0; i < indexArray.length; i++) { |
|
validateWireType(indexArray[i], WireType.DELIMITED); |
|
result[i] = |
|
singularReadFunc(bufferDecoder, Field.getStartIndex(indexArray[i])); |
|
} |
|
return result; |
|
} |
|
|
|
/** |
|
* Converts all entries of the index array to the template type using the given |
|
* read function and return an Array containing those converted values. This is |
|
* used to implement parsing repeated non-primitive fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {!Array<T>} |
|
* @template T |
|
*/ |
|
function readRepeatedGroup( |
|
indexArray, bufferDecoder, fieldNumber, instanceCreator, pivot) { |
|
const result = new Array(indexArray.length); |
|
for (let i = 0; i < indexArray.length; i++) { |
|
result[i] = doReadGroup( |
|
bufferDecoder, indexArray[i], fieldNumber, instanceCreator, pivot); |
|
} |
|
return result; |
|
} |
|
|
|
/** |
|
* Creates a new bytes array to contain all data of a submessage. |
|
* When there are multiple entries, merge them together. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @return {!BufferDecoder} |
|
*/ |
|
function mergeMessageArrays(indexArray, bufferDecoder) { |
|
const dataArrays = indexArray.map( |
|
indexEntry => |
|
reader.readDelimited(bufferDecoder, Field.getStartIndex(indexEntry))); |
|
return BufferDecoder.merge(dataArrays); |
|
} |
|
|
|
/** |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {number=} pivot |
|
* @return {!Kernel} |
|
*/ |
|
function readAccessor(indexArray, bufferDecoder, pivot = undefined) { |
|
checkState(indexArray.length > 0); |
|
let accessorBuffer; |
|
// Faster access for one member. |
|
if (indexArray.length === 1) { |
|
const indexEntry = indexArray[0]; |
|
validateWireType(indexEntry, WireType.DELIMITED); |
|
accessorBuffer = |
|
reader.readDelimited(bufferDecoder, Field.getStartIndex(indexEntry)); |
|
} else { |
|
indexArray.forEach(indexEntry => { |
|
validateWireType(indexEntry, WireType.DELIMITED); |
|
}); |
|
accessorBuffer = mergeMessageArrays(indexArray, bufferDecoder); |
|
} |
|
return Kernel.fromBufferDecoder_(accessorBuffer, pivot); |
|
} |
|
|
|
/** |
|
* Merges all index entries of the index array using the given read function. |
|
* This is used to implement parsing singular message fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
function readMessage(indexArray, bufferDecoder, instanceCreator, pivot) { |
|
checkInstanceCreator(instanceCreator); |
|
const accessor = readAccessor(indexArray, bufferDecoder, pivot); |
|
return instanceCreator(accessor); |
|
} |
|
|
|
/** |
|
* Merges all index entries of the index array using the given read function. |
|
* This is used to implement parsing singular group fields. |
|
* @param {!Array<!IndexEntry>} indexArray |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
function readGroup( |
|
indexArray, bufferDecoder, fieldNumber, instanceCreator, pivot) { |
|
checkInstanceCreator(instanceCreator); |
|
checkState(indexArray.length > 0); |
|
return doReadGroup( |
|
bufferDecoder, indexArray[indexArray.length - 1], fieldNumber, |
|
instanceCreator, pivot); |
|
} |
|
|
|
/** |
|
* Merges all index entries of the index array using the given read function. |
|
* This is used to implement parsing singular message fields. |
|
* @param {!BufferDecoder} bufferDecoder |
|
* @param {!IndexEntry} indexEntry |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
function doReadGroup( |
|
bufferDecoder, indexEntry, fieldNumber, instanceCreator, pivot) { |
|
validateWireType(indexEntry, WireType.START_GROUP); |
|
const fieldStartIndex = Field.getStartIndex(indexEntry); |
|
const tag = createTag(WireType.START_GROUP, fieldNumber); |
|
const groupTagLength = get32BitVarintLength(tag); |
|
const groupLength = getTagLength( |
|
bufferDecoder, fieldStartIndex, WireType.START_GROUP, fieldNumber); |
|
const accessorBuffer = bufferDecoder.subBufferDecoder( |
|
fieldStartIndex, groupLength - groupTagLength); |
|
const kernel = Kernel.fromBufferDecoder_(accessorBuffer, pivot); |
|
return instanceCreator(kernel); |
|
} |
|
|
|
/** |
|
* @param {!Writer} writer |
|
* @param {number} fieldNumber |
|
* @param {?InternalMessage} value |
|
*/ |
|
function writeMessage(writer, fieldNumber, value) { |
|
writer.writeDelimited( |
|
fieldNumber, checkDefAndNotNull(value).internalGetKernel().serialize()); |
|
} |
|
|
|
/** |
|
* @param {!Writer} writer |
|
* @param {number} fieldNumber |
|
* @param {?InternalMessage} value |
|
*/ |
|
function writeGroup(writer, fieldNumber, value) { |
|
const kernel = checkDefAndNotNull(value).internalGetKernel(); |
|
writer.writeStartGroup(fieldNumber); |
|
kernel.serializeToWriter(writer); |
|
writer.writeEndGroup(fieldNumber); |
|
} |
|
|
|
/** |
|
* Writes the array of Messages into the writer for the given field number. |
|
* @param {!Writer} writer |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!InternalMessage>} values |
|
*/ |
|
function writeRepeatedMessage(writer, fieldNumber, values) { |
|
for (const value of values) { |
|
writeMessage(writer, fieldNumber, value); |
|
} |
|
} |
|
|
|
/** |
|
* Writes the array of Messages into the writer for the given field number. |
|
* @param {!Writer} writer |
|
* @param {number} fieldNumber |
|
* @param {!Array<!InternalMessage>} values |
|
*/ |
|
function writeRepeatedGroup(writer, fieldNumber, values) { |
|
for (const value of values) { |
|
writeGroup(writer, fieldNumber, value); |
|
} |
|
} |
|
|
|
/** |
|
* Array.from has a weird type definition in google3/javascript/externs/es6.js |
|
* and wants the mapping function accept strings. |
|
* @const {function((string|number)): number} |
|
*/ |
|
const fround = /** @type {function((string|number)): number} */ (Math.fround); |
|
|
|
/** |
|
* Wraps an array and exposes it as an Iterable. This class is used to provide |
|
* immutable access of the array to the caller. |
|
* @implements {Iterable<T>} |
|
* @template T |
|
*/ |
|
class ArrayIterable { |
|
/** |
|
* @param {!Array<T>} array |
|
*/ |
|
constructor(array) { |
|
/** @private @const {!Array<T>} */ |
|
this.array_ = array; |
|
} |
|
|
|
/** @return {!Iterator<T>} */ |
|
[Symbol.iterator]() { |
|
return this.array_[Symbol.iterator](); |
|
} |
|
} |
|
|
|
/** |
|
* Accesses protobuf fields on binary format data. Binary data is decoded lazily |
|
* at the first access. |
|
* @final |
|
*/ |
|
class Kernel { |
|
/** |
|
* Create a Kernel for the given binary bytes. |
|
* The bytes array is kept by the Kernel. DON'T MODIFY IT. |
|
* @param {!ArrayBuffer} arrayBuffer Binary bytes. |
|
* @param {number=} pivot Fields with a field number no greater than the pivot |
|
* value will be stored in an array for fast access. Other fields will be |
|
* stored in a map. A higher pivot value can improve runtime performance |
|
* at the expense of requiring more memory. It's recommended to set the |
|
* value to the max field number of the message unless the field numbers |
|
* are too sparse. If the value is not set, a default value specified in |
|
* storage.js will be used. |
|
* @return {!Kernel} |
|
*/ |
|
static fromArrayBuffer(arrayBuffer, pivot = undefined) { |
|
const bufferDecoder = BufferDecoder.fromArrayBuffer(arrayBuffer); |
|
return Kernel.fromBufferDecoder_(bufferDecoder, pivot); |
|
} |
|
|
|
/** |
|
* Creates an empty Kernel. |
|
* @param {number=} pivot Fields with a field number no greater than the pivot |
|
* value will be stored in an array for fast access. Other fields will be |
|
* stored in a map. A higher pivot value can improve runtime performance |
|
* at the expense of requiring more memory. It's recommended to set the |
|
* value to the max field number of the message unless the field numbers |
|
* are too sparse. If the value is not set, a default value specified in |
|
* storage.js will be used. |
|
* @return {!Kernel} |
|
*/ |
|
static createEmpty(pivot = undefined) { |
|
return new Kernel(/* bufferDecoder= */ null, new BinaryStorage(pivot)); |
|
} |
|
|
|
/** |
|
* Create a Kernel for the given binary bytes. |
|
* The bytes array is kept by the Kernel. DON'T MODIFY IT. |
|
* @param {!BufferDecoder} bufferDecoder Binary bytes. |
|
* @param {number|undefined} pivot |
|
* @return {!Kernel} |
|
* @private |
|
*/ |
|
static fromBufferDecoder_(bufferDecoder, pivot) { |
|
return new Kernel(bufferDecoder, buildIndex(bufferDecoder, pivot)); |
|
} |
|
|
|
/** |
|
* @param {?BufferDecoder} bufferDecoder Binary bytes. Accessor treats the |
|
* bytes as immutable and will never attempt to write to it. |
|
* @param {!Storage<!Field>} fields A map of field number to Field. The |
|
* IndexEntry in each Field needs to be populated with the location of the |
|
* field in the binary data. |
|
* @private |
|
*/ |
|
constructor(bufferDecoder, fields) { |
|
/** @private @const {?BufferDecoder} */ |
|
this.bufferDecoder_ = bufferDecoder; |
|
/** @private @const {!Storage<!Field>} */ |
|
this.fields_ = fields; |
|
} |
|
|
|
/** |
|
* Creates a shallow copy of the accessor. |
|
* @return {!Kernel} |
|
*/ |
|
shallowCopy() { |
|
return new Kernel(this.bufferDecoder_, this.fields_.shallowCopy()); |
|
} |
|
|
|
/** |
|
* See definition of the pivot parameter on the fromArrayBuffer() method. |
|
* @return {number} |
|
*/ |
|
getPivot() { |
|
return this.fields_.getPivot(); |
|
} |
|
|
|
/** |
|
* Clears the field for the given field number. |
|
* @param {number} fieldNumber |
|
*/ |
|
clearField(fieldNumber) { |
|
this.fields_.delete(fieldNumber); |
|
} |
|
|
|
/** |
|
* Returns data for a field specified by the given field number. Also cache |
|
* the data if it doesn't already exist in the cache. When no data is |
|
* available, return the given default value. |
|
* @param {number} fieldNumber |
|
* @param {?T} defaultValue |
|
* @param {function(!Array<!IndexEntry>, !BufferDecoder):T} readFunc |
|
* @param {function(!Writer, number, T)=} encoder |
|
* @return {T} |
|
* @template T |
|
* @private |
|
*/ |
|
getFieldWithDefault_( |
|
fieldNumber, defaultValue, readFunc, encoder = undefined) { |
|
checkFieldNumber(fieldNumber); |
|
|
|
const field = this.fields_.get(fieldNumber); |
|
if (field === undefined) { |
|
return defaultValue; |
|
} |
|
|
|
if (field.hasDecodedValue()) { |
|
checkState(!encoder || !!field.getEncoder()); |
|
return field.getDecodedValue(); |
|
} |
|
|
|
const parsed = readFunc( |
|
checkDefAndNotNull(field.getIndexArray()), |
|
checkDefAndNotNull(this.bufferDecoder_)); |
|
field.setCache(parsed, encoder); |
|
return parsed; |
|
} |
|
|
|
/** |
|
* Sets data for a singular field specified by the given field number. |
|
* @param {number} fieldNumber |
|
* @param {T} value |
|
* @param {function(!Writer, number, T)} encoder |
|
* @return {T} |
|
* @template T |
|
* @private |
|
*/ |
|
setField_(fieldNumber, value, encoder) { |
|
checkFieldNumber(fieldNumber); |
|
this.fields_.set(fieldNumber, Field.fromDecodedValue(value, encoder)); |
|
} |
|
|
|
/** |
|
* Serializes internal contents to binary format bytes array to the |
|
* given writer. |
|
* @param {!Writer} writer |
|
* @package |
|
*/ |
|
serializeToWriter(writer) { |
|
// If we use for...of here, jscompiler returns an array of both types for |
|
// fieldNumber and field without specifying which type is for |
|
// field, which prevents us to use fieldNumber. Thus, we use |
|
// forEach here. |
|
this.fields_.forEach((field, fieldNumber) => { |
|
// If encoder doesn't exist, there is no need to encode the value |
|
// because the data in the index is still valid. |
|
if (field.getEncoder() !== undefined) { |
|
const encoder = checkDefAndNotNull(field.getEncoder()); |
|
encoder(writer, fieldNumber, field.getDecodedValue()); |
|
return; |
|
} |
|
|
|
const indexArr = field.getIndexArray(); |
|
if (indexArr) { |
|
for (const indexEntry of indexArr) { |
|
writer.writeTag(fieldNumber, Field.getWireType(indexEntry)); |
|
writer.writeBufferDecoder( |
|
checkDefAndNotNull(this.bufferDecoder_), |
|
Field.getStartIndex(indexEntry), Field.getWireType(indexEntry), |
|
fieldNumber); |
|
} |
|
} |
|
}); |
|
} |
|
|
|
/** |
|
* Serializes internal contents to binary format bytes array. |
|
* @return {!ArrayBuffer} |
|
*/ |
|
serialize() { |
|
const writer = new Writer(); |
|
this.serializeToWriter(writer); |
|
return writer.getAndResetResultBuffer(); |
|
} |
|
|
|
/** |
|
* Returns whether data exists at the given field number. |
|
* @param {number} fieldNumber |
|
* @return {boolean} |
|
*/ |
|
hasFieldNumber(fieldNumber) { |
|
checkFieldNumber(fieldNumber); |
|
const field = this.fields_.get(fieldNumber); |
|
|
|
if (field === undefined) { |
|
return false; |
|
} |
|
|
|
if (field.getIndexArray() !== null) { |
|
return true; |
|
} |
|
|
|
if (Array.isArray(field.getDecodedValue())) { |
|
// For repeated fields, existence is decided by number of elements. |
|
return (/** !Array<?> */ (field.getDecodedValue())).length > 0; |
|
} |
|
return true; |
|
} |
|
|
|
/*************************************************************************** |
|
* OPTIONAL GETTER METHODS |
|
***************************************************************************/ |
|
|
|
/** |
|
* Returns data as boolean for the given field number. |
|
* If no default is given, use false as the default. |
|
* @param {number} fieldNumber |
|
* @param {boolean=} defaultValue |
|
* @return {boolean} |
|
*/ |
|
getBoolWithDefault(fieldNumber, defaultValue = false) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => |
|
readOptional(indexArray, bytes, reader.readBool, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns data as a ByteString for the given field number. |
|
* If no default is given, use false as the default. |
|
* @param {number} fieldNumber |
|
* @param {!ByteString=} defaultValue |
|
* @return {!ByteString} |
|
*/ |
|
getBytesWithDefault(fieldNumber, defaultValue = ByteString.EMPTY) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readBytes, WireType.DELIMITED)); |
|
} |
|
|
|
/** |
|
* Returns a double for the given field number. |
|
* If no default is given uses zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getDoubleWithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeDouble(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readDouble, WireType.FIXED64)); |
|
} |
|
|
|
/** |
|
* Returns a fixed32 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getFixed32WithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeUnsignedInt32(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readFixed32, WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns a fixed64 for the given field number. |
|
* Note: Since g.m.Long does not support unsigned int64 values we are going |
|
* the Java route here for now and simply output the number as a signed int64. |
|
* Users can get to individual bits by themselves. |
|
* @param {number} fieldNumber |
|
* @param {!Int64=} defaultValue |
|
* @return {!Int64} |
|
*/ |
|
getFixed64WithDefault(fieldNumber, defaultValue = Int64.getZero()) { |
|
return this.getSfixed64WithDefault(fieldNumber, defaultValue); |
|
} |
|
|
|
/** |
|
* Returns a float for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getFloatWithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeFloat(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readFloat, WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns a int32 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getInt32WithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeSignedInt32(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => |
|
readOptional(indexArray, bytes, reader.readInt32, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns a int64 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {!Int64=} defaultValue |
|
* @return {!Int64} |
|
*/ |
|
getInt64WithDefault(fieldNumber, defaultValue = Int64.getZero()) { |
|
checkTypeSignedInt64(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => |
|
readOptional(indexArray, bytes, reader.readInt64, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns a sfixed32 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getSfixed32WithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeSignedInt32(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readSfixed32, WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns a sfixed64 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {!Int64=} defaultValue |
|
* @return {!Int64} |
|
*/ |
|
getSfixed64WithDefault(fieldNumber, defaultValue = Int64.getZero()) { |
|
checkTypeSignedInt64(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readSfixed64, WireType.FIXED64)); |
|
} |
|
|
|
/** |
|
* Returns a sint32 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getSint32WithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeSignedInt32(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readSint32, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns a sint64 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {!Int64=} defaultValue |
|
* @return {!Int64} |
|
*/ |
|
getSint64WithDefault(fieldNumber, defaultValue = Int64.getZero()) { |
|
checkTypeSignedInt64(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readSint64, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns a string for the given field number. |
|
* If no default is given uses empty string as the default. |
|
* @param {number} fieldNumber |
|
* @param {string=} defaultValue |
|
* @return {string} |
|
*/ |
|
getStringWithDefault(fieldNumber, defaultValue = '') { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readString, WireType.DELIMITED)); |
|
} |
|
|
|
/** |
|
* Returns a uint32 for the given field number. |
|
* If no default is given zero as the default. |
|
* @param {number} fieldNumber |
|
* @param {number=} defaultValue |
|
* @return {number} |
|
*/ |
|
getUint32WithDefault(fieldNumber, defaultValue = 0) { |
|
checkTypeUnsignedInt32(defaultValue); |
|
return this.getFieldWithDefault_( |
|
fieldNumber, defaultValue, |
|
(indexArray, bytes) => readOptional( |
|
indexArray, bytes, reader.readUint32, WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns a uint64 for the given field number. |
|
* Note: Since g.m.Long does not support unsigned int64 values we are going |
|
* the Java route here for now and simply output the number as a signed int64. |
|
* Users can get to individual bits by themselves. |
|
* @param {number} fieldNumber |
|
* @param {!Int64=} defaultValue |
|
* @return {!Int64} |
|
*/ |
|
getUint64WithDefault(fieldNumber, defaultValue = Int64.getZero()) { |
|
return this.getInt64WithDefault(fieldNumber, defaultValue); |
|
} |
|
|
|
/** |
|
* Returns data as a mutable proto Message for the given field number. |
|
* If no value has been set, return null. |
|
* If hasFieldNumber(fieldNumber) == false before calling, it remains false. |
|
* |
|
* This method should not be used along with getMessage, since calling |
|
* getMessageOrNull after getMessage will not register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {?T} |
|
* @template T |
|
*/ |
|
getMessageOrNull(fieldNumber, instanceCreator, pivot = undefined) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, null, |
|
(indexArray, bytes) => |
|
readMessage(indexArray, bytes, instanceCreator, pivot), |
|
writeMessage); |
|
} |
|
|
|
/** |
|
* Returns data as a mutable proto Message for the given field number. |
|
* If no value has been set, return null. |
|
* If hasFieldNumber(fieldNumber) == false before calling, it remains false. |
|
* |
|
* This method should not be used along with getMessage, since calling |
|
* getMessageOrNull after getMessage will not register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {?T} |
|
* @template T |
|
*/ |
|
getGroupOrNull(fieldNumber, instanceCreator, pivot = undefined) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, null, |
|
(indexArray, bytes) => |
|
readGroup(indexArray, bytes, fieldNumber, instanceCreator, pivot), |
|
writeGroup); |
|
} |
|
|
|
/** |
|
* Returns data as a mutable proto Message for the given field number. |
|
* If no value has been set previously, creates and attaches an instance. |
|
* Postcondition: hasFieldNumber(fieldNumber) == true. |
|
* |
|
* This method should not be used along with getMessage, since calling |
|
* getMessageAttach after getMessage will not register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getMessageAttach(fieldNumber, instanceCreator, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
let instance = this.getMessageOrNull(fieldNumber, instanceCreator, pivot); |
|
if (!instance) { |
|
instance = instanceCreator(Kernel.createEmpty()); |
|
this.setField_(fieldNumber, instance, writeMessage); |
|
} |
|
return instance; |
|
} |
|
|
|
/** |
|
* Returns data as a mutable proto Message for the given field number. |
|
* If no value has been set previously, creates and attaches an instance. |
|
* Postcondition: hasFieldNumber(fieldNumber) == true. |
|
* |
|
* This method should not be used along with getMessage, since calling |
|
* getMessageAttach after getMessage will not register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getGroupAttach(fieldNumber, instanceCreator, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
let instance = this.getGroupOrNull(fieldNumber, instanceCreator, pivot); |
|
if (!instance) { |
|
instance = instanceCreator(Kernel.createEmpty()); |
|
this.setField_(fieldNumber, instance, writeGroup); |
|
} |
|
return instance; |
|
} |
|
|
|
/** |
|
* Returns data as a proto Message for the given field number. |
|
* If no value has been set, return a default instance. |
|
* This default instance is guaranteed to be the same instance, unless this |
|
* field is cleared. |
|
* Does not register the encoder, so changes made to the returned |
|
* sub-message will not be included when serializing the parent message. |
|
* Use getMessageAttach() if the resulting sub-message should be mutable. |
|
* |
|
* This method should not be used along with getMessageOrNull or |
|
* getMessageAttach, since these methods register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getMessage(fieldNumber, instanceCreator, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
const message = this.getFieldWithDefault_( |
|
fieldNumber, null, |
|
(indexArray, bytes) => |
|
readMessage(indexArray, bytes, instanceCreator, pivot)); |
|
// Returns an empty message as the default value if the field doesn't exist. |
|
// We don't pass the default value to getFieldWithDefault_ to reduce object |
|
// allocation. |
|
return message === null ? instanceCreator(Kernel.createEmpty()) : message; |
|
} |
|
|
|
/** |
|
* Returns data as a proto Message for the given field number. |
|
* If no value has been set, return a default instance. |
|
* This default instance is guaranteed to be the same instance, unless this |
|
* field is cleared. |
|
* Does not register the encoder, so changes made to the returned |
|
* sub-message will not be included when serializing the parent message. |
|
* Use getMessageAttach() if the resulting sub-message should be mutable. |
|
* |
|
* This method should not be used along with getMessageOrNull or |
|
* getMessageAttach, since these methods register the encoder. |
|
* |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getGroup(fieldNumber, instanceCreator, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
const message = this.getFieldWithDefault_( |
|
fieldNumber, null, |
|
(indexArray, bytes) => |
|
readGroup(indexArray, bytes, fieldNumber, instanceCreator, pivot)); |
|
// Returns an empty message as the default value if the field doesn't exist. |
|
// We don't pass the default value to getFieldWithDefault_ to reduce object |
|
// allocation. |
|
return message === null ? instanceCreator(Kernel.createEmpty()) : message; |
|
} |
|
|
|
/** |
|
* Returns the accessor for the given singular message, or returns null if |
|
* it hasn't been set. |
|
* @param {number} fieldNumber |
|
* @param {number=} pivot |
|
* @return {?Kernel} |
|
*/ |
|
getMessageAccessorOrNull(fieldNumber, pivot = undefined) { |
|
checkFieldNumber(fieldNumber); |
|
const field = this.fields_.get(fieldNumber); |
|
if (field === undefined) { |
|
return null; |
|
} |
|
|
|
if (field.hasDecodedValue()) { |
|
return checkIsInternalMessage(field.getDecodedValue()) |
|
.internalGetKernel(); |
|
} else { |
|
return readAccessor( |
|
checkDefAndNotNull(field.getIndexArray()), |
|
checkDefAndNotNull(this.bufferDecoder_), pivot); |
|
} |
|
} |
|
|
|
/*************************************************************************** |
|
* REPEATED GETTER METHODS |
|
***************************************************************************/ |
|
|
|
/* Bool */ |
|
|
|
/** |
|
* Returns an Array instance containing boolean values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<boolean>} |
|
* @private |
|
*/ |
|
getRepeatedBoolArray_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readBool, reader.readPackedBool, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {boolean} |
|
*/ |
|
getRepeatedBoolElement(fieldNumber, index) { |
|
const array = this.getRepeatedBoolArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing boolean values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<boolean>} |
|
*/ |
|
getRepeatedBoolIterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedBoolArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedBoolArray_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedBoolSize(fieldNumber) { |
|
return this.getRepeatedBoolArray_(fieldNumber).length; |
|
} |
|
|
|
/* Double */ |
|
|
|
/** |
|
* Returns an Array instance containing double values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedDoubleArray_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readDouble, reader.readPackedDouble, |
|
WireType.FIXED64)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedDoubleElement(fieldNumber, index) { |
|
const array = this.getRepeatedDoubleArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing double values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedDoubleIterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedDoubleArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedDoubleArray_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedDoubleSize(fieldNumber) { |
|
return this.getRepeatedDoubleArray_(fieldNumber).length; |
|
} |
|
|
|
/* Fixed32 */ |
|
|
|
/** |
|
* Returns an Array instance containing fixed32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedFixed32Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readFixed32, reader.readPackedFixed32, |
|
WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedFixed32Element(fieldNumber, index) { |
|
const array = this.getRepeatedFixed32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing fixed32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedFixed32Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedFixed32Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedFixed32Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedFixed32Size(fieldNumber) { |
|
return this.getRepeatedFixed32Array_(fieldNumber).length; |
|
} |
|
|
|
/* Fixed64 */ |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!Int64} |
|
*/ |
|
getRepeatedFixed64Element(fieldNumber, index) { |
|
return this.getRepeatedSfixed64Element(fieldNumber, index); |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing fixed64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!Int64>} |
|
*/ |
|
getRepeatedFixed64Iterable(fieldNumber) { |
|
return this.getRepeatedSfixed64Iterable(fieldNumber); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedFixed64Size(fieldNumber) { |
|
return this.getRepeatedSfixed64Size(fieldNumber); |
|
} |
|
|
|
/* Float */ |
|
|
|
/** |
|
* Returns an Array instance containing float values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedFloatArray_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readFloat, reader.readPackedFloat, |
|
WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedFloatElement(fieldNumber, index) { |
|
const array = this.getRepeatedFloatArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing float values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedFloatIterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedFloatArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedFloatArray_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedFloatSize(fieldNumber) { |
|
return this.getRepeatedFloatArray_(fieldNumber).length; |
|
} |
|
|
|
/* Int32 */ |
|
|
|
/** |
|
* Returns an Array instance containing int32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedInt32Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readInt32, reader.readPackedInt32, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedInt32Element(fieldNumber, index) { |
|
const array = this.getRepeatedInt32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing int32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedInt32Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedInt32Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedInt32Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedInt32Size(fieldNumber) { |
|
return this.getRepeatedInt32Array_(fieldNumber).length; |
|
} |
|
|
|
/* Int64 */ |
|
|
|
/** |
|
* Returns an Array instance containing int64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<!Int64>} |
|
* @private |
|
*/ |
|
getRepeatedInt64Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readInt64, reader.readPackedInt64, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!Int64} |
|
*/ |
|
getRepeatedInt64Element(fieldNumber, index) { |
|
const array = this.getRepeatedInt64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing int64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!Int64>} |
|
*/ |
|
getRepeatedInt64Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedInt64Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedInt64Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedInt64Size(fieldNumber) { |
|
return this.getRepeatedInt64Array_(fieldNumber).length; |
|
} |
|
|
|
/* Sfixed32 */ |
|
|
|
/** |
|
* Returns an Array instance containing sfixed32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedSfixed32Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readSfixed32, reader.readPackedSfixed32, |
|
WireType.FIXED32)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedSfixed32Element(fieldNumber, index) { |
|
const array = this.getRepeatedSfixed32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing sfixed32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedSfixed32Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedSfixed32Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedSfixed32Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedSfixed32Size(fieldNumber) { |
|
return this.getRepeatedSfixed32Array_(fieldNumber).length; |
|
} |
|
|
|
/* Sfixed64 */ |
|
|
|
/** |
|
* Returns an Array instance containing sfixed64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<!Int64>} |
|
* @private |
|
*/ |
|
getRepeatedSfixed64Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readSfixed64, reader.readPackedSfixed64, |
|
WireType.FIXED64)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!Int64} |
|
*/ |
|
getRepeatedSfixed64Element(fieldNumber, index) { |
|
const array = this.getRepeatedSfixed64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing sfixed64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!Int64>} |
|
*/ |
|
getRepeatedSfixed64Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedSfixed64Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedSfixed64Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedSfixed64Size(fieldNumber) { |
|
return this.getRepeatedSfixed64Array_(fieldNumber).length; |
|
} |
|
|
|
/* Sint32 */ |
|
|
|
/** |
|
* Returns an Array instance containing sint32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedSint32Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readSint32, reader.readPackedSint32, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedSint32Element(fieldNumber, index) { |
|
const array = this.getRepeatedSint32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing sint32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedSint32Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedSint32Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedSint32Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedSint32Size(fieldNumber) { |
|
return this.getRepeatedSint32Array_(fieldNumber).length; |
|
} |
|
|
|
/* Sint64 */ |
|
|
|
/** |
|
* Returns an Array instance containing sint64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<!Int64>} |
|
* @private |
|
*/ |
|
getRepeatedSint64Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readSint64, reader.readPackedSint64, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!Int64} |
|
*/ |
|
getRepeatedSint64Element(fieldNumber, index) { |
|
const array = this.getRepeatedSint64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing sint64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!Int64>} |
|
*/ |
|
getRepeatedSint64Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedSint64Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedSint64Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedSint64Size(fieldNumber) { |
|
return this.getRepeatedSint64Array_(fieldNumber).length; |
|
} |
|
|
|
/* Uint32 */ |
|
|
|
/** |
|
* Returns an Array instance containing uint32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<number>} |
|
* @private |
|
*/ |
|
getRepeatedUint32Array_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => readRepeatedPrimitive( |
|
indexArray, bytes, reader.readUint32, reader.readPackedUint32, |
|
WireType.VARINT)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {number} |
|
*/ |
|
getRepeatedUint32Element(fieldNumber, index) { |
|
const array = this.getRepeatedUint32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing uint32 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<number>} |
|
*/ |
|
getRepeatedUint32Iterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedUint32Array_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedUint32Array_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedUint32Size(fieldNumber) { |
|
return this.getRepeatedUint32Array_(fieldNumber).length; |
|
} |
|
|
|
/* Uint64 */ |
|
|
|
/** |
|
* Returns the element at index for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!Int64} |
|
*/ |
|
getRepeatedUint64Element(fieldNumber, index) { |
|
return this.getRepeatedInt64Element(fieldNumber, index); |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing uint64 values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!Int64>} |
|
*/ |
|
getRepeatedUint64Iterable(fieldNumber) { |
|
return this.getRepeatedInt64Iterable(fieldNumber); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedUint64Size(fieldNumber) { |
|
return this.getRepeatedInt64Size(fieldNumber); |
|
} |
|
|
|
/* Bytes */ |
|
|
|
/** |
|
* Returns an array instance containing bytes values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<!ByteString>} |
|
* @private |
|
*/ |
|
getRepeatedBytesArray_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bytes) => |
|
readRepeatedNonPrimitive(indexArray, bytes, reader.readBytes)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number as a bytes. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {!ByteString} |
|
*/ |
|
getRepeatedBytesElement(fieldNumber, index) { |
|
const array = this.getRepeatedBytesArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing bytes values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<!ByteString>} |
|
*/ |
|
getRepeatedBytesIterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedBytesArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedBytesArray_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedBytesSize(fieldNumber) { |
|
return this.getRepeatedBytesArray_(fieldNumber).length; |
|
} |
|
|
|
/* String */ |
|
|
|
/** |
|
* Returns an array instance containing string values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Array<string>} |
|
* @private |
|
*/ |
|
getRepeatedStringArray_(fieldNumber) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, /* defaultValue= */[], |
|
(indexArray, bufferDecoder) => readRepeatedNonPrimitive( |
|
indexArray, bufferDecoder, reader.readString)); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number as a string. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @return {string} |
|
*/ |
|
getRepeatedStringElement(fieldNumber, index) { |
|
const array = this.getRepeatedStringArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing string values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @return {!Iterable<string>} |
|
*/ |
|
getRepeatedStringIterable(fieldNumber) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedStringArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable(this.getRepeatedStringArray_(fieldNumber)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @return {number} |
|
*/ |
|
getRepeatedStringSize(fieldNumber) { |
|
return this.getRepeatedStringArray_(fieldNumber).length; |
|
} |
|
|
|
/* Message */ |
|
|
|
/** |
|
* Returns an Array instance containing boolean values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number|undefined} pivot |
|
* @return {!Array<T>} |
|
* @template T |
|
* @private |
|
*/ |
|
getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot) { |
|
// This method can be shortened using getFieldWithDefault and |
|
// getRepeatedNonPrimitive methods. But that will require creating and |
|
// passing a reader closure every time getRepeatedMessageArray_ is called, |
|
// which is expensive. |
|
checkInstanceCreator(instanceCreator); |
|
checkFieldNumber(fieldNumber); |
|
|
|
const field = this.fields_.get(fieldNumber); |
|
if (field === undefined) { |
|
return []; |
|
} |
|
|
|
if (field.hasDecodedValue()) { |
|
return field.getDecodedValue(); |
|
} |
|
|
|
const indexArray = checkDefAndNotNull(field.getIndexArray()); |
|
const result = new Array(indexArray.length); |
|
for (let i = 0; i < indexArray.length; i++) { |
|
validateWireType(indexArray[i], WireType.DELIMITED); |
|
const subMessageBuffer = reader.readDelimited( |
|
checkDefAndNotNull(this.bufferDecoder_), |
|
Field.getStartIndex(indexArray[i])); |
|
result[i] = |
|
instanceCreator(Kernel.fromBufferDecoder_(subMessageBuffer, pivot)); |
|
} |
|
field.setCache(result, writeRepeatedMessage); |
|
|
|
return result; |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number as a message. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number} index |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getRepeatedMessageElement( |
|
fieldNumber, instanceCreator, index, pivot = undefined) { |
|
const array = |
|
this.getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing message values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {!Iterable<T>} |
|
* @template T |
|
*/ |
|
getRepeatedMessageIterable(fieldNumber, instanceCreator, pivot = undefined) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedMessageArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable( |
|
this.getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot)); |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing message accessors for the given |
|
* field number. |
|
* @param {number} fieldNumber |
|
* @param {number=} pivot |
|
* @return {!Iterable<!Kernel>} |
|
*/ |
|
getRepeatedMessageAccessorIterable(fieldNumber, pivot = undefined) { |
|
checkFieldNumber(fieldNumber); |
|
|
|
const field = this.fields_.get(fieldNumber); |
|
if (!field) { |
|
return []; |
|
} |
|
|
|
if (field.hasDecodedValue()) { |
|
return new ArrayIterable(field.getDecodedValue().map( |
|
value => checkIsInternalMessage(value).internalGetKernel())); |
|
} |
|
|
|
const readMessageFunc = (bufferDecoder, start) => Kernel.fromBufferDecoder_( |
|
reader.readDelimited(bufferDecoder, start), pivot); |
|
const array = readRepeatedNonPrimitive( |
|
checkDefAndNotNull(field.getIndexArray()), |
|
checkDefAndNotNull(this.bufferDecoder_), readMessageFunc); |
|
return new ArrayIterable(array); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @return {number} |
|
* @param {number=} pivot |
|
* @template T |
|
*/ |
|
getRepeatedMessageSize(fieldNumber, instanceCreator, pivot = undefined) { |
|
return this.getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot) |
|
.length; |
|
} |
|
|
|
/** |
|
* Returns an Array instance containing boolean values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number|undefined} pivot |
|
* @return {!Array<T>} |
|
* @template T |
|
* @private |
|
*/ |
|
getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot) { |
|
return this.getFieldWithDefault_( |
|
fieldNumber, [], |
|
(indexArray, bufferDecoder) => readRepeatedGroup( |
|
indexArray, bufferDecoder, fieldNumber, instanceCreator, pivot), |
|
writeRepeatedGroup); |
|
} |
|
|
|
/** |
|
* Returns the element at index for the given field number as a group. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number} index |
|
* @param {number=} pivot |
|
* @return {T} |
|
* @template T |
|
*/ |
|
getRepeatedGroupElement( |
|
fieldNumber, instanceCreator, index, pivot = undefined) { |
|
const array = |
|
this.getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot); |
|
checkCriticalElementIndex(index, array.length); |
|
return array[index]; |
|
} |
|
|
|
/** |
|
* Returns an Iterable instance containing group values for the given field |
|
* number. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @param {number=} pivot |
|
* @return {!Iterable<T>} |
|
* @template T |
|
*/ |
|
getRepeatedGroupIterable(fieldNumber, instanceCreator, pivot = undefined) { |
|
// Don't split this statement unless needed. JS compiler thinks |
|
// getRepeatedMessageArray_ might have side effects and doesn't inline the |
|
// call in the compiled code. See cl/293894484 for details. |
|
return new ArrayIterable( |
|
this.getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot)); |
|
} |
|
|
|
/** |
|
* Returns the size of the repeated field. |
|
* @param {number} fieldNumber |
|
* @param {function(!Kernel):T} instanceCreator |
|
* @return {number} |
|
* @param {number=} pivot |
|
* @template T |
|
*/ |
|
getRepeatedGroupSize(fieldNumber, instanceCreator, pivot = undefined) { |
|
return this.getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot) |
|
.length; |
|
} |
|
|
|
/*************************************************************************** |
|
* OPTIONAL SETTER METHODS |
|
***************************************************************************/ |
|
|
|
/** |
|
* Sets a boolean value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {boolean} value |
|
*/ |
|
setBool(fieldNumber, value) { |
|
checkCriticalTypeBool(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeBool(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a boolean value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!ByteString} value |
|
*/ |
|
setBytes(fieldNumber, value) { |
|
checkCriticalTypeByteString(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeBytes(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a double value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setDouble(fieldNumber, value) { |
|
checkCriticalTypeDouble(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeDouble(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a fixed32 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setFixed32(fieldNumber, value) { |
|
checkCriticalTypeUnsignedInt32(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeFixed32(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a uint64 value to the field with the given field number.\ |
|
* Note: Since g.m.Long does not support unsigned int64 values we are going |
|
* the Java route here for now and simply output the number as a signed int64. |
|
* Users can get to individual bits by themselves. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
setFixed64(fieldNumber, value) { |
|
this.setSfixed64(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Sets a float value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setFloat(fieldNumber, value) { |
|
checkCriticalTypeFloat(value); |
|
// Eagerly round to 32-bit precision so that reading back after set will |
|
// yield the same value a reader will receive after serialization. |
|
const floatValue = Math.fround(value); |
|
this.setField_(fieldNumber, floatValue, (writer, fieldNumber, value) => { |
|
writer.writeFloat(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a int32 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setInt32(fieldNumber, value) { |
|
checkCriticalTypeSignedInt32(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeInt32(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a int64 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
setInt64(fieldNumber, value) { |
|
checkCriticalTypeSignedInt64(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeInt64(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a sfixed32 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setSfixed32(fieldNumber, value) { |
|
checkCriticalTypeSignedInt32(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeSfixed32(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a sfixed64 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
setSfixed64(fieldNumber, value) { |
|
checkCriticalTypeSignedInt64(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeSfixed64(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a sint32 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setSint32(fieldNumber, value) { |
|
checkCriticalTypeSignedInt32(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeSint32(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a sint64 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
setSint64(fieldNumber, value) { |
|
checkCriticalTypeSignedInt64(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeSint64(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a boolean value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {string} value |
|
*/ |
|
setString(fieldNumber, value) { |
|
checkCriticalTypeString(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeString(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a uint32 value to the field with the given field number. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
setUint32(fieldNumber, value) { |
|
checkCriticalTypeUnsignedInt32(value); |
|
this.setField_(fieldNumber, value, (writer, fieldNumber, value) => { |
|
writer.writeUint32(fieldNumber, value); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a uint64 value to the field with the given field number.\ |
|
* Note: Since g.m.Long does not support unsigned int64 values we are going |
|
* the Java route here for now and simply output the number as a signed int64. |
|
* Users can get to individual bits by themselves. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
setUint64(fieldNumber, value) { |
|
this.setInt64(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Sets a proto Group to the field with the given field number. |
|
* Instead of working with the Kernel inside of the message directly, we |
|
* need the message instance to keep its reference equality for subsequent |
|
* gettings. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
*/ |
|
setGroup(fieldNumber, value) { |
|
checkCriticalType( |
|
value !== null, 'Given value is not a message instance: null'); |
|
this.setField_(fieldNumber, value, writeGroup); |
|
} |
|
|
|
/** |
|
* Sets a proto Message to the field with the given field number. |
|
* Instead of working with the Kernel inside of the message directly, we |
|
* need the message instance to keep its reference equality for subsequent |
|
* gettings. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
*/ |
|
setMessage(fieldNumber, value) { |
|
checkCriticalType( |
|
value !== null, 'Given value is not a message instance: null'); |
|
this.setField_(fieldNumber, value, writeMessage); |
|
} |
|
|
|
/*************************************************************************** |
|
* REPEATED SETTER METHODS |
|
***************************************************************************/ |
|
|
|
/* Bool */ |
|
|
|
/** |
|
* Adds all boolean values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<boolean>} values |
|
* @param {function(!Writer, number, !Array<boolean>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedBoolIterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedBoolArray_(fieldNumber), ...values]; |
|
checkCriticalTypeBoolArray(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single boolean value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {boolean} value |
|
*/ |
|
addPackedBoolElement(fieldNumber, value) { |
|
this.addRepeatedBoolIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all boolean values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<boolean>} values |
|
*/ |
|
addPackedBoolIterable(fieldNumber, values) { |
|
this.addRepeatedBoolIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single boolean value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {boolean} value |
|
*/ |
|
addUnpackedBoolElement(fieldNumber, value) { |
|
this.addRepeatedBoolIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all boolean values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<boolean>} values |
|
*/ |
|
addUnpackedBoolIterable(fieldNumber, values) { |
|
this.addRepeatedBoolIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single boolean value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {boolean} value |
|
* @param {function(!Writer, number, !Array<boolean>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedBoolElement_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeBool(value); |
|
const array = this.getRepeatedBoolArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single boolean value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {boolean} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedBoolElement(fieldNumber, index, value) { |
|
this.setRepeatedBoolElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all boolean values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<boolean>} values |
|
*/ |
|
setPackedBoolIterable(fieldNumber, values) { |
|
const /** !Array<boolean> */ array = Array.from(values); |
|
checkCriticalTypeBoolArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single boolean value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {boolean} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedBoolElement(fieldNumber, index, value) { |
|
this.setRepeatedBoolElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all boolean values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<boolean>} values |
|
*/ |
|
setUnpackedBoolIterable(fieldNumber, values) { |
|
const /** !Array<boolean> */ array = Array.from(values); |
|
checkCriticalTypeBoolArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBool(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Double */ |
|
|
|
/** |
|
* Adds all double values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedDoubleIterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedDoubleArray_(fieldNumber), ...values]; |
|
checkCriticalTypeDoubleArray(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single double value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedDoubleElement(fieldNumber, value) { |
|
this.addRepeatedDoubleIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all double values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedDoubleIterable(fieldNumber, values) { |
|
this.addRepeatedDoubleIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single double value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedDoubleElement(fieldNumber, value) { |
|
this.addRepeatedDoubleIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all double values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedDoubleIterable(fieldNumber, values) { |
|
this.addRepeatedDoubleIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single double value into the field for the given field number at the |
|
* given index. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedDoubleElement_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeDouble(value); |
|
const array = this.getRepeatedDoubleArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single double value into the field for the given field number at the |
|
* given index. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedDoubleElement(fieldNumber, index, value) { |
|
this.setRepeatedDoubleElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all double values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedDoubleIterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeDoubleArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single double value into the field for the given field number at the |
|
* given index. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedDoubleElement(fieldNumber, index, value) { |
|
this.setRepeatedDoubleElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all double values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedDoubleIterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeDoubleArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedDouble(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Fixed32 */ |
|
|
|
/** |
|
* Adds all fixed32 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedFixed32Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedFixed32Array_(fieldNumber), ...values]; |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single fixed32 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedFixed32Element(fieldNumber, value) { |
|
this.addRepeatedFixed32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all fixed32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedFixed32Iterable(fieldNumber, values) { |
|
this.addRepeatedFixed32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single fixed32 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedFixed32Element(fieldNumber, value) { |
|
this.addRepeatedFixed32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all fixed32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedFixed32Iterable(fieldNumber, values) { |
|
this.addRepeatedFixed32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single fixed32 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedFixed32Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeUnsignedInt32(value); |
|
const array = this.getRepeatedFixed32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single fixed32 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedFixed32Element(fieldNumber, index, value) { |
|
this.setRepeatedFixed32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all fixed32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedFixed32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single fixed32 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedFixed32Element(fieldNumber, index, value) { |
|
this.setRepeatedFixed32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all fixed32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedFixed32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Fixed64 */ |
|
|
|
/** |
|
* Adds a single fixed64 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addPackedFixed64Element(fieldNumber, value) { |
|
this.addPackedSfixed64Element(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Adds all fixed64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addPackedFixed64Iterable(fieldNumber, values) { |
|
this.addPackedSfixed64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Adds a single fixed64 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addUnpackedFixed64Element(fieldNumber, value) { |
|
this.addUnpackedSfixed64Element(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Adds all fixed64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addUnpackedFixed64Iterable(fieldNumber, values) { |
|
this.addUnpackedSfixed64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Sets a single fixed64 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedFixed64Element(fieldNumber, index, value) { |
|
this.setPackedSfixed64Element(fieldNumber, index, value); |
|
} |
|
|
|
/** |
|
* Sets all fixed64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setPackedFixed64Iterable(fieldNumber, values) { |
|
this.setPackedSfixed64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Sets a single fixed64 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedFixed64Element(fieldNumber, index, value) { |
|
this.setUnpackedSfixed64Element(fieldNumber, index, value); |
|
} |
|
|
|
/** |
|
* Sets all fixed64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setUnpackedFixed64Iterable(fieldNumber, values) { |
|
this.setUnpackedSfixed64Iterable(fieldNumber, values); |
|
} |
|
|
|
/* Float */ |
|
|
|
/** |
|
* Adds all float values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedFloatIterable_(fieldNumber, values, encoder) { |
|
checkCriticalTypeFloatIterable(values); |
|
// Eagerly round to 32-bit precision so that reading back after set will |
|
// yield the same value a reader will receive after serialization. |
|
const floatValues = Array.from(values, fround); |
|
const array = [...this.getRepeatedFloatArray_(fieldNumber), ...floatValues]; |
|
checkCriticalTypeFloatIterable(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single float value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedFloatElement(fieldNumber, value) { |
|
this.addRepeatedFloatIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all float values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedFloatIterable(fieldNumber, values) { |
|
this.addRepeatedFloatIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single float value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedFloatElement(fieldNumber, value) { |
|
this.addRepeatedFloatIterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all float values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedFloatIterable(fieldNumber, values) { |
|
this.addRepeatedFloatIterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single float value into the field for the given field number at the |
|
* given index. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedFloatElement_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeFloat(value); |
|
// Eagerly round to 32-bit precision so that reading back after set will |
|
// yield the same value a reader will receive after serialization. |
|
const floatValue = Math.fround(value); |
|
const array = this.getRepeatedFloatArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = floatValue; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single float value into the field for the given field number at the |
|
* given index. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedFloatElement(fieldNumber, index, value) { |
|
this.setRepeatedFloatElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all float values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedFloatIterable(fieldNumber, values) { |
|
checkCriticalTypeFloatIterable(values); |
|
// Eagerly round to 32-bit precision so that reading back after set will |
|
// yield the same value a reader will receive after serialization. |
|
const array = Array.from(values, fround); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single float value into the field for the given field number at the |
|
* given index. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedFloatElement(fieldNumber, index, value) { |
|
this.setRepeatedFloatElement_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all float values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedFloatIterable(fieldNumber, values) { |
|
checkCriticalTypeFloatIterable(values); |
|
// Eagerly round to 32-bit precision so that reading back after set will |
|
// yield the same value a reader will receive after serialization. |
|
const array = Array.from(values, fround); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedFloat(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Int32 */ |
|
|
|
/** |
|
* Adds all int32 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedInt32Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedInt32Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt32Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single int32 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedInt32Element(fieldNumber, value) { |
|
this.addRepeatedInt32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all int32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedInt32Iterable(fieldNumber, values) { |
|
this.addRepeatedInt32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single int32 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedInt32Element(fieldNumber, value) { |
|
this.addRepeatedInt32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all int32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedInt32Iterable(fieldNumber, values) { |
|
this.addRepeatedInt32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single int32 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedInt32Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt32(value); |
|
const array = this.getRepeatedInt32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single int32 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedInt32Element(fieldNumber, index, value) { |
|
this.setRepeatedInt32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all int32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedInt32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single int32 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedInt32Element(fieldNumber, index, value) { |
|
this.setRepeatedInt32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all int32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedInt32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Int64 */ |
|
|
|
/** |
|
* Adds all int64 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedInt64Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedInt64Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt64Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single int64 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addPackedInt64Element(fieldNumber, value) { |
|
this.addRepeatedInt64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all int64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addPackedInt64Iterable(fieldNumber, values) { |
|
this.addRepeatedInt64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single int64 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addUnpackedInt64Element(fieldNumber, value) { |
|
this.addRepeatedInt64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all int64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addUnpackedInt64Iterable(fieldNumber, values) { |
|
this.addRepeatedInt64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single int64 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedInt64Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt64(value); |
|
const array = this.getRepeatedInt64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single int64 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedInt64Element(fieldNumber, index, value) { |
|
this.setRepeatedInt64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all int64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setPackedInt64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single int64 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedInt64Element(fieldNumber, index, value) { |
|
this.setRepeatedInt64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all int64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setUnpackedInt64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedInt64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Sfixed32 */ |
|
|
|
/** |
|
* Adds all sfixed32 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedSfixed32Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedSfixed32Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt32Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single sfixed32 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedSfixed32Element(fieldNumber, value) { |
|
this.addRepeatedSfixed32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sfixed32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedSfixed32Iterable(fieldNumber, values) { |
|
this.addRepeatedSfixed32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single sfixed32 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedSfixed32Element(fieldNumber, value) { |
|
this.addRepeatedSfixed32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sfixed32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedSfixed32Iterable(fieldNumber, values) { |
|
this.addRepeatedSfixed32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed32 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedSfixed32Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt32(value); |
|
const array = this.getRepeatedSfixed32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed32 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedSfixed32Element(fieldNumber, index, value) { |
|
this.setRepeatedSfixed32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sfixed32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedSfixed32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed32 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedSfixed32Element(fieldNumber, index, value) { |
|
this.setRepeatedSfixed32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sfixed32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedSfixed32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Sfixed64 */ |
|
|
|
/** |
|
* Adds all sfixed64 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedSfixed64Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedSfixed64Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt64Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single sfixed64 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addPackedSfixed64Element(fieldNumber, value) { |
|
this.addRepeatedSfixed64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sfixed64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addPackedSfixed64Iterable(fieldNumber, values) { |
|
this.addRepeatedSfixed64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single sfixed64 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addUnpackedSfixed64Element(fieldNumber, value) { |
|
this.addRepeatedSfixed64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sfixed64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addUnpackedSfixed64Iterable(fieldNumber, values) { |
|
this.addRepeatedSfixed64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed64 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedSfixed64Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt64(value); |
|
const array = this.getRepeatedSfixed64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed64 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedSfixed64Element(fieldNumber, index, value) { |
|
this.setRepeatedSfixed64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sfixed64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setPackedSfixed64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sfixed64 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedSfixed64Element(fieldNumber, index, value) { |
|
this.setRepeatedSfixed64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sfixed64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setUnpackedSfixed64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSfixed64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Sint32 */ |
|
|
|
/** |
|
* Adds all sint32 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedSint32Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedSint32Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt32Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single sint32 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedSint32Element(fieldNumber, value) { |
|
this.addRepeatedSint32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sint32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedSint32Iterable(fieldNumber, values) { |
|
this.addRepeatedSint32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single sint32 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedSint32Element(fieldNumber, value) { |
|
this.addRepeatedSint32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sint32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedSint32Iterable(fieldNumber, values) { |
|
this.addRepeatedSint32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sint32 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedSint32Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt32(value); |
|
const array = this.getRepeatedSint32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single sint32 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedSint32Element(fieldNumber, index, value) { |
|
this.setRepeatedSint32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sint32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedSint32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sint32 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedSint32Element(fieldNumber, index, value) { |
|
this.setRepeatedSint32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sint32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedSint32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Sint64 */ |
|
|
|
/** |
|
* Adds all sint64 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedSint64Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedSint64Array_(fieldNumber), ...values]; |
|
checkCriticalTypeSignedInt64Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single sint64 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addPackedSint64Element(fieldNumber, value) { |
|
this.addRepeatedSint64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sint64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addPackedSint64Iterable(fieldNumber, values) { |
|
this.addRepeatedSint64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single sint64 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addUnpackedSint64Element(fieldNumber, value) { |
|
this.addRepeatedSint64Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all sint64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addUnpackedSint64Iterable(fieldNumber, values) { |
|
this.addRepeatedSint64Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sint64 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @param {function(!Writer, number, !Array<!Int64>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedSint64Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeSignedInt64(value); |
|
const array = this.getRepeatedSint64Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single sint64 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedSint64Element(fieldNumber, index, value) { |
|
this.setRepeatedSint64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sint64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setPackedSint64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single sint64 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedSint64Element(fieldNumber, index, value) { |
|
this.setRepeatedSint64Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all sint64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setUnpackedSint64Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeSignedInt64Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedSint64(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Uint32 */ |
|
|
|
/** |
|
* Adds all uint32 values into the field for the given field number. |
|
* How these values are encoded depends on the given write function. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @private |
|
*/ |
|
addRepeatedUint32Iterable_(fieldNumber, values, encoder) { |
|
const array = [...this.getRepeatedUint32Array_(fieldNumber), ...values]; |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Adds a single uint32 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addPackedUint32Element(fieldNumber, value) { |
|
this.addRepeatedUint32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writePackedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all uint32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addPackedUint32Iterable(fieldNumber, values) { |
|
this.addRepeatedUint32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writePackedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single uint32 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} value |
|
*/ |
|
addUnpackedUint32Element(fieldNumber, value) { |
|
this.addRepeatedUint32Iterable_( |
|
fieldNumber, [value], (writer, fieldNumber, values) => { |
|
writer.writeRepeatedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all uint32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
addUnpackedUint32Iterable(fieldNumber, values) { |
|
this.addRepeatedUint32Iterable_( |
|
fieldNumber, values, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single uint32 value into the field for the given field number at |
|
* the given index. How these values are encoded depends on the given write |
|
* function. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @param {function(!Writer, number, !Array<number>): undefined} encoder |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
* @private |
|
*/ |
|
setRepeatedUint32Element_(fieldNumber, index, value, encoder) { |
|
checkCriticalTypeUnsignedInt32(value); |
|
const array = this.getRepeatedUint32Array_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, encoder); |
|
} |
|
|
|
/** |
|
* Sets a single uint32 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedUint32Element(fieldNumber, index, value) { |
|
this.setRepeatedUint32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writePackedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all uint32 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setPackedUint32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writePackedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single uint32 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {number} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedUint32Element(fieldNumber, index, value) { |
|
this.setRepeatedUint32Element_( |
|
fieldNumber, index, value, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets all uint32 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<number>} values |
|
*/ |
|
setUnpackedUint32Iterable(fieldNumber, values) { |
|
const array = Array.from(values); |
|
checkCriticalTypeUnsignedInt32Array(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedUint32(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/* Uint64 */ |
|
|
|
/** |
|
* Adds a single uint64 value into the field for the given field number. |
|
* All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addPackedUint64Element(fieldNumber, value) { |
|
this.addPackedInt64Element(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Adds all uint64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addPackedUint64Iterable(fieldNumber, values) { |
|
this.addPackedInt64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Adds a single uint64 value into the field for the given field number. |
|
* All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Int64} value |
|
*/ |
|
addUnpackedUint64Element(fieldNumber, value) { |
|
this.addUnpackedInt64Element(fieldNumber, value); |
|
} |
|
|
|
/** |
|
* Adds all uint64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
addUnpackedUint64Iterable(fieldNumber, values) { |
|
this.addUnpackedInt64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Sets a single uint64 value into the field for the given field number at |
|
* the given index. All values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setPackedUint64Element(fieldNumber, index, value) { |
|
this.setPackedInt64Element(fieldNumber, index, value); |
|
} |
|
|
|
/** |
|
* Sets all uint64 values into the field for the given field number. |
|
* All these values will be encoded as packed values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setPackedUint64Iterable(fieldNumber, values) { |
|
this.setPackedInt64Iterable(fieldNumber, values); |
|
} |
|
|
|
/** |
|
* Sets a single uint64 value into the field for the given field number at |
|
* the given index. All values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!Int64} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setUnpackedUint64Element(fieldNumber, index, value) { |
|
this.setUnpackedInt64Element(fieldNumber, index, value); |
|
} |
|
|
|
/** |
|
* Sets all uint64 values into the field for the given field number. |
|
* All these values will be encoded as unpacked values. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!Int64>} values |
|
*/ |
|
setUnpackedUint64Iterable(fieldNumber, values) { |
|
this.setUnpackedInt64Iterable(fieldNumber, values); |
|
} |
|
|
|
/* Bytes */ |
|
|
|
/** |
|
* Sets all bytes values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!ByteString>} values |
|
*/ |
|
setRepeatedBytesIterable(fieldNumber, values) { |
|
const /** !Array<!ByteString> */ array = Array.from(values); |
|
checkCriticalTypeByteStringArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBytes(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all bytes values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!ByteString>} values |
|
*/ |
|
addRepeatedBytesIterable(fieldNumber, values) { |
|
const array = [...this.getRepeatedBytesArray_(fieldNumber), ...values]; |
|
checkCriticalTypeByteStringArray(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBytes(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single bytes value into the field for the given field number at |
|
* the given index. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {!ByteString} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setRepeatedBytesElement(fieldNumber, index, value) { |
|
checkCriticalTypeByteString(value); |
|
const array = this.getRepeatedBytesArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedBytes(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single bytes value into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!ByteString} value |
|
*/ |
|
addRepeatedBytesElement(fieldNumber, value) { |
|
this.addRepeatedBytesIterable(fieldNumber, [value]); |
|
} |
|
|
|
/* String */ |
|
|
|
/** |
|
* Sets all string values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<string>} values |
|
*/ |
|
setRepeatedStringIterable(fieldNumber, values) { |
|
const /** !Array<string> */ array = Array.from(values); |
|
checkCriticalTypeStringArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedString(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all string values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<string>} values |
|
*/ |
|
addRepeatedStringIterable(fieldNumber, values) { |
|
const array = [...this.getRepeatedStringArray_(fieldNumber), ...values]; |
|
checkCriticalTypeStringArray(array); |
|
// Needs to set it back because the default empty array was not cached. |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedString(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Sets a single string value into the field for the given field number at |
|
* the given index. |
|
* @param {number} fieldNumber |
|
* @param {number} index |
|
* @param {string} value |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setRepeatedStringElement(fieldNumber, index, value) { |
|
checkCriticalTypeString(value); |
|
const array = this.getRepeatedStringArray_(fieldNumber); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
// Needs to set it back to set encoder. |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writer.writeRepeatedString(fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds a single string value into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {string} value |
|
*/ |
|
addRepeatedStringElement(fieldNumber, value) { |
|
this.addRepeatedStringIterable(fieldNumber, [value]); |
|
} |
|
|
|
/* Message */ |
|
|
|
/** |
|
* Sets all message values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!InternalMessage>} values |
|
*/ |
|
setRepeatedMessageIterable(fieldNumber, values) { |
|
const /** !Array<!InternalMessage> */ array = Array.from(values); |
|
checkCriticalTypeMessageArray(array); |
|
this.setField_(fieldNumber, array, (writer, fieldNumber, values) => { |
|
writeRepeatedMessage(writer, fieldNumber, values); |
|
}); |
|
} |
|
|
|
/** |
|
* Adds all message values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!InternalMessage>} values |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number=} pivot |
|
*/ |
|
addRepeatedMessageIterable( |
|
fieldNumber, values, instanceCreator, pivot = undefined) { |
|
const array = [ |
|
...this.getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot), |
|
...values, |
|
]; |
|
checkCriticalTypeMessageArray(array); |
|
// Needs to set it back with the new array. |
|
this.setField_( |
|
fieldNumber, array, |
|
(writer, fieldNumber, values) => |
|
writeRepeatedMessage(writer, fieldNumber, values)); |
|
} |
|
|
|
/** |
|
* Sets a single message value into the field for the given field number at |
|
* the given index. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number} index |
|
* @param {number=} pivot |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setRepeatedMessageElement( |
|
fieldNumber, value, instanceCreator, index, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
checkCriticalType( |
|
value !== null, 'Given value is not a message instance: null'); |
|
const array = |
|
this.getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
} |
|
|
|
/** |
|
* Adds a single message value into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number=} pivot |
|
*/ |
|
addRepeatedMessageElement( |
|
fieldNumber, value, instanceCreator, pivot = undefined) { |
|
this.addRepeatedMessageIterable( |
|
fieldNumber, [value], instanceCreator, pivot); |
|
} |
|
|
|
// Groups |
|
/** |
|
* Sets all message values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!InternalMessage>} values |
|
*/ |
|
setRepeatedGroupIterable(fieldNumber, values) { |
|
const /** !Array<!InternalMessage> */ array = Array.from(values); |
|
checkCriticalTypeMessageArray(array); |
|
this.setField_(fieldNumber, array, writeRepeatedGroup); |
|
} |
|
|
|
/** |
|
* Adds all message values into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!Iterable<!InternalMessage>} values |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number=} pivot |
|
*/ |
|
addRepeatedGroupIterable( |
|
fieldNumber, values, instanceCreator, pivot = undefined) { |
|
const array = [ |
|
...this.getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot), |
|
...values, |
|
]; |
|
checkCriticalTypeMessageArray(array); |
|
// Needs to set it back with the new array. |
|
this.setField_(fieldNumber, array, writeRepeatedGroup); |
|
} |
|
|
|
/** |
|
* Sets a single message value into the field for the given field number at |
|
* the given index. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number} index |
|
* @param {number=} pivot |
|
* @throws {!Error} if index is out of range when check mode is critical |
|
*/ |
|
setRepeatedGroupElement( |
|
fieldNumber, value, instanceCreator, index, pivot = undefined) { |
|
checkInstanceCreator(instanceCreator); |
|
checkCriticalType( |
|
value !== null, 'Given value is not a message instance: null'); |
|
const array = |
|
this.getRepeatedGroupArray_(fieldNumber, instanceCreator, pivot); |
|
checkCriticalElementIndex(index, array.length); |
|
array[index] = value; |
|
} |
|
|
|
/** |
|
* Adds a single message value into the field for the given field number. |
|
* @param {number} fieldNumber |
|
* @param {!InternalMessage} value |
|
* @param {function(!Kernel):!InternalMessage} instanceCreator |
|
* @param {number=} pivot |
|
*/ |
|
addRepeatedGroupElement( |
|
fieldNumber, value, instanceCreator, pivot = undefined) { |
|
this.addRepeatedGroupIterable(fieldNumber, [value], instanceCreator, pivot); |
|
} |
|
} |
|
|
|
exports = Kernel;
|
|
|