1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2013 Google Inc. All rights reserved. 3 // https://developers.google.com/protocol-buffers/ 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 // 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 // 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 package com.google.protobuf.nano; 32 33 import java.io.IOException; 34 import java.util.Arrays; 35 36 /** 37 * Stores unknown fields. These might be extensions or fields that the generated 38 * API doesn't know about yet. 39 * 40 * @author bduff@google.com (Brian Duff) 41 */ 42 final class UnknownFieldData { 43 44 final int tag; 45 /** 46 * Important: this should be treated as immutable, even though it's possible 47 * to change the array values. 48 */ 49 final byte[] bytes; 50 UnknownFieldData(int tag, byte[] bytes)51 UnknownFieldData(int tag, byte[] bytes) { 52 this.tag = tag; 53 this.bytes = bytes; 54 } 55 computeSerializedSize()56 int computeSerializedSize() { 57 int size = 0; 58 size += CodedOutputByteBufferNano.computeRawVarint32Size(tag); 59 size += bytes.length; 60 return size; 61 } 62 writeTo(CodedOutputByteBufferNano output)63 void writeTo(CodedOutputByteBufferNano output) throws IOException { 64 output.writeRawVarint32(tag); 65 output.writeRawBytes(bytes); 66 } 67 68 @Override equals(Object o)69 public boolean equals(Object o) { 70 if (o == this) { 71 return true; 72 } 73 if (!(o instanceof UnknownFieldData)) { 74 return false; 75 } 76 77 UnknownFieldData other = (UnknownFieldData) o; 78 return tag == other.tag && Arrays.equals(bytes, other.bytes); 79 } 80 81 @Override hashCode()82 public int hashCode() { 83 int result = 17; 84 result = 31 * result + tag; 85 result = 31 * result + Arrays.hashCode(bytes); 86 return result; 87 } 88 } 89