blob: 5b2659c657730e11f3c0aab821daeec00f8ae58a [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of protobuf;
const int TAG_TYPE_BITS = 3;
const int TAG_TYPE_MASK = (1 << TAG_TYPE_BITS) - 1;
const int WIRETYPE_VARINT = 0;
const int WIRETYPE_FIXED64 = 1;
const int WIRETYPE_LENGTH_DELIMITED = 2;
const int WIRETYPE_START_GROUP = 3;
const int WIRETYPE_END_GROUP = 4;
const int WIRETYPE_FIXED32 = 5;
int getTagFieldNumber(int tag) => (tag & 0x7fffffff) >> TAG_TYPE_BITS;
int getTagWireType(int tag) => tag & TAG_TYPE_MASK;
int makeTag(int fieldNumber, int tag) => (fieldNumber << TAG_TYPE_BITS) | tag;
/// Returns true if the wireType can be merged into the given fieldType.
bool _wireTypeMatches(int fieldType, int wireType) {
switch (PbFieldType._baseType(fieldType)) {
case PbFieldType._BOOL_BIT:
case PbFieldType._ENUM_BIT:
case PbFieldType._INT32_BIT:
case PbFieldType._INT64_BIT:
case PbFieldType._SINT32_BIT:
case PbFieldType._SINT64_BIT:
case PbFieldType._UINT32_BIT:
case PbFieldType._UINT64_BIT:
return wireType == WIRETYPE_VARINT ||
wireType == WIRETYPE_LENGTH_DELIMITED;
case PbFieldType._FLOAT_BIT:
case PbFieldType._FIXED32_BIT:
case PbFieldType._SFIXED32_BIT:
return wireType == WIRETYPE_FIXED32 ||
wireType == WIRETYPE_LENGTH_DELIMITED;
case PbFieldType._DOUBLE_BIT:
case PbFieldType._FIXED64_BIT:
case PbFieldType._SFIXED64_BIT:
return wireType == WIRETYPE_FIXED64 ||
wireType == WIRETYPE_LENGTH_DELIMITED;
case PbFieldType._BYTES_BIT:
case PbFieldType._STRING_BIT:
case PbFieldType._MESSAGE_BIT:
return wireType == WIRETYPE_LENGTH_DELIMITED;
case PbFieldType._GROUP_BIT:
return wireType == WIRETYPE_START_GROUP;
default:
return false;
}
}