|
|
|
@ -1482,18 +1482,35 @@ class LazyAccessor { |
|
|
|
|
* @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); |
|
|
|
|
const bytesInstanceCreator = (bufferDecoder) => |
|
|
|
|
instanceCreator(LazyAccessor.fromBufferDecoder_(bufferDecoder, pivot)); |
|
|
|
|
const readMessageFunc = (bufferDecoder, start) => |
|
|
|
|
bytesInstanceCreator(reader.readDelimited(bufferDecoder, start)); |
|
|
|
|
checkFieldNumber(fieldNumber); |
|
|
|
|
|
|
|
|
|
const readRepeatedMessageFunc = (indexArray, bufferDecoder) => |
|
|
|
|
readRepeatedNonPrimitive(indexArray, bufferDecoder, readMessageFunc); |
|
|
|
|
const encoder = (writer, fieldNumber, values) => |
|
|
|
|
writeRepeatedMessage(writer, fieldNumber, values); |
|
|
|
|
return this.getFieldWithDefault_( |
|
|
|
|
fieldNumber, /* defaultValue= */[], readRepeatedMessageFunc, encoder); |
|
|
|
|
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( |
|
|
|
|
LazyAccessor.fromBufferDecoder_(subMessageBuffer, pivot)); |
|
|
|
|
} |
|
|
|
|
field.setCache(result, writeRepeatedMessage); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|