| Index: third_party/protobuf/java/src/main/java/com/google/protobuf/MapEntryLite.java
|
| diff --git a/third_party/protobuf/java/src/main/java/com/google/protobuf/MapEntryLite.java b/third_party/protobuf/java/src/main/java/com/google/protobuf/MapEntryLite.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bcffa9461784bd4eb7bee22a10729cd43d1788f7
|
| --- /dev/null
|
| +++ b/third_party/protobuf/java/src/main/java/com/google/protobuf/MapEntryLite.java
|
| @@ -0,0 +1,331 @@
|
| +// Protocol Buffers - Google's data interchange format
|
| +// Copyright 2008 Google Inc. All rights reserved.
|
| +// https://developers.google.com/protocol-buffers/
|
| +//
|
| +// Redistribution and use in source and binary forms, with or without
|
| +// modification, are permitted provided that the following conditions are
|
| +// met:
|
| +//
|
| +// * Redistributions of source code must retain the above copyright
|
| +// notice, this list of conditions and the following disclaimer.
|
| +// * Redistributions in binary form must reproduce the above
|
| +// copyright notice, this list of conditions and the following disclaimer
|
| +// in the documentation and/or other materials provided with the
|
| +// distribution.
|
| +// * Neither the name of Google Inc. nor the names of its
|
| +// contributors may be used to endorse or promote products derived from
|
| +// this software without specific prior written permission.
|
| +//
|
| +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +package com.google.protobuf;
|
| +
|
| +import java.io.IOException;
|
| +
|
| +/**
|
| + * Implements the lite version of map entry messages.
|
| + *
|
| + * This class serves as an utility class to help do serialization/parsing of
|
| + * map entries. It's used in generated code and also in the full version
|
| + * MapEntry message.
|
| + *
|
| + * Protobuf internal. Users shouldn't use.
|
| + */
|
| +public class MapEntryLite<K, V> extends AbstractMessageLite {
|
| + private static class Metadata<K, V> {
|
| + public final MapEntryLite<K, V> defaultInstance;
|
| + public final WireFormat.FieldType keyType;
|
| + public final WireFormat.FieldType valueType;
|
| + public final Parser<MapEntryLite<K, V>> parser;
|
| + public Metadata(
|
| + MapEntryLite<K, V> defaultInstance,
|
| + WireFormat.FieldType keyType,
|
| + WireFormat.FieldType valueType) {
|
| + this.defaultInstance = defaultInstance;
|
| + this.keyType = keyType;
|
| + this.valueType = valueType;
|
| + final Metadata<K, V> finalThis = this;
|
| + this.parser = new AbstractParser<MapEntryLite<K, V>>() {
|
| + @Override
|
| + public MapEntryLite<K, V> parsePartialFrom(
|
| + CodedInputStream input, ExtensionRegistryLite extensionRegistry)
|
| + throws InvalidProtocolBufferException {
|
| + return new MapEntryLite<K, V>(finalThis, input, extensionRegistry);
|
| + }
|
| + };
|
| + }
|
| + }
|
| +
|
| + private static final int KEY_FIELD_NUMBER = 1;
|
| + private static final int VALUE_FIELD_NUMBER = 2;
|
| +
|
| + private final Metadata<K, V> metadata;
|
| + private final K key;
|
| + private final V value;
|
| +
|
| + /** Creates a default MapEntryLite message instance. */
|
| + private MapEntryLite(
|
| + WireFormat.FieldType keyType, K defaultKey,
|
| + WireFormat.FieldType valueType, V defaultValue) {
|
| + this.metadata = new Metadata<K, V>(this, keyType, valueType);
|
| + this.key = defaultKey;
|
| + this.value = defaultValue;
|
| + }
|
| +
|
| + /** Creates a new MapEntryLite message. */
|
| + private MapEntryLite(Metadata<K, V> metadata, K key, V value) {
|
| + this.metadata = metadata;
|
| + this.key = key;
|
| + this.value = value;
|
| + }
|
| +
|
| + public K getKey() {
|
| + return key;
|
| + }
|
| +
|
| + public V getValue() {
|
| + return value;
|
| + }
|
| +
|
| + /**
|
| + * Creates a default MapEntryLite message instance.
|
| + *
|
| + * This method is used by generated code to create the default instance for
|
| + * a map entry message. The created default instance should be used to create
|
| + * new map entry messages of the same type. For each map entry message, only
|
| + * one default instance should be created.
|
| + */
|
| + public static <K, V> MapEntryLite<K, V> newDefaultInstance(
|
| + WireFormat.FieldType keyType, K defaultKey,
|
| + WireFormat.FieldType valueType, V defaultValue) {
|
| + return new MapEntryLite<K, V>(
|
| + keyType, defaultKey, valueType, defaultValue);
|
| + }
|
| +
|
| + @Override
|
| + public void writeTo(CodedOutputStream output) throws IOException {
|
| + writeField(KEY_FIELD_NUMBER, metadata.keyType, key, output);
|
| + writeField(VALUE_FIELD_NUMBER, metadata.valueType, value, output);
|
| + }
|
| +
|
| + private void writeField(
|
| + int number, WireFormat.FieldType type, Object value,
|
| + CodedOutputStream output) throws IOException {
|
| + output.writeTag(number, type.getWireType());
|
| + FieldSet.writeElementNoTag(output, type, value);
|
| + }
|
| +
|
| + private volatile int cachedSerializedSize = -1;
|
| + @Override
|
| + public int getSerializedSize() {
|
| + if (cachedSerializedSize != -1) {
|
| + return cachedSerializedSize;
|
| + }
|
| + int size = 0;
|
| + size += getFieldSize(KEY_FIELD_NUMBER, metadata.keyType, key);
|
| + size += getFieldSize(VALUE_FIELD_NUMBER, metadata.valueType, value);
|
| + cachedSerializedSize = size;
|
| + return size;
|
| + }
|
| +
|
| + private int getFieldSize(
|
| + int number, WireFormat.FieldType type, Object value) {
|
| + return CodedOutputStream.computeTagSize(number)
|
| + + FieldSet.computeElementSizeNoTag(type, value);
|
| + }
|
| +
|
| + /** Parsing constructor. */
|
| + private MapEntryLite(
|
| + Metadata<K, V> metadata,
|
| + CodedInputStream input,
|
| + ExtensionRegistryLite extensionRegistry)
|
| + throws InvalidProtocolBufferException {
|
| + try {
|
| + K key = metadata.defaultInstance.key;
|
| + V value = metadata.defaultInstance.value;
|
| + while (true) {
|
| + int tag = input.readTag();
|
| + if (tag == 0) {
|
| + break;
|
| + }
|
| + if (tag == WireFormat.makeTag(
|
| + KEY_FIELD_NUMBER, metadata.keyType.getWireType())) {
|
| + key = mergeField(
|
| + input, extensionRegistry, metadata.keyType, key);
|
| + } else if (tag == WireFormat.makeTag(
|
| + VALUE_FIELD_NUMBER, metadata.valueType.getWireType())) {
|
| + value = mergeField(
|
| + input, extensionRegistry, metadata.valueType, value);
|
| + } else {
|
| + if (!input.skipField(tag)) {
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + this.metadata = metadata;
|
| + this.key = key;
|
| + this.value = value;
|
| + } catch (InvalidProtocolBufferException e) {
|
| + throw e.setUnfinishedMessage(this);
|
| + } catch (IOException e) {
|
| + throw new InvalidProtocolBufferException(e.getMessage())
|
| + .setUnfinishedMessage(this);
|
| + }
|
| + }
|
| +
|
| + @SuppressWarnings("unchecked")
|
| + private <T> T mergeField(
|
| + CodedInputStream input, ExtensionRegistryLite extensionRegistry,
|
| + WireFormat.FieldType type, T value) throws IOException {
|
| + switch (type) {
|
| + case MESSAGE:
|
| + MessageLite.Builder subBuilder = ((MessageLite) value).toBuilder();
|
| + input.readMessage(subBuilder, extensionRegistry);
|
| + return (T) subBuilder.buildPartial();
|
| + case ENUM:
|
| + return (T) (java.lang.Integer) input.readEnum();
|
| + case GROUP:
|
| + throw new RuntimeException("Groups are not allowed in maps.");
|
| + default:
|
| + return (T) FieldSet.readPrimitiveField(input, type, true);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public Parser<MapEntryLite<K, V>> getParserForType() {
|
| + return metadata.parser;
|
| + }
|
| +
|
| + @Override
|
| + public Builder<K, V> newBuilderForType() {
|
| + return new Builder<K, V>(metadata);
|
| + }
|
| +
|
| + @Override
|
| + public Builder<K, V> toBuilder() {
|
| + return new Builder<K, V>(metadata, key, value);
|
| + }
|
| +
|
| + @Override
|
| + public MapEntryLite<K, V> getDefaultInstanceForType() {
|
| + return metadata.defaultInstance;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isInitialized() {
|
| + if (metadata.valueType.getJavaType() == WireFormat.JavaType.MESSAGE) {
|
| + return ((MessageLite) value).isInitialized();
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * Builder used to create {@link MapEntryLite} messages.
|
| + */
|
| + public static class Builder<K, V>
|
| + extends AbstractMessageLite.Builder<Builder<K, V>> {
|
| + private final Metadata<K, V> metadata;
|
| + private K key;
|
| + private V value;
|
| +
|
| + private Builder(Metadata<K, V> metadata) {
|
| + this.metadata = metadata;
|
| + this.key = metadata.defaultInstance.key;
|
| + this.value = metadata.defaultInstance.value;
|
| + }
|
| +
|
| + public K getKey() {
|
| + return key;
|
| + }
|
| +
|
| + public V getValue() {
|
| + return value;
|
| + }
|
| +
|
| + public Builder<K, V> setKey(K key) {
|
| + this.key = key;
|
| + return this;
|
| + }
|
| +
|
| + public Builder<K, V> setValue(V value) {
|
| + this.value = value;
|
| + return this;
|
| + }
|
| +
|
| + public Builder<K, V> clearKey() {
|
| + this.key = metadata.defaultInstance.key;
|
| + return this;
|
| + }
|
| +
|
| + public Builder<K, V> clearValue() {
|
| + this.value = metadata.defaultInstance.value;
|
| + return this;
|
| + }
|
| +
|
| + @Override
|
| + public Builder<K, V> clear() {
|
| + this.key = metadata.defaultInstance.key;
|
| + this.value = metadata.defaultInstance.value;
|
| + return this;
|
| + }
|
| +
|
| + @Override
|
| + public MapEntryLite<K, V> build() {
|
| + MapEntryLite<K, V> result = buildPartial();
|
| + if (!result.isInitialized()) {
|
| + throw newUninitializedMessageException(result);
|
| + }
|
| + return result;
|
| + }
|
| +
|
| + @Override
|
| + public MapEntryLite<K, V> buildPartial() {
|
| + return new MapEntryLite<K, V>(metadata, key, value);
|
| + }
|
| +
|
| + @Override
|
| + public MessageLite getDefaultInstanceForType() {
|
| + return metadata.defaultInstance;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isInitialized() {
|
| + if (metadata.valueType.getJavaType() == WireFormat.JavaType.MESSAGE) {
|
| + return ((MessageLite) value).isInitialized();
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + private Builder(Metadata<K, V> metadata, K key, V value) {
|
| + this.metadata = metadata;
|
| + this.key = key;
|
| + this.value = value;
|
| + }
|
| +
|
| + @Override
|
| + public Builder<K, V> clone() {
|
| + return new Builder<K, V>(metadata, key, value);
|
| + }
|
| +
|
| + @Override
|
| + public Builder<K, V> mergeFrom(
|
| + CodedInputStream input, ExtensionRegistryLite extensionRegistry)
|
| + throws IOException {
|
| + MapEntryLite<K, V> entry =
|
| + new MapEntryLite<K, V>(metadata, input, extensionRegistry);
|
| + this.key = entry.key;
|
| + this.value = entry.value;
|
| + return this;
|
| + }
|
| + }
|
| +}
|
|
|