diff options
author | Yi Jin <jinyithu@google.com> | 2017-10-30 16:07:20 -0700 |
---|---|---|
committer | Yi Jin <jinyithu@google.com> | 2017-10-30 17:54:00 -0700 |
commit | 8ad193870b2f8d6f8478d591ced2100e22b23229 (patch) | |
tree | 7b9c03d0c754aa928543927d57e7dd0cd64a7686 /libs/protoutil | |
parent | 7d3fcb4361753387f4834fb3fe94fbe085d0abab (diff) |
Create a new API allowing callers to concat a serialized message field.
Test: N/A
Change-Id: I90570ea62e6c406d40c399cee6cbb8dcb5172e21
Diffstat (limited to 'libs/protoutil')
-rw-r--r-- | libs/protoutil/include/android/util/ProtoOutputStream.h | 3 | ||||
-rw-r--r-- | libs/protoutil/src/ProtoOutputStream.cpp | 14 |
2 files changed, 16 insertions, 1 deletions
diff --git a/libs/protoutil/include/android/util/ProtoOutputStream.h b/libs/protoutil/include/android/util/ProtoOutputStream.h index 10be6499417f..b8415b2e264b 100644 --- a/libs/protoutil/include/android/util/ProtoOutputStream.h +++ b/libs/protoutil/include/android/util/ProtoOutputStream.h @@ -66,7 +66,7 @@ public: EncodedBuffer::iterator data(); bool flush(int fd); - // Please don't use the following functions to dump protos unless you are sure about it. + // Please don't use the following functions to dump protos unless you are familiar with protobuf encoding. void writeRawVarint(uint64_t varint); void writeLengthDelimitedHeader(uint32_t id, size_t size); void writeRawByte(uint8_t byte); @@ -94,6 +94,7 @@ private: inline void writeEnumImpl(uint32_t id, int val); inline void writeBoolImpl(uint32_t id, bool val); inline void writeUtf8StringImpl(uint32_t id, const char* val, size_t size); + inline void writeMessageBytesImpl(uint32_t id, const char* val, size_t size); bool compact(); size_t editEncodedSize(size_t rawSize); diff --git a/libs/protoutil/src/ProtoOutputStream.cpp b/libs/protoutil/src/ProtoOutputStream.cpp index 9dadf1c20510..b91e3db0e39c 100644 --- a/libs/protoutil/src/ProtoOutputStream.cpp +++ b/libs/protoutil/src/ProtoOutputStream.cpp @@ -234,6 +234,10 @@ ProtoOutputStream::write(uint64_t fieldId, const char* val, size_t size) case TYPE_BYTES: writeUtf8StringImpl(id, val, size); return true; + case TYPE_MESSAGE: + // can directly write valid format of message bytes into ProtoOutputStream without calling start/end + writeMessageBytesImpl(id, val, size); + return true; default: ALOGW("Field type %d is not supported when writing char[] val.", (int)((fieldId & FIELD_TYPE_MASK) >> FIELD_TYPE_SHIFT)); @@ -678,6 +682,16 @@ ProtoOutputStream::writeUtf8StringImpl(uint32_t id, const char* val, size_t size } } +inline void +ProtoOutputStream::writeMessageBytesImpl(uint32_t id, const char* val, size_t size) +{ + if (val == NULL) return; + writeLengthDelimitedHeader(id, size); + for (size_t i=0; i<size; i++) { + mBuffer.writeRawByte(val[i]); + } +} + } // util } // android |