diff options
Diffstat (limited to 'tools/aapt2/io/Util.h')
-rw-r--r-- | tools/aapt2/io/Util.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tools/aapt2/io/Util.h b/tools/aapt2/io/Util.h index b07fb5399313..5f978a8e2c35 100644 --- a/tools/aapt2/io/Util.h +++ b/tools/aapt2/io/Util.h @@ -20,6 +20,7 @@ #include <string> #include "google/protobuf/message_lite.h" +#include "google/protobuf/io/coded_stream.h" #include "format/Archive.h" #include "io/File.h" @@ -122,6 +123,23 @@ class ZeroCopyInputAdaptor : public ::google::protobuf::io::ZeroCopyInputStream io::InputStream* in_; }; +class ProtoInputStreamReader { + public: + explicit ProtoInputStreamReader(io::InputStream* in) : in_(in) { } + + /** Deserializes a MessageLite proto from the current position in the input stream.*/ + template <typename T> bool ReadMessage(T *message_lite) { + ZeroCopyInputAdaptor adapter(in_); + google::protobuf::io::CodedInputStream coded_stream(&adapter); + coded_stream.SetTotalBytesLimit(std::numeric_limits<int32_t>::max(), + coded_stream.BytesUntilTotalBytesLimit()); + return message_lite->ParseFromCodedStream(&coded_stream); + } + + private: + io::InputStream* in_; +}; + } // namespace io } // namespace aapt |