Loading api/test-current.txt +15 −15 Original line number Diff line number Diff line Loading @@ -44977,25 +44977,25 @@ package android.util.proto { field public static final long FIELD_COUNT_UNKNOWN = 0L; // 0x0L field public static final int FIELD_ID_MASK = -8; // 0xfffffff8 field public static final int FIELD_ID_SHIFT = 3; // 0x3 field public static final long FIELD_TYPE_BOOL = 55834574848L; // 0xd00000000L field public static final long FIELD_TYPE_BYTES = 64424509440L; // 0xf00000000L field public static final long FIELD_TYPE_BOOL = 34359738368L; // 0x800000000L field public static final long FIELD_TYPE_BYTES = 51539607552L; // 0xc00000000L field public static final long FIELD_TYPE_DOUBLE = 4294967296L; // 0x100000000L field public static final long FIELD_TYPE_ENUM = 68719476736L; // 0x1000000000L field public static final long FIELD_TYPE_FIXED32 = 38654705664L; // 0x900000000L field public static final long FIELD_TYPE_FIXED64 = 42949672960L; // 0xa00000000L field public static final long FIELD_TYPE_ENUM = 60129542144L; // 0xe00000000L field public static final long FIELD_TYPE_FIXED32 = 30064771072L; // 0x700000000L field public static final long FIELD_TYPE_FIXED64 = 25769803776L; // 0x600000000L field public static final long FIELD_TYPE_FLOAT = 8589934592L; // 0x200000000L field public static final long FIELD_TYPE_INT32 = 12884901888L; // 0x300000000L field public static final long FIELD_TYPE_INT64 = 17179869184L; // 0x400000000L field public static final long FIELD_TYPE_INT32 = 21474836480L; // 0x500000000L field public static final long FIELD_TYPE_INT64 = 12884901888L; // 0x300000000L field public static final long FIELD_TYPE_MASK = 1095216660480L; // 0xff00000000L field public static final long FIELD_TYPE_OBJECT = 73014444032L; // 0x1100000000L field public static final long FIELD_TYPE_SFIXED32 = 47244640256L; // 0xb00000000L field public static final long FIELD_TYPE_SFIXED64 = 51539607552L; // 0xc00000000L field public static final long FIELD_TYPE_MESSAGE = 47244640256L; // 0xb00000000L field public static final long FIELD_TYPE_SFIXED32 = 64424509440L; // 0xf00000000L field public static final long FIELD_TYPE_SFIXED64 = 68719476736L; // 0x1000000000L field public static final int FIELD_TYPE_SHIFT = 32; // 0x20 field public static final long FIELD_TYPE_SINT32 = 30064771072L; // 0x700000000L field public static final long FIELD_TYPE_SINT64 = 34359738368L; // 0x800000000L field public static final long FIELD_TYPE_STRING = 60129542144L; // 0xe00000000L field public static final long FIELD_TYPE_UINT32 = 21474836480L; // 0x500000000L field public static final long FIELD_TYPE_UINT64 = 25769803776L; // 0x600000000L field public static final long FIELD_TYPE_SINT32 = 73014444032L; // 0x1100000000L field public static final long FIELD_TYPE_SINT64 = 77309411328L; // 0x1200000000L field public static final long FIELD_TYPE_STRING = 38654705664L; // 0x900000000L field public static final long FIELD_TYPE_UINT32 = 55834574848L; // 0xd00000000L field public static final long FIELD_TYPE_UINT64 = 17179869184L; // 0x400000000L field public static final long FIELD_TYPE_UNKNOWN = 0L; // 0x0L field public static final java.lang.String TAG = "ProtoOutputStream"; field public static final int WIRE_TYPE_END_GROUP = 4; // 0x4 core/java/android/util/proto/ProtoOutputStream.java +44 −38 Original line number Diff line number Diff line Loading @@ -127,42 +127,48 @@ public final class ProtoOutputStream { public static final long FIELD_TYPE_UNKNOWN = 0; /** * The types are copied from external/protobuf/src/google/protobuf/descriptor.h directly, * so no extra mapping needs to be maintained in this case. */ public static final long FIELD_TYPE_DOUBLE = 1L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FLOAT = 2L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT32 = 3L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT64 = 4L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT32 = 5L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT64 = 6L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT32 = 7L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT64 = 8L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED32 = 9L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED64 = 10L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED32 = 11L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED64 = 12L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BOOL = 13L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_STRING = 14L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BYTES = 15L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_ENUM = 16L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_OBJECT = 17L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT64 = 3L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT64 = 4L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT32 = 5L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED64 = 6L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED32 = 7L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BOOL = 8L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_STRING = 9L << FIELD_TYPE_SHIFT; // public static final long FIELD_TYPE_GROUP = 10L << FIELD_TYPE_SHIFT; // Deprecated. public static final long FIELD_TYPE_MESSAGE = 11L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BYTES = 12L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT32 = 13L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_ENUM = 14L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED32 = 15L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED64 = 16L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT32 = 17L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT64 = 18L << FIELD_TYPE_SHIFT; private static final String[] FIELD_TYPE_NAMES = new String[] { "Double", "Float", "Int32", "Int64", "UInt32", "UInt64", "SInt32", "SInt64", "Fixed32", "Int32", "Fixed64", "SFixed32", "SFixed64", "Fixed32", "Bool", "String", "Group", // This field is deprecated but reserved here for indexing. "Message", "Bytes", "UInt32", "Enum", "Object", "SFixed32", "SFixed64", "SInt32", "SInt64", }; // Loading Loading @@ -877,11 +883,11 @@ public final class ProtoOutputStream { writeRepeatedBytesImpl(id, val); break; // Object case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_SINGLE) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_SINGLE) >> FIELD_TYPE_SHIFT): writeObjectImpl(id, val); break; case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_REPEATED) >> FIELD_TYPE_SHIFT): case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_PACKED) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_PACKED) >> FIELD_TYPE_SHIFT): writeRepeatedObjectImpl(id, val); break; // nothing else allowed Loading @@ -899,7 +905,7 @@ public final class ProtoOutputStream { assertNotCompacted(); final int id = (int)fieldId; if ((fieldId & FIELD_TYPE_MASK) == FIELD_TYPE_OBJECT) { if ((fieldId & FIELD_TYPE_MASK) == FIELD_TYPE_MESSAGE) { final long count = fieldId & FIELD_COUNT_MASK; if (count == FIELD_COUNT_SINGLE) { return startObjectImpl(id, false); Loading Loading @@ -2091,7 +2097,7 @@ public final class ProtoOutputStream { @Deprecated public long startObject(long fieldId) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_MESSAGE); return startObjectImpl(id, false); } Loading Loading @@ -2119,7 +2125,7 @@ public final class ProtoOutputStream { @Deprecated public long startRepeatedObject(long fieldId) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_MESSAGE); return startObjectImpl(id, true); } Loading Loading @@ -2217,7 +2223,7 @@ public final class ProtoOutputStream { @Deprecated public void writeObject(long fieldId, byte[] value) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_MESSAGE); writeObjectImpl(id, value); } Loading @@ -2237,7 +2243,7 @@ public final class ProtoOutputStream { @Deprecated public void writeRepeatedObject(long fieldId, byte[] value) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_MESSAGE); writeRepeatedObjectImpl(id, value); } Loading Loading @@ -2296,7 +2302,7 @@ public final class ProtoOutputStream { final String typeString = getFieldTypeString(fieldType); if (typeString != null && countString != null) { final StringBuilder sb = new StringBuilder(); if (expectedType == FIELD_TYPE_OBJECT) { if (expectedType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading @@ -2306,7 +2312,7 @@ public final class ProtoOutputStream { sb.append(" called for field "); sb.append((int)fieldId); sb.append(" which should be used with "); if (fieldType == FIELD_TYPE_OBJECT) { if (fieldType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading @@ -2321,7 +2327,7 @@ public final class ProtoOutputStream { throw new IllegalArgumentException(sb.toString()); } else { final StringBuilder sb = new StringBuilder(); if (expectedType == FIELD_TYPE_OBJECT) { if (expectedType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading libs/protoutil/include/android/util/ProtoOutputStream.h +6 −2 Original line number Diff line number Diff line Loading @@ -35,6 +35,10 @@ const uint64_t FIELD_TYPE_SHIFT = 32; */ const uint64_t FIELD_TYPE_MASK = 0x0ffULL << FIELD_TYPE_SHIFT; /** * The types are copied from external/protobuf/src/google/protobuf/descriptor.h directly, * so no extra mapping needs to be maintained in this case. */ const uint64_t FIELD_TYPE_UNKNOWN = 0; const uint64_t FIELD_TYPE_DOUBLE = 1ULL << FIELD_TYPE_SHIFT; // double, exactly eight bytes on the wire. const uint64_t FIELD_TYPE_FLOAT = 2ULL << FIELD_TYPE_SHIFT; // float, exactly four bytes on the wire. Loading @@ -49,7 +53,7 @@ const uint64_t FIELD_TYPE_FIXED64 = 6ULL << FIELD_TYPE_SHIFT; // uint64, exac const uint64_t FIELD_TYPE_FIXED32 = 7ULL << FIELD_TYPE_SHIFT; // uint32, exactly four bytes on the wire. const uint64_t FIELD_TYPE_BOOL = 8ULL << FIELD_TYPE_SHIFT; // bool, varint on the wire. const uint64_t FIELD_TYPE_STRING = 9ULL << FIELD_TYPE_SHIFT; // UTF-8 text. const uint64_t FIELD_TYPE_GROUP = 10ULL << FIELD_TYPE_SHIFT; // Tag-delimited message. Deprecated. // const uint64_t FIELD_TYPE_GROUP = 10ULL << FIELD_TYPE_SHIFT; // Tag-delimited message. Deprecated. const uint64_t FIELD_TYPE_MESSAGE = 11ULL << FIELD_TYPE_SHIFT; // Length-delimited message. const uint64_t FIELD_TYPE_BYTES = 12ULL << FIELD_TYPE_SHIFT; // Arbitrary byte array. Loading @@ -69,7 +73,7 @@ const uint64_t FIELD_COUNT_MASK = 0x0fULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_UNKNOWN = 0; const uint64_t FIELD_COUNT_SINGLE = 1ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_REPEATED = 2ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 4ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 5ULL << FIELD_COUNT_SHIFT; /** * Class to write to a protobuf stream. Loading tools/streaming_proto/Android.bp +3 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ cc_defaults { name: "protoc-gen-stream-defaults", srcs: [ "Errors.cpp", "stream_proto_utils.cpp", "string_utils.cpp", ], shared_libs: ["libprotoc"], } cc_library { Loading Loading @@ -52,7 +55,6 @@ cc_binary_host { ], defaults: ["protoc-gen-stream-defaults"], shared_libs: ["libprotoc"], } cc_binary_host { Loading @@ -62,6 +64,5 @@ cc_binary_host { ], defaults: ["protoc-gen-stream-defaults"], shared_libs: ["libprotoc"], static_libs: ["streamingflags"], } tools/streaming_proto/cpp/main.cpp +1 −107 Original line number Diff line number Diff line #include "Errors.h" #include "stream_proto_utils.h" #include "string_utils.h" #include <frameworks/base/tools/streaming_proto/stream.pb.h> #include "google/protobuf/compiler/plugin.pb.h" #include "google/protobuf/io/zero_copy_stream_impl.h" #include "google/protobuf/text_format.h" #include <iomanip> #include <iostream> #include <sstream> using namespace android::stream_proto; using namespace google::protobuf; using namespace google::protobuf::compiler; using namespace google::protobuf::io; using namespace std; /** * Position of the field type in a (long long) fieldId. */ const uint64_t FIELD_TYPE_SHIFT = 32; // // FieldId flags for whether the field is single, repeated or packed. // TODO: packed is not supported yet. // const uint64_t FIELD_COUNT_SHIFT = 40; const uint64_t FIELD_COUNT_MASK = 0x0fULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_UNKNOWN = 0; const uint64_t FIELD_COUNT_SINGLE = 1ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_REPEATED = 2ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 4ULL << FIELD_COUNT_SHIFT; // Indent const string INDENT = " "; /** * See if this is the file for this request, and not one of the imported ones. */ static bool should_generate_for_file(const CodeGeneratorRequest& request, const string& file) { const int N = request.file_to_generate_size(); for (int i=0; i<N; i++) { if (request.file_to_generate(i) == file) { return true; } } return false; } static string make_filename(const FileDescriptorProto& file_descriptor) { return file_descriptor.name() + ".h"; } static string get_proto_type(const FieldDescriptorProto& field) { switch (field.type()) { case FieldDescriptorProto::TYPE_DOUBLE: return "double"; case FieldDescriptorProto::TYPE_FLOAT: return "float"; case FieldDescriptorProto::TYPE_INT64: return "int64"; case FieldDescriptorProto::TYPE_UINT64: return "uint64"; case FieldDescriptorProto::TYPE_INT32: return "int32"; case FieldDescriptorProto::TYPE_FIXED64: return "fixed64"; case FieldDescriptorProto::TYPE_FIXED32: return "fixed32"; case FieldDescriptorProto::TYPE_BOOL: return "bool"; case FieldDescriptorProto::TYPE_STRING: return "string"; case FieldDescriptorProto::TYPE_GROUP: return "group<unsupported!>"; case FieldDescriptorProto::TYPE_MESSAGE: return field.type_name(); case FieldDescriptorProto::TYPE_BYTES: return "bytes"; case FieldDescriptorProto::TYPE_UINT32: return "uint32"; case FieldDescriptorProto::TYPE_ENUM: return field.type_name(); case FieldDescriptorProto::TYPE_SFIXED32: return "sfixed32"; case FieldDescriptorProto::TYPE_SFIXED64: return "sfixed64"; case FieldDescriptorProto::TYPE_SINT32: return "sint32"; case FieldDescriptorProto::TYPE_SINT64: return "sint64"; default: // won't happen return "void"; } } static void write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& indent) { Loading @@ -117,27 +32,6 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind text << endl; } static uint64_t get_field_id(const FieldDescriptorProto& field) { // Number uint64_t result = (uint64_t)field.number(); // Type result |= (uint64_t)field.type() << FIELD_TYPE_SHIFT; // Count if (field.options().packed()) { result |= FIELD_COUNT_PACKED; } else if (field.label() == FieldDescriptorProto::LABEL_REPEATED) { result |= FIELD_COUNT_REPEATED; } else { result |= FIELD_COUNT_SINGLE; } return result; } static void write_field(stringstream& text, const FieldDescriptorProto& field, const string& indent) { Loading Loading
api/test-current.txt +15 −15 Original line number Diff line number Diff line Loading @@ -44977,25 +44977,25 @@ package android.util.proto { field public static final long FIELD_COUNT_UNKNOWN = 0L; // 0x0L field public static final int FIELD_ID_MASK = -8; // 0xfffffff8 field public static final int FIELD_ID_SHIFT = 3; // 0x3 field public static final long FIELD_TYPE_BOOL = 55834574848L; // 0xd00000000L field public static final long FIELD_TYPE_BYTES = 64424509440L; // 0xf00000000L field public static final long FIELD_TYPE_BOOL = 34359738368L; // 0x800000000L field public static final long FIELD_TYPE_BYTES = 51539607552L; // 0xc00000000L field public static final long FIELD_TYPE_DOUBLE = 4294967296L; // 0x100000000L field public static final long FIELD_TYPE_ENUM = 68719476736L; // 0x1000000000L field public static final long FIELD_TYPE_FIXED32 = 38654705664L; // 0x900000000L field public static final long FIELD_TYPE_FIXED64 = 42949672960L; // 0xa00000000L field public static final long FIELD_TYPE_ENUM = 60129542144L; // 0xe00000000L field public static final long FIELD_TYPE_FIXED32 = 30064771072L; // 0x700000000L field public static final long FIELD_TYPE_FIXED64 = 25769803776L; // 0x600000000L field public static final long FIELD_TYPE_FLOAT = 8589934592L; // 0x200000000L field public static final long FIELD_TYPE_INT32 = 12884901888L; // 0x300000000L field public static final long FIELD_TYPE_INT64 = 17179869184L; // 0x400000000L field public static final long FIELD_TYPE_INT32 = 21474836480L; // 0x500000000L field public static final long FIELD_TYPE_INT64 = 12884901888L; // 0x300000000L field public static final long FIELD_TYPE_MASK = 1095216660480L; // 0xff00000000L field public static final long FIELD_TYPE_OBJECT = 73014444032L; // 0x1100000000L field public static final long FIELD_TYPE_SFIXED32 = 47244640256L; // 0xb00000000L field public static final long FIELD_TYPE_SFIXED64 = 51539607552L; // 0xc00000000L field public static final long FIELD_TYPE_MESSAGE = 47244640256L; // 0xb00000000L field public static final long FIELD_TYPE_SFIXED32 = 64424509440L; // 0xf00000000L field public static final long FIELD_TYPE_SFIXED64 = 68719476736L; // 0x1000000000L field public static final int FIELD_TYPE_SHIFT = 32; // 0x20 field public static final long FIELD_TYPE_SINT32 = 30064771072L; // 0x700000000L field public static final long FIELD_TYPE_SINT64 = 34359738368L; // 0x800000000L field public static final long FIELD_TYPE_STRING = 60129542144L; // 0xe00000000L field public static final long FIELD_TYPE_UINT32 = 21474836480L; // 0x500000000L field public static final long FIELD_TYPE_UINT64 = 25769803776L; // 0x600000000L field public static final long FIELD_TYPE_SINT32 = 73014444032L; // 0x1100000000L field public static final long FIELD_TYPE_SINT64 = 77309411328L; // 0x1200000000L field public static final long FIELD_TYPE_STRING = 38654705664L; // 0x900000000L field public static final long FIELD_TYPE_UINT32 = 55834574848L; // 0xd00000000L field public static final long FIELD_TYPE_UINT64 = 17179869184L; // 0x400000000L field public static final long FIELD_TYPE_UNKNOWN = 0L; // 0x0L field public static final java.lang.String TAG = "ProtoOutputStream"; field public static final int WIRE_TYPE_END_GROUP = 4; // 0x4
core/java/android/util/proto/ProtoOutputStream.java +44 −38 Original line number Diff line number Diff line Loading @@ -127,42 +127,48 @@ public final class ProtoOutputStream { public static final long FIELD_TYPE_UNKNOWN = 0; /** * The types are copied from external/protobuf/src/google/protobuf/descriptor.h directly, * so no extra mapping needs to be maintained in this case. */ public static final long FIELD_TYPE_DOUBLE = 1L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FLOAT = 2L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT32 = 3L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT64 = 4L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT32 = 5L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT64 = 6L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT32 = 7L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT64 = 8L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED32 = 9L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED64 = 10L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED32 = 11L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED64 = 12L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BOOL = 13L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_STRING = 14L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BYTES = 15L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_ENUM = 16L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_OBJECT = 17L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT64 = 3L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT64 = 4L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_INT32 = 5L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED64 = 6L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_FIXED32 = 7L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BOOL = 8L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_STRING = 9L << FIELD_TYPE_SHIFT; // public static final long FIELD_TYPE_GROUP = 10L << FIELD_TYPE_SHIFT; // Deprecated. public static final long FIELD_TYPE_MESSAGE = 11L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_BYTES = 12L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_UINT32 = 13L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_ENUM = 14L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED32 = 15L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SFIXED64 = 16L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT32 = 17L << FIELD_TYPE_SHIFT; public static final long FIELD_TYPE_SINT64 = 18L << FIELD_TYPE_SHIFT; private static final String[] FIELD_TYPE_NAMES = new String[] { "Double", "Float", "Int32", "Int64", "UInt32", "UInt64", "SInt32", "SInt64", "Fixed32", "Int32", "Fixed64", "SFixed32", "SFixed64", "Fixed32", "Bool", "String", "Group", // This field is deprecated but reserved here for indexing. "Message", "Bytes", "UInt32", "Enum", "Object", "SFixed32", "SFixed64", "SInt32", "SInt64", }; // Loading Loading @@ -877,11 +883,11 @@ public final class ProtoOutputStream { writeRepeatedBytesImpl(id, val); break; // Object case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_SINGLE) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_SINGLE) >> FIELD_TYPE_SHIFT): writeObjectImpl(id, val); break; case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_REPEATED) >> FIELD_TYPE_SHIFT): case (int)((FIELD_TYPE_OBJECT | FIELD_COUNT_PACKED) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED) >> FIELD_TYPE_SHIFT): case (int) ((FIELD_TYPE_MESSAGE | FIELD_COUNT_PACKED) >> FIELD_TYPE_SHIFT): writeRepeatedObjectImpl(id, val); break; // nothing else allowed Loading @@ -899,7 +905,7 @@ public final class ProtoOutputStream { assertNotCompacted(); final int id = (int)fieldId; if ((fieldId & FIELD_TYPE_MASK) == FIELD_TYPE_OBJECT) { if ((fieldId & FIELD_TYPE_MASK) == FIELD_TYPE_MESSAGE) { final long count = fieldId & FIELD_COUNT_MASK; if (count == FIELD_COUNT_SINGLE) { return startObjectImpl(id, false); Loading Loading @@ -2091,7 +2097,7 @@ public final class ProtoOutputStream { @Deprecated public long startObject(long fieldId) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_MESSAGE); return startObjectImpl(id, false); } Loading Loading @@ -2119,7 +2125,7 @@ public final class ProtoOutputStream { @Deprecated public long startRepeatedObject(long fieldId) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_MESSAGE); return startObjectImpl(id, true); } Loading Loading @@ -2217,7 +2223,7 @@ public final class ProtoOutputStream { @Deprecated public void writeObject(long fieldId, byte[] value) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_SINGLE | FIELD_TYPE_MESSAGE); writeObjectImpl(id, value); } Loading @@ -2237,7 +2243,7 @@ public final class ProtoOutputStream { @Deprecated public void writeRepeatedObject(long fieldId, byte[] value) { assertNotCompacted(); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_OBJECT); final int id = checkFieldId(fieldId, FIELD_COUNT_REPEATED | FIELD_TYPE_MESSAGE); writeRepeatedObjectImpl(id, value); } Loading Loading @@ -2296,7 +2302,7 @@ public final class ProtoOutputStream { final String typeString = getFieldTypeString(fieldType); if (typeString != null && countString != null) { final StringBuilder sb = new StringBuilder(); if (expectedType == FIELD_TYPE_OBJECT) { if (expectedType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading @@ -2306,7 +2312,7 @@ public final class ProtoOutputStream { sb.append(" called for field "); sb.append((int)fieldId); sb.append(" which should be used with "); if (fieldType == FIELD_TYPE_OBJECT) { if (fieldType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading @@ -2321,7 +2327,7 @@ public final class ProtoOutputStream { throw new IllegalArgumentException(sb.toString()); } else { final StringBuilder sb = new StringBuilder(); if (expectedType == FIELD_TYPE_OBJECT) { if (expectedType == FIELD_TYPE_MESSAGE) { sb.append("start"); } else { sb.append("write"); Loading
libs/protoutil/include/android/util/ProtoOutputStream.h +6 −2 Original line number Diff line number Diff line Loading @@ -35,6 +35,10 @@ const uint64_t FIELD_TYPE_SHIFT = 32; */ const uint64_t FIELD_TYPE_MASK = 0x0ffULL << FIELD_TYPE_SHIFT; /** * The types are copied from external/protobuf/src/google/protobuf/descriptor.h directly, * so no extra mapping needs to be maintained in this case. */ const uint64_t FIELD_TYPE_UNKNOWN = 0; const uint64_t FIELD_TYPE_DOUBLE = 1ULL << FIELD_TYPE_SHIFT; // double, exactly eight bytes on the wire. const uint64_t FIELD_TYPE_FLOAT = 2ULL << FIELD_TYPE_SHIFT; // float, exactly four bytes on the wire. Loading @@ -49,7 +53,7 @@ const uint64_t FIELD_TYPE_FIXED64 = 6ULL << FIELD_TYPE_SHIFT; // uint64, exac const uint64_t FIELD_TYPE_FIXED32 = 7ULL << FIELD_TYPE_SHIFT; // uint32, exactly four bytes on the wire. const uint64_t FIELD_TYPE_BOOL = 8ULL << FIELD_TYPE_SHIFT; // bool, varint on the wire. const uint64_t FIELD_TYPE_STRING = 9ULL << FIELD_TYPE_SHIFT; // UTF-8 text. const uint64_t FIELD_TYPE_GROUP = 10ULL << FIELD_TYPE_SHIFT; // Tag-delimited message. Deprecated. // const uint64_t FIELD_TYPE_GROUP = 10ULL << FIELD_TYPE_SHIFT; // Tag-delimited message. Deprecated. const uint64_t FIELD_TYPE_MESSAGE = 11ULL << FIELD_TYPE_SHIFT; // Length-delimited message. const uint64_t FIELD_TYPE_BYTES = 12ULL << FIELD_TYPE_SHIFT; // Arbitrary byte array. Loading @@ -69,7 +73,7 @@ const uint64_t FIELD_COUNT_MASK = 0x0fULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_UNKNOWN = 0; const uint64_t FIELD_COUNT_SINGLE = 1ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_REPEATED = 2ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 4ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 5ULL << FIELD_COUNT_SHIFT; /** * Class to write to a protobuf stream. Loading
tools/streaming_proto/Android.bp +3 −2 Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ cc_defaults { name: "protoc-gen-stream-defaults", srcs: [ "Errors.cpp", "stream_proto_utils.cpp", "string_utils.cpp", ], shared_libs: ["libprotoc"], } cc_library { Loading Loading @@ -52,7 +55,6 @@ cc_binary_host { ], defaults: ["protoc-gen-stream-defaults"], shared_libs: ["libprotoc"], } cc_binary_host { Loading @@ -62,6 +64,5 @@ cc_binary_host { ], defaults: ["protoc-gen-stream-defaults"], shared_libs: ["libprotoc"], static_libs: ["streamingflags"], }
tools/streaming_proto/cpp/main.cpp +1 −107 Original line number Diff line number Diff line #include "Errors.h" #include "stream_proto_utils.h" #include "string_utils.h" #include <frameworks/base/tools/streaming_proto/stream.pb.h> #include "google/protobuf/compiler/plugin.pb.h" #include "google/protobuf/io/zero_copy_stream_impl.h" #include "google/protobuf/text_format.h" #include <iomanip> #include <iostream> #include <sstream> using namespace android::stream_proto; using namespace google::protobuf; using namespace google::protobuf::compiler; using namespace google::protobuf::io; using namespace std; /** * Position of the field type in a (long long) fieldId. */ const uint64_t FIELD_TYPE_SHIFT = 32; // // FieldId flags for whether the field is single, repeated or packed. // TODO: packed is not supported yet. // const uint64_t FIELD_COUNT_SHIFT = 40; const uint64_t FIELD_COUNT_MASK = 0x0fULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_UNKNOWN = 0; const uint64_t FIELD_COUNT_SINGLE = 1ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_REPEATED = 2ULL << FIELD_COUNT_SHIFT; const uint64_t FIELD_COUNT_PACKED = 4ULL << FIELD_COUNT_SHIFT; // Indent const string INDENT = " "; /** * See if this is the file for this request, and not one of the imported ones. */ static bool should_generate_for_file(const CodeGeneratorRequest& request, const string& file) { const int N = request.file_to_generate_size(); for (int i=0; i<N; i++) { if (request.file_to_generate(i) == file) { return true; } } return false; } static string make_filename(const FileDescriptorProto& file_descriptor) { return file_descriptor.name() + ".h"; } static string get_proto_type(const FieldDescriptorProto& field) { switch (field.type()) { case FieldDescriptorProto::TYPE_DOUBLE: return "double"; case FieldDescriptorProto::TYPE_FLOAT: return "float"; case FieldDescriptorProto::TYPE_INT64: return "int64"; case FieldDescriptorProto::TYPE_UINT64: return "uint64"; case FieldDescriptorProto::TYPE_INT32: return "int32"; case FieldDescriptorProto::TYPE_FIXED64: return "fixed64"; case FieldDescriptorProto::TYPE_FIXED32: return "fixed32"; case FieldDescriptorProto::TYPE_BOOL: return "bool"; case FieldDescriptorProto::TYPE_STRING: return "string"; case FieldDescriptorProto::TYPE_GROUP: return "group<unsupported!>"; case FieldDescriptorProto::TYPE_MESSAGE: return field.type_name(); case FieldDescriptorProto::TYPE_BYTES: return "bytes"; case FieldDescriptorProto::TYPE_UINT32: return "uint32"; case FieldDescriptorProto::TYPE_ENUM: return field.type_name(); case FieldDescriptorProto::TYPE_SFIXED32: return "sfixed32"; case FieldDescriptorProto::TYPE_SFIXED64: return "sfixed64"; case FieldDescriptorProto::TYPE_SINT32: return "sint32"; case FieldDescriptorProto::TYPE_SINT64: return "sint64"; default: // won't happen return "void"; } } static void write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& indent) { Loading @@ -117,27 +32,6 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind text << endl; } static uint64_t get_field_id(const FieldDescriptorProto& field) { // Number uint64_t result = (uint64_t)field.number(); // Type result |= (uint64_t)field.type() << FIELD_TYPE_SHIFT; // Count if (field.options().packed()) { result |= FIELD_COUNT_PACKED; } else if (field.label() == FieldDescriptorProto::LABEL_REPEATED) { result |= FIELD_COUNT_REPEATED; } else { result |= FIELD_COUNT_SINGLE; } return result; } static void write_field(stringstream& text, const FieldDescriptorProto& field, const string& indent) { Loading