UnknownFieldData.java revision cf1b416ae1327a26dd53a691fc1b3e30eec8e6a6
1// Protocol Buffers - Google's data interchange format
2// Copyright 2013 Google Inc.  All rights reserved.
3// http://code.google.com/p/protobuf/
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
31package com.google.protobuf.nano;
32
33import java.io.IOException;
34import 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 */
42final class UnknownFieldData {
43
44    final int tag;
45    final byte[] bytes;
46
47    UnknownFieldData(int tag, byte[] bytes) {
48        this.tag = tag;
49        this.bytes = bytes;
50    }
51
52    int computeSerializedSize() {
53        int size = 0;
54        size += CodedOutputByteBufferNano.computeRawVarint32Size(tag);
55        size += bytes.length;
56        return size;
57    }
58
59    void writeTo(CodedOutputByteBufferNano output) throws IOException {
60        output.writeRawVarint32(tag);
61        output.writeRawBytes(bytes);
62    }
63
64    @Override
65    public boolean equals(Object o) {
66        if (o == this) {
67            return true;
68        }
69        if (!(o instanceof UnknownFieldData)) {
70            return false;
71        }
72
73        UnknownFieldData other = (UnknownFieldData) o;
74        return tag == other.tag && Arrays.equals(bytes, other.bytes);
75    }
76
77    @Override
78    public int hashCode() {
79        int result = 17;
80        result = 31 * result + tag;
81        result = 31 * result + Arrays.hashCode(bytes);
82        return result;
83    }
84}
85