Can you disable this test for now?  I can take a look on Monday <br><div class="gmail_quote"><div dir="ltr">On Sat, Feb 25, 2017 at 11:29 PM Vedant Kumar <<a href="mailto:vsk@apple.com">vsk@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Also, I'd appreciate it if you could separate the NFC renaming/doc update changes, test additions, and bug fixes into separate commits to make them easier to follow.<br class="gmail_msg">
<br class="gmail_msg">
thanks,<br class="gmail_msg">
vedant<br class="gmail_msg">
<br class="gmail_msg">
> On Feb 24, 2017, at 4:44 PM, Zachary Turner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
> Author: zturner<br class="gmail_msg">
> Date: Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> New Revision: 296215<br class="gmail_msg">
><br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=296215&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=296215&view=rev</a><br class="gmail_msg">
> Log:<br class="gmail_msg">
> [PDB] General improvements to Stream library.<br class="gmail_msg">
><br class="gmail_msg">
> This adds various new functionality and cleanup surrounding the<br class="gmail_msg">
> use of the Stream library.  Major changes include:<br class="gmail_msg">
><br class="gmail_msg">
> * Renaming of all classes for more consistency / meaningfulness<br class="gmail_msg">
> * Addition of some new methods for reading multiple values at once.<br class="gmail_msg">
> * Full suite of unit tests for reader / writer functionality.<br class="gmail_msg">
> * Full set of doxygen comments for all classes.<br class="gmail_msg">
> * Streams now store their own endianness.<br class="gmail_msg">
> * Fixed some bugs in a few of the classes that were discovered<br class="gmail_msg">
>  by the unit tests.<br class="gmail_msg">
><br class="gmail_msg">
> Added:<br class="gmail_msg">
>    llvm/trunk/unittests/DebugInfo/PDB/BinaryStreamTest.cpp<br class="gmail_msg">
> Modified:<br class="gmail_msg">
>    llvm/trunk/include/llvm/ADT/STLExtras.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamRef.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamWriter.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/MSF/MappedBlockStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/GlobalsStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/HashTable.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/InfoStreamBuilder.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModInfo.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/NamedStreamMap.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/PDBFile.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/StringTable.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/StringTableBuilder.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/TpiHashing.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/TpiStream.h<br class="gmail_msg">
>    llvm/trunk/include/llvm/DebugInfo/PDB/Native/TpiStreamBuilder.h<br class="gmail_msg">
>    llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/CVTypeDumper.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/CVTypeVisitor.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/RecordSerialization.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/CodeView/TypeSerializer.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/MSF/BinaryStreamReader.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/MSF/BinaryStreamWriter.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/MSF/MappedBlockStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/DbiStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/GSI.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/GSI.h<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/GlobalsStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/HashTable.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/InfoStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/InfoStreamBuilder.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/ModInfo.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/ModStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/NamedStreamMap.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/NativeSession.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/PDBFile.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/StringTable.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/StringTableBuilder.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/SymbolStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/TpiStream.cpp<br class="gmail_msg">
>    llvm/trunk/lib/DebugInfo/PDB/Native/TpiStreamBuilder.cpp<br class="gmail_msg">
>    llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp<br class="gmail_msg">
>    llvm/trunk/tools/llvm-pdbdump/YamlTypeDumper.cpp<br class="gmail_msg">
>    llvm/trunk/tools/llvm-readobj/COFFDumper.cpp<br class="gmail_msg">
>    llvm/trunk/unittests/DebugInfo/PDB/CMakeLists.txt<br class="gmail_msg">
>    llvm/trunk/unittests/DebugInfo/PDB/HashTableTest.cpp<br class="gmail_msg">
>    llvm/trunk/unittests/DebugInfo/PDB/MappedBlockStreamTest.cpp<br class="gmail_msg">
>    llvm/trunk/unittests/DebugInfo/PDB/StringTableBuilderTest.cpp<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/ADT/STLExtras.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/ADT/STLExtras.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/ADT/STLExtras.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -640,6 +640,16 @@ detail::concat_range<ValueT, RangeTs...><br class="gmail_msg">
> //     Extra additions to <utility><br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> +/// \brief Template class to compute the sum of sizes of all items in a<br class="gmail_msg">
> +/// parameter pack.<br class="gmail_msg">
> +template <typename T, typename... Ts> struct sizeof_sum {<br class="gmail_msg">
> +  static const size_t value = sizeof(T) + sizeof_sum<Ts...>::value;<br class="gmail_msg">
> +};<br class="gmail_msg">
> +<br class="gmail_msg">
> +template <typename T> struct sizeof_sum<T> {<br class="gmail_msg">
> +  static const size_t value = sizeof(T);<br class="gmail_msg">
> +};<br class="gmail_msg">
> +<br class="gmail_msg">
> /// \brief Function object to check whether the first component of a std::pair<br class="gmail_msg">
> /// compares less than the first component of another std::pair.<br class="gmail_msg">
> struct less_first {<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/CVRecord.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -48,15 +48,13 @@ public:<br class="gmail_msg">
><br class="gmail_msg">
> } // end namespace codeview<br class="gmail_msg">
><br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -<br class="gmail_msg">
> template <typename Kind><br class="gmail_msg">
> struct VarStreamArrayExtractor<codeview::CVRecord<Kind>> {<br class="gmail_msg">
> -  Error operator()(ReadableStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
> +  Error operator()(BinaryStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
>                    codeview::CVRecord<Kind> &Item) const {<br class="gmail_msg">
>     using namespace codeview;<br class="gmail_msg">
>     const RecordPrefix *Prefix = nullptr;<br class="gmail_msg">
> -    StreamReader Reader(Stream);<br class="gmail_msg">
> +    BinaryStreamReader Reader(Stream);<br class="gmail_msg">
>     uint32_t Offset = Reader.getOffset();<br class="gmail_msg">
><br class="gmail_msg">
>     if (auto EC = Reader.readObject(Prefix))<br class="gmail_msg">
> @@ -76,8 +74,6 @@ struct VarStreamArrayExtractor<codeview:<br class="gmail_msg">
>   }<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> -<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> #endif // LLVM_DEBUGINFO_CODEVIEW_RECORDITERATOR_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -34,7 +34,7 @@ public:<br class="gmail_msg">
>   Error visitTypeStream(CVTypeRange Types);<br class="gmail_msg">
><br class="gmail_msg">
>   Error visitFieldListMemberStream(ArrayRef<uint8_t> FieldList);<br class="gmail_msg">
> -  Error visitFieldListMemberStream(msf::StreamReader Reader);<br class="gmail_msg">
> +  Error visitFieldListMemberStream(BinaryStreamReader Reader);<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
>   /// The interface to the class that gets notified of each visitation.<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -33,8 +33,8 @@ class CodeViewRecordIO {<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit CodeViewRecordIO(msf::StreamReader &Reader) : Reader(&Reader) {}<br class="gmail_msg">
> -  explicit CodeViewRecordIO(msf::StreamWriter &Writer) : Writer(&Writer) {}<br class="gmail_msg">
> +  explicit CodeViewRecordIO(BinaryStreamReader &Reader) : Reader(&Reader) {}<br class="gmail_msg">
> +  explicit CodeViewRecordIO(BinaryStreamWriter &Writer) : Writer(&Writer) {}<br class="gmail_msg">
><br class="gmail_msg">
>   Error beginRecord(Optional<uint32_t> MaxLength);<br class="gmail_msg">
>   Error endRecord();<br class="gmail_msg">
> @@ -59,9 +59,9 @@ public:<br class="gmail_msg">
><br class="gmail_msg">
>   template <typename T> Error mapInteger(T &Value) {<br class="gmail_msg">
>     if (isWriting())<br class="gmail_msg">
> -      return Writer->writeInteger(Value, llvm::support::little);<br class="gmail_msg">
> +      return Writer->writeInteger(Value);<br class="gmail_msg">
><br class="gmail_msg">
> -    return Reader->readInteger(Value, llvm::support::little);<br class="gmail_msg">
> +    return Reader->readInteger(Value);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   template <typename T> Error mapEnum(T &Value) {<br class="gmail_msg">
> @@ -93,7 +93,7 @@ public:<br class="gmail_msg">
>     SizeType Size;<br class="gmail_msg">
>     if (isWriting()) {<br class="gmail_msg">
>       Size = static_cast<SizeType>(Items.size());<br class="gmail_msg">
> -      if (auto EC = Writer->writeInteger(Size, llvm::support::little))<br class="gmail_msg">
> +      if (auto EC = Writer->writeInteger(Size))<br class="gmail_msg">
>         return EC;<br class="gmail_msg">
><br class="gmail_msg">
>       for (auto &X : Items) {<br class="gmail_msg">
> @@ -101,7 +101,7 @@ public:<br class="gmail_msg">
>           return EC;<br class="gmail_msg">
>       }<br class="gmail_msg">
>     } else {<br class="gmail_msg">
> -      if (auto EC = Reader->readInteger(Size, llvm::support::little))<br class="gmail_msg">
> +      if (auto EC = Reader->readInteger(Size))<br class="gmail_msg">
>         return EC;<br class="gmail_msg">
>       for (SizeType I = 0; I < Size; ++I) {<br class="gmail_msg">
>         typename T::value_type Item;<br class="gmail_msg">
> @@ -160,8 +160,8 @@ private:<br class="gmail_msg">
><br class="gmail_msg">
>   SmallVector<RecordLimit, 2> Limits;<br class="gmail_msg">
><br class="gmail_msg">
> -  msf::StreamReader *Reader = nullptr;<br class="gmail_msg">
> -  msf::StreamWriter *Writer = nullptr;<br class="gmail_msg">
> +  BinaryStreamReader *Reader = nullptr;<br class="gmail_msg">
> +  BinaryStreamWriter *Writer = nullptr;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> } // end namespace codeview<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstream.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -59,23 +59,22 @@ struct ColumnNumberEntry {<br class="gmail_msg">
> class ModuleSubstream {<br class="gmail_msg">
> public:<br class="gmail_msg">
>   ModuleSubstream();<br class="gmail_msg">
> -  ModuleSubstream(ModuleSubstreamKind Kind, msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  static Error initialize(msf::ReadableStreamRef Stream, ModuleSubstream &Info);<br class="gmail_msg">
> +  ModuleSubstream(ModuleSubstreamKind Kind, BinaryStreamRef Data);<br class="gmail_msg">
> +  static Error initialize(BinaryStreamRef Stream, ModuleSubstream &Info);<br class="gmail_msg">
>   uint32_t getRecordLength() const;<br class="gmail_msg">
>   ModuleSubstreamKind getSubstreamKind() const;<br class="gmail_msg">
> -  msf::ReadableStreamRef getRecordData() const;<br class="gmail_msg">
> +  BinaryStreamRef getRecordData() const;<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
>   ModuleSubstreamKind Kind;<br class="gmail_msg">
> -  msf::ReadableStreamRef Data;<br class="gmail_msg">
> +  BinaryStreamRef Data;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -typedef msf::VarStreamArray<ModuleSubstream> ModuleSubstreamArray;<br class="gmail_msg">
> +typedef VarStreamArray<ModuleSubstream> ModuleSubstreamArray;<br class="gmail_msg">
> } // namespace codeview<br class="gmail_msg">
><br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> template <> struct VarStreamArrayExtractor<codeview::ModuleSubstream> {<br class="gmail_msg">
> -  Error operator()(ReadableStreamRef Stream, uint32_t &Length,<br class="gmail_msg">
> +  Error operator()(BinaryStreamRef Stream, uint32_t &Length,<br class="gmail_msg">
>                    codeview::ModuleSubstream &Info) const {<br class="gmail_msg">
>     if (auto EC = codeview::ModuleSubstream::initialize(Stream, Info))<br class="gmail_msg">
>       return EC;<br class="gmail_msg">
> @@ -83,7 +82,6 @@ template <> struct VarStreamArrayExtract<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
> };<br class="gmail_msg">
> -} // namespace msf<br class="gmail_msg">
> } // namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> #endif // LLVM_DEBUGINFO_CODEVIEW_MODULESUBSTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -28,8 +28,8 @@ namespace codeview {<br class="gmail_msg">
><br class="gmail_msg">
> struct LineColumnEntry {<br class="gmail_msg">
>   support::ulittle32_t NameIndex;<br class="gmail_msg">
> -  msf::FixedStreamArray<LineNumberEntry> LineNumbers;<br class="gmail_msg">
> -  msf::FixedStreamArray<ColumnNumberEntry> Columns;<br class="gmail_msg">
> +  FixedStreamArray<LineNumberEntry> LineNumbers;<br class="gmail_msg">
> +  FixedStreamArray<ColumnNumberEntry> Columns;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> struct FileChecksumEntry {<br class="gmail_msg">
> @@ -38,49 +38,47 @@ struct FileChecksumEntry {<br class="gmail_msg">
>   ArrayRef<uint8_t> Checksum; // The bytes of the checksum.<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -typedef msf::VarStreamArray<LineColumnEntry> LineInfoArray;<br class="gmail_msg">
> -typedef msf::VarStreamArray<FileChecksumEntry> FileChecksumArray;<br class="gmail_msg">
> +typedef VarStreamArray<LineColumnEntry> LineInfoArray;<br class="gmail_msg">
> +typedef VarStreamArray<FileChecksumEntry> FileChecksumArray;<br class="gmail_msg">
><br class="gmail_msg">
> class IModuleSubstreamVisitor {<br class="gmail_msg">
> public:<br class="gmail_msg">
>   virtual ~IModuleSubstreamVisitor() = default;<br class="gmail_msg">
><br class="gmail_msg">
>   virtual Error visitUnknown(ModuleSubstreamKind Kind,<br class="gmail_msg">
> -                             msf::ReadableStreamRef Data) = 0;<br class="gmail_msg">
> -  virtual Error visitSymbols(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitLines(msf::ReadableStreamRef Data,<br class="gmail_msg">
> +                             BinaryStreamRef Data) = 0;<br class="gmail_msg">
> +  virtual Error visitSymbols(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitLines(BinaryStreamRef Data,<br class="gmail_msg">
>                            const LineSubstreamHeader *Header,<br class="gmail_msg">
>                            const LineInfoArray &Lines);<br class="gmail_msg">
> -  virtual Error visitStringTable(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitFileChecksums(msf::ReadableStreamRef Data,<br class="gmail_msg">
> +  virtual Error visitStringTable(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitFileChecksums(BinaryStreamRef Data,<br class="gmail_msg">
>                                    const FileChecksumArray &Checksums);<br class="gmail_msg">
> -  virtual Error visitFrameData(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitInlineeLines(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitCrossScopeImports(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitCrossScopeExports(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitILLines(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitFuncMDTokenMap(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitTypeMDTokenMap(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitMergedAssemblyInput(msf::ReadableStreamRef Data);<br class="gmail_msg">
> -  virtual Error visitCoffSymbolRVA(msf::ReadableStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitFrameData(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitInlineeLines(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitCrossScopeImports(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitCrossScopeExports(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitILLines(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitFuncMDTokenMap(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitTypeMDTokenMap(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitMergedAssemblyInput(BinaryStreamRef Data);<br class="gmail_msg">
> +  virtual Error visitCoffSymbolRVA(BinaryStreamRef Data);<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> Error visitModuleSubstream(const ModuleSubstream &R,<br class="gmail_msg">
>                            IModuleSubstreamVisitor &V);<br class="gmail_msg">
> } // end namespace codeview<br class="gmail_msg">
><br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -<br class="gmail_msg">
> template <> class VarStreamArrayExtractor<codeview::LineColumnEntry> {<br class="gmail_msg">
> public:<br class="gmail_msg">
>   VarStreamArrayExtractor(const codeview::LineSubstreamHeader *Header)<br class="gmail_msg">
>       : Header(Header) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error operator()(ReadableStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
> +  Error operator()(BinaryStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
>                    codeview::LineColumnEntry &Item) const {<br class="gmail_msg">
>     using namespace codeview;<br class="gmail_msg">
>     const LineFileBlockHeader *BlockHeader;<br class="gmail_msg">
> -    StreamReader Reader(Stream);<br class="gmail_msg">
> +    BinaryStreamReader Reader(Stream);<br class="gmail_msg">
>     if (auto EC = Reader.readObject(BlockHeader))<br class="gmail_msg">
>       return EC;<br class="gmail_msg">
>     bool HasColumn = Header->Flags & LineFlags::HaveColumns;<br class="gmail_msg">
> @@ -113,11 +111,11 @@ private:<br class="gmail_msg">
><br class="gmail_msg">
> template <> class VarStreamArrayExtractor<codeview::FileChecksumEntry> {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  Error operator()(ReadableStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
> +  Error operator()(BinaryStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
>                    codeview::FileChecksumEntry &Item) const {<br class="gmail_msg">
>     using namespace codeview;<br class="gmail_msg">
>     const FileChecksum *Header;<br class="gmail_msg">
> -    StreamReader Reader(Stream);<br class="gmail_msg">
> +    BinaryStreamReader Reader(Stream);<br class="gmail_msg">
>     if (auto EC = Reader.readObject(Header))<br class="gmail_msg">
>       return EC;<br class="gmail_msg">
>     Item.FileNameOffset = Header->FileNameOffset;<br class="gmail_msg">
> @@ -129,8 +127,6 @@ public:<br class="gmail_msg">
>   }<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> -<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> #endif // LLVM_DEBUGINFO_CODEVIEW_MODULESUBSTREAMVISITOR_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -41,37 +41,37 @@ struct RecordPrefix {<br class="gmail_msg">
> StringRef getBytesAsCharacters(ArrayRef<uint8_t> LeafData);<br class="gmail_msg">
> StringRef getBytesAsCString(ArrayRef<uint8_t> LeafData);<br class="gmail_msg">
><br class="gmail_msg">
> -inline Error consume(msf::StreamReader &Reader) { return Error::success(); }<br class="gmail_msg">
> +inline Error consume(BinaryStreamReader &Reader) { return Error::success(); }<br class="gmail_msg">
><br class="gmail_msg">
> /// Decodes a numeric "leaf" value. These are integer literals encountered in<br class="gmail_msg">
> /// the type stream. If the value is positive and less than LF_NUMERIC (1 <<<br class="gmail_msg">
> /// 15), it is emitted directly in Data. Otherwise, it has a tag like LF_CHAR<br class="gmail_msg">
> /// that indicates the bitwidth and sign of the numeric data.<br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader, APSInt &Num);<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader, APSInt &Num);<br class="gmail_msg">
><br class="gmail_msg">
> /// Decodes a numeric leaf value that is known to be a particular type.<br class="gmail_msg">
> -Error consume_numeric(msf::StreamReader &Reader, uint64_t &Value);<br class="gmail_msg">
> +Error consume_numeric(BinaryStreamReader &Reader, uint64_t &Value);<br class="gmail_msg">
><br class="gmail_msg">
> /// Decodes signed and unsigned fixed-length integers.<br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader, uint32_t &Item);<br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader, int32_t &Item);<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader, uint32_t &Item);<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader, int32_t &Item);<br class="gmail_msg">
><br class="gmail_msg">
> /// Decodes a null terminated string.<br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader, StringRef &Item);<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader, StringRef &Item);<br class="gmail_msg">
><br class="gmail_msg">
> Error consume(StringRef &Data, APSInt &Num);<br class="gmail_msg">
> Error consume(StringRef &Data, uint32_t &Item);<br class="gmail_msg">
><br class="gmail_msg">
> /// Decodes an arbitrary object whose layout matches that of the underlying<br class="gmail_msg">
> /// byte sequence, and returns a pointer to the object.<br class="gmail_msg">
> -template <typename T> Error consume(msf::StreamReader &Reader, T *&Item) {<br class="gmail_msg">
> +template <typename T> Error consume(BinaryStreamReader &Reader, T *&Item) {<br class="gmail_msg">
>   return Reader.readObject(Item);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T, typename U> struct serialize_conditional_impl {<br class="gmail_msg">
>   serialize_conditional_impl(T &Item, U Func) : Item(Item), Func(Func) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     if (!Func())<br class="gmail_msg">
>       return Error::success();<br class="gmail_msg">
>     return consume(Reader, Item);<br class="gmail_msg">
> @@ -89,7 +89,7 @@ serialize_conditional_impl<T, U> seriali<br class="gmail_msg">
> template <typename T, typename U> struct serialize_array_impl {<br class="gmail_msg">
>   serialize_array_impl(ArrayRef<T> &Item, U Func) : Item(Item), Func(Func) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     return Reader.readArray(Item, Func());<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> @@ -100,7 +100,7 @@ template <typename T, typename U> struct<br class="gmail_msg">
> template <typename T> struct serialize_vector_tail_impl {<br class="gmail_msg">
>   serialize_vector_tail_impl(std::vector<T> &Item) : Item(Item) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     T Field;<br class="gmail_msg">
>     // Stop when we run out of bytes or we hit record padding bytes.<br class="gmail_msg">
>     while (!Reader.empty() && Reader.peek() < LF_PAD0) {<br class="gmail_msg">
> @@ -118,14 +118,14 @@ struct serialize_null_term_string_array_<br class="gmail_msg">
>   serialize_null_term_string_array_impl(std::vector<StringRef> &Item)<br class="gmail_msg">
>       : Item(Item) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     if (Reader.empty())<br class="gmail_msg">
>       return make_error<CodeViewError>(cv_error_code::insufficient_buffer,<br class="gmail_msg">
>                                        "Null terminated string is empty!");<br class="gmail_msg">
><br class="gmail_msg">
>     while (Reader.peek() != 0) {<br class="gmail_msg">
>       StringRef Field;<br class="gmail_msg">
> -      if (auto EC = Reader.readZeroString(Field))<br class="gmail_msg">
> +      if (auto EC = Reader.readCString(Field))<br class="gmail_msg">
>         return EC;<br class="gmail_msg">
>       Item.push_back(Field);<br class="gmail_msg">
>     }<br class="gmail_msg">
> @@ -138,7 +138,7 @@ struct serialize_null_term_string_array_<br class="gmail_msg">
> template <typename T> struct serialize_arrayref_tail_impl {<br class="gmail_msg">
>   serialize_arrayref_tail_impl(ArrayRef<T> &Item) : Item(Item) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     uint32_t Count = Reader.bytesRemaining() / sizeof(T);<br class="gmail_msg">
>     return Reader.readArray(Item, Count);<br class="gmail_msg">
>   }<br class="gmail_msg">
> @@ -149,7 +149,7 @@ template <typename T> struct serialize_a<br class="gmail_msg">
> template <typename T> struct serialize_numeric_impl {<br class="gmail_msg">
>   serialize_numeric_impl(T &Item) : Item(Item) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  Error deserialize(msf::StreamReader &Reader) const {<br class="gmail_msg">
> +  Error deserialize(BinaryStreamReader &Reader) const {<br class="gmail_msg">
>     return consume_numeric(Reader, Item);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> @@ -201,42 +201,42 @@ template <typename T> serialize_numeric_<br class="gmail_msg">
> #define CV_NUMERIC_FIELD(I) serialize_numeric(I)<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T, typename U><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>               const serialize_conditional_impl<T, U> &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T, typename U><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>               const serialize_array_impl<T, U> &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> -inline Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +inline Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>                      const serialize_null_term_string_array_impl &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>               const serialize_vector_tail_impl<T> &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>               const serialize_arrayref_tail_impl<T> &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader,<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader,<br class="gmail_msg">
>               const serialize_numeric_impl<T> &Item) {<br class="gmail_msg">
>   return Item.deserialize(Reader);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T, typename U, typename... Args><br class="gmail_msg">
> -Error consume(msf::StreamReader &Reader, T &&X, U &&Y, Args &&... Rest) {<br class="gmail_msg">
> +Error consume(BinaryStreamReader &Reader, T &&X, U &&Y, Args &&... Rest) {<br class="gmail_msg">
>   if (auto EC = consume(Reader, X))<br class="gmail_msg">
>     return EC;<br class="gmail_msg">
>   return consume(Reader, Y, std::forward<Args>(Rest)...);<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -25,10 +25,11 @@ class SymbolVisitorDelegate;<br class="gmail_msg">
> class SymbolDeserializer : public SymbolVisitorCallbacks {<br class="gmail_msg">
>   struct MappingInfo {<br class="gmail_msg">
>     explicit MappingInfo(ArrayRef<uint8_t> RecordData)<br class="gmail_msg">
> -        : Stream(RecordData), Reader(Stream), Mapping(Reader) {}<br class="gmail_msg">
> +        : Stream(RecordData, llvm::support::little), Reader(Stream),<br class="gmail_msg">
> +          Mapping(Reader) {}<br class="gmail_msg">
><br class="gmail_msg">
> -    msf::ByteStream Stream;<br class="gmail_msg">
> -    msf::StreamReader Reader;<br class="gmail_msg">
> +    BinaryByteStream Stream;<br class="gmail_msg">
> +    BinaryStreamReader Reader;<br class="gmail_msg">
>     SymbolRecordMapping Mapping;<br class="gmail_msg">
>   };<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -938,7 +938,7 @@ public:<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> typedef CVRecord<SymbolKind> CVSymbol;<br class="gmail_msg">
> -typedef msf::VarStreamArray<CVSymbol> CVSymbolArray;<br class="gmail_msg">
> +typedef VarStreamArray<CVSymbol> CVSymbolArray;<br class="gmail_msg">
><br class="gmail_msg">
> } // end namespace codeview<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -14,16 +14,14 @@<br class="gmail_msg">
> #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"<br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -class StreamReader;<br class="gmail_msg">
> -class StreamWriter;<br class="gmail_msg">
> -}<br class="gmail_msg">
> +class BinaryStreamReader;<br class="gmail_msg">
> +class BinaryStreamWriter;<br class="gmail_msg">
><br class="gmail_msg">
> namespace codeview {<br class="gmail_msg">
> class SymbolRecordMapping : public SymbolVisitorCallbacks {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit SymbolRecordMapping(msf::StreamReader &Reader) : IO(Reader) {}<br class="gmail_msg">
> -  explicit SymbolRecordMapping(msf::StreamWriter &Writer) : IO(Writer) {}<br class="gmail_msg">
> +  explicit SymbolRecordMapping(BinaryStreamReader &Reader) : IO(Reader) {}<br class="gmail_msg">
> +  explicit SymbolRecordMapping(BinaryStreamWriter &Writer) : IO(Writer) {}<br class="gmail_msg">
><br class="gmail_msg">
>   Error visitSymbolBegin(CVSymbol &Record) override;<br class="gmail_msg">
>   Error visitSymbolEnd(CVSymbol &Record) override;<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolSerializer.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -20,6 +20,8 @@<br class="gmail_msg">
> #include "llvm/ADT/StringMap.h"<br class="gmail_msg">
> #include "llvm/ADT/StringRef.h"<br class="gmail_msg">
> #include "llvm/ADT/iterator_range.h"<br class="gmail_msg">
> +#include "llvm/DebugInfo/MSF/BinaryByteStream.h"<br class="gmail_msg">
> +#include "llvm/DebugInfo/MSF/BinaryStreamWriter.h"<br class="gmail_msg">
> #include "llvm/Support/Allocator.h"<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
><br class="gmail_msg">
> @@ -28,7 +30,7 @@ namespace codeview {<br class="gmail_msg">
><br class="gmail_msg">
> class SymbolSerializer : public SymbolVisitorCallbacks {<br class="gmail_msg">
>   uint32_t RecordStart = 0;<br class="gmail_msg">
> -  msf::StreamWriter &Writer;<br class="gmail_msg">
> +  BinaryStreamWriter &Writer;<br class="gmail_msg">
>   SymbolRecordMapping Mapping;<br class="gmail_msg">
>   Optional<SymbolKind> CurrentSymbol;<br class="gmail_msg">
><br class="gmail_msg">
> @@ -42,7 +44,7 @@ class SymbolSerializer : public SymbolVi<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit SymbolSerializer(msf::StreamWriter &Writer)<br class="gmail_msg">
> +  explicit SymbolSerializer(BinaryStreamWriter &Writer)<br class="gmail_msg">
>       : Writer(Writer), Mapping(Writer) {}<br class="gmail_msg">
><br class="gmail_msg">
>   virtual Error visitSymbolBegin(CVSymbol &Record) override {<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -15,9 +15,7 @@<br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
><br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -class StreamReader;<br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> +class BinaryStreamReader;<br class="gmail_msg">
><br class="gmail_msg">
> namespace codeview {<br class="gmail_msg">
><br class="gmail_msg">
> @@ -25,7 +23,7 @@ class SymbolVisitorDelegate {<br class="gmail_msg">
> public:<br class="gmail_msg">
>   virtual ~SymbolVisitorDelegate() = default;<br class="gmail_msg">
><br class="gmail_msg">
> -  virtual uint32_t getRecordOffset(msf::StreamReader Reader) = 0;<br class="gmail_msg">
> +  virtual uint32_t getRecordOffset(BinaryStreamReader Reader) = 0;<br class="gmail_msg">
>   virtual StringRef getFileNameForFileOffset(uint32_t FileOffset) = 0;<br class="gmail_msg">
>   virtual StringRef getStringTable() = 0;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeDeserializer.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -29,10 +29,11 @@ namespace codeview {<br class="gmail_msg">
> class TypeDeserializer : public TypeVisitorCallbacks {<br class="gmail_msg">
>   struct MappingInfo {<br class="gmail_msg">
>     explicit MappingInfo(ArrayRef<uint8_t> RecordData)<br class="gmail_msg">
> -        : Stream(RecordData), Reader(Stream), Mapping(Reader) {}<br class="gmail_msg">
> +        : Stream(RecordData, llvm::support::little), Reader(Stream),<br class="gmail_msg">
> +          Mapping(Reader) {}<br class="gmail_msg">
><br class="gmail_msg">
> -    msf::ByteStream Stream;<br class="gmail_msg">
> -    msf::StreamReader Reader;<br class="gmail_msg">
> +    BinaryByteStream Stream;<br class="gmail_msg">
> +    BinaryStreamReader Reader;<br class="gmail_msg">
>     TypeRecordMapping Mapping;<br class="gmail_msg">
>   };<br class="gmail_msg">
><br class="gmail_msg">
> @@ -72,16 +73,16 @@ private:<br class="gmail_msg">
><br class="gmail_msg">
> class FieldListDeserializer : public TypeVisitorCallbacks {<br class="gmail_msg">
>   struct MappingInfo {<br class="gmail_msg">
> -    explicit MappingInfo(msf::StreamReader &R)<br class="gmail_msg">
> +    explicit MappingInfo(BinaryStreamReader &R)<br class="gmail_msg">
>         : Reader(R), Mapping(Reader), StartOffset(0) {}<br class="gmail_msg">
><br class="gmail_msg">
> -    msf::StreamReader &Reader;<br class="gmail_msg">
> +    BinaryStreamReader &Reader;<br class="gmail_msg">
>     TypeRecordMapping Mapping;<br class="gmail_msg">
>     uint32_t StartOffset;<br class="gmail_msg">
>   };<br class="gmail_msg">
><br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit FieldListDeserializer(msf::StreamReader &Reader) : Mapping(Reader) {<br class="gmail_msg">
> +  explicit FieldListDeserializer(BinaryStreamReader &Reader) : Mapping(Reader) {<br class="gmail_msg">
>     CVType FieldList;<br class="gmail_msg">
>     FieldList.Type = TypeLeafKind::LF_FIELDLIST;<br class="gmail_msg">
>     consumeError(Mapping.Mapping.visitTypeBegin(FieldList));<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -26,9 +26,7 @@<br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
><br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -class StreamReader;<br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> +class BinaryStreamReader;<br class="gmail_msg">
><br class="gmail_msg">
> namespace codeview {<br class="gmail_msg">
><br class="gmail_msg">
> @@ -42,7 +40,7 @@ struct CVMemberRecord {<br class="gmail_msg">
>   TypeLeafKind Kind;<br class="gmail_msg">
>   ArrayRef<uint8_t> Data;<br class="gmail_msg">
> };<br class="gmail_msg">
> -typedef msf::VarStreamArray<CVType> CVTypeArray;<br class="gmail_msg">
> +typedef VarStreamArray<CVType> CVTypeArray;<br class="gmail_msg">
> typedef iterator_range<CVTypeArray::Iterator> CVTypeRange;<br class="gmail_msg">
><br class="gmail_msg">
> /// Equvalent to CV_fldattr_t in cvinfo.h.<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -16,15 +16,14 @@<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
> -class StreamReader;<br class="gmail_msg">
> -class StreamWriter;<br class="gmail_msg">
> -}<br class="gmail_msg">
> +class BinaryStreamReader;<br class="gmail_msg">
> +class BinaryStreamWriter;<br class="gmail_msg">
> +<br class="gmail_msg">
> namespace codeview {<br class="gmail_msg">
> class TypeRecordMapping : public TypeVisitorCallbacks {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit TypeRecordMapping(msf::StreamReader &Reader) : IO(Reader) {}<br class="gmail_msg">
> -  explicit TypeRecordMapping(msf::StreamWriter &Writer) : IO(Writer) {}<br class="gmail_msg">
> +  explicit TypeRecordMapping(BinaryStreamReader &Reader) : IO(Reader) {}<br class="gmail_msg">
> +  explicit TypeRecordMapping(BinaryStreamWriter &Writer) : IO(Writer) {}<br class="gmail_msg">
><br class="gmail_msg">
>   Error visitTypeBegin(CVType &Record) override;<br class="gmail_msg">
>   Error visitTypeEnd(CVType &Record) override;<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeSerializer.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -56,8 +56,8 @@ class TypeSerializer : public TypeVisito<br class="gmail_msg">
>   Optional<TypeLeafKind> TypeKind;<br class="gmail_msg">
>   Optional<TypeLeafKind> MemberKind;<br class="gmail_msg">
>   std::vector<uint8_t> RecordBuffer;<br class="gmail_msg">
> -  msf::MutableByteStream Stream;<br class="gmail_msg">
> -  msf::StreamWriter Writer;<br class="gmail_msg">
> +  MutableBinaryByteStream Stream;<br class="gmail_msg">
> +  BinaryStreamWriter Writer;<br class="gmail_msg">
>   TypeRecordMapping Mapping;<br class="gmail_msg">
><br class="gmail_msg">
>   RecordList SeenRecords;<br class="gmail_msg">
> @@ -109,7 +109,7 @@ private:<br class="gmail_msg">
>   Error visitKnownMemberImpl(CVMemberRecord &CVR, RecordType &Record) {<br class="gmail_msg">
>     assert(CVR.Kind == static_cast<TypeLeafKind>(Record.getKind()));<br class="gmail_msg">
><br class="gmail_msg">
> -    if (auto EC = Writer.writeEnum(CVR.Kind, llvm::support::little))<br class="gmail_msg">
> +    if (auto EC = Writer.writeEnum(CVR.Kind))<br class="gmail_msg">
>       return EC;<br class="gmail_msg">
><br class="gmail_msg">
>     if (auto EC = Mapping.visitKnownMember(CVR, Record))<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/MSF/BinaryByteStream.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -1,19 +1,19 @@<br class="gmail_msg">
> -//===- ByteStream.h - Reads stream data from a byte sequence ----*- C++ -*-===//<br class="gmail_msg">
> +//===- BinaryByteStream.h ---------------------------------------*- C++ -*-===//<br class="gmail_msg">
> //<br class="gmail_msg">
> //                     The LLVM Compiler Infrastructure<br class="gmail_msg">
> //<br class="gmail_msg">
> // This file is distributed under the University of Illinois Open Source<br class="gmail_msg">
> // License. See LICENSE.TXT for details.<br class="gmail_msg">
> -//<br class="gmail_msg">
> +//===----------------------------------------------------------------------===//<br class="gmail_msg">
> +// A BinaryStream which stores data in a single continguous memory buffer.<br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> -#ifndef LLVM_DEBUGINFO_MSF_BYTESTREAM_H<br class="gmail_msg">
> -#define LLVM_DEBUGINFO_MSF_BYTESTREAM_H<br class="gmail_msg">
> +#ifndef LLVM_SUPPORT_BINARYBYTESTREAM_H<br class="gmail_msg">
> +#define LLVM_SUPPORT_BINARYBYTESTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> #include "llvm/ADT/ArrayRef.h"<br class="gmail_msg">
> #include "llvm/ADT/StringRef.h"<br class="gmail_msg">
> #include "llvm/DebugInfo/MSF/BinaryStream.h"<br class="gmail_msg">
> -#include "llvm/DebugInfo/MSF/MSFError.h"<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
> #include "llvm/Support/FileOutputBuffer.h"<br class="gmail_msg">
> #include "llvm/Support/MemoryBuffer.h"<br class="gmail_msg">
> @@ -23,34 +23,40 @@<br class="gmail_msg">
> #include <memory><br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
><br class="gmail_msg">
> -class ByteStream : public ReadableStream {<br class="gmail_msg">
> +/// \brief An implementation of BinaryStream which holds its entire data set<br class="gmail_msg">
> +/// in a single contiguous buffer.  BinaryByteStream guarantees that no read<br class="gmail_msg">
> +/// operation will ever incur a copy.  Note that BinaryByteStream does not<br class="gmail_msg">
> +/// own the underlying buffer.<br class="gmail_msg">
> +class BinaryByteStream : public BinaryStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  ByteStream() = default;<br class="gmail_msg">
> -  explicit ByteStream(ArrayRef<uint8_t> Data) : Data(Data) {}<br class="gmail_msg">
> -  explicit ByteStream(StringRef Data)<br class="gmail_msg">
> -      : Data(Data.bytes_begin(), Data.bytes_end()) {}<br class="gmail_msg">
> +  BinaryByteStream() = default;<br class="gmail_msg">
> +  BinaryByteStream(ArrayRef<uint8_t> Data, llvm::support::endianness Endian)<br class="gmail_msg">
> +      : Endian(Endian), Data(Data) {}<br class="gmail_msg">
> +  BinaryByteStream(StringRef Data, llvm::support::endianness Endian)<br class="gmail_msg">
> +      : Endian(Endian), Data(Data.bytes_begin(), Data.bytes_end()) {}<br class="gmail_msg">
> +<br class="gmail_msg">
> +  llvm::support::endianness getEndian() const override { return Endian; }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readBytes(uint32_t Offset, uint32_t Size,<br class="gmail_msg">
> -                  ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                  ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     if (Offset > Data.size())<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
>     if (Data.size() < Size + Offset)<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
>     Buffer = Data.slice(Offset, Size);<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readLongestContiguousChunk(uint32_t Offset,<br class="gmail_msg">
> -                                   ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                                   ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     if (Offset >= Data.size())<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
>     Buffer = Data.slice(Offset);<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  uint32_t getLength() const override { return Data.size(); }<br class="gmail_msg">
> +  uint32_t getLength() override { return Data.size(); }<br class="gmail_msg">
><br class="gmail_msg">
>   ArrayRef<uint8_t> data() const { return Data; }<br class="gmail_msg">
><br class="gmail_msg">
> @@ -60,76 +66,91 @@ public:<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> protected:<br class="gmail_msg">
> +  llvm::support::endianness Endian;<br class="gmail_msg">
>   ArrayRef<uint8_t> Data;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -// MemoryBufferByteStream behaves like a read-only ByteStream, but has its data<br class="gmail_msg">
> -// backed by an llvm::MemoryBuffer.  It also owns the underlying MemoryBuffer.<br class="gmail_msg">
> -class MemoryBufferByteStream : public ByteStream {<br class="gmail_msg">
> +/// \brief An implementation of BinaryStream whose data is backed by an llvm<br class="gmail_msg">
> +/// MemoryBuffer object.  MemoryBufferByteStream owns the MemoryBuffer in<br class="gmail_msg">
> +/// question.  As with BinaryByteStream, reading from a MemoryBufferByteStream<br class="gmail_msg">
> +/// will never cause a copy.<br class="gmail_msg">
> +class MemoryBufferByteStream : public BinaryByteStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit MemoryBufferByteStream(std::unique_ptr<MemoryBuffer> Buffer)<br class="gmail_msg">
> -      : ByteStream(ArrayRef<uint8_t>(Buffer->getBuffer().bytes_begin(),<br class="gmail_msg">
> -                                     Buffer->getBuffer().bytes_end())),<br class="gmail_msg">
> +  explicit MemoryBufferByteStream(std::unique_ptr<MemoryBuffer> Buffer,<br class="gmail_msg">
> +                                  llvm::support::endianness Endian)<br class="gmail_msg">
> +      : BinaryByteStream(Buffer->getBuffer(), Endian),<br class="gmail_msg">
>         MemBuffer(std::move(Buffer)) {}<br class="gmail_msg">
><br class="gmail_msg">
>   std::unique_ptr<MemoryBuffer> MemBuffer;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -class MutableByteStream : public WritableStream {<br class="gmail_msg">
> +/// \brief An implementation of BinaryStream which holds its entire data set<br class="gmail_msg">
> +/// in a single contiguous buffer.  As with BinaryByteStream, the mutable<br class="gmail_msg">
> +/// version also guarantees that no read operation will ever incur a copy,<br class="gmail_msg">
> +/// and similarly it does not own the underlying buffer.<br class="gmail_msg">
> +class MutableBinaryByteStream : public WritableBinaryStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  MutableByteStream() = default;<br class="gmail_msg">
> -  explicit MutableByteStream(MutableArrayRef<uint8_t> Data)<br class="gmail_msg">
> -      : Data(Data), ImmutableStream(Data) {}<br class="gmail_msg">
> +  MutableBinaryByteStream() = default;<br class="gmail_msg">
> +  MutableBinaryByteStream(MutableArrayRef<uint8_t> Data,<br class="gmail_msg">
> +                          llvm::support::endianness Endian)<br class="gmail_msg">
> +      : Data(Data), ImmutableStream(Data, Endian) {}<br class="gmail_msg">
> +<br class="gmail_msg">
> +  llvm::support::endianness getEndian() const override {<br class="gmail_msg">
> +    return ImmutableStream.getEndian();<br class="gmail_msg">
> +  }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readBytes(uint32_t Offset, uint32_t Size,<br class="gmail_msg">
> -                  ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                  ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     return ImmutableStream.readBytes(Offset, Size, Buffer);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readLongestContiguousChunk(uint32_t Offset,<br class="gmail_msg">
> -                                   ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                                   ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     return ImmutableStream.readLongestContiguousChunk(Offset, Buffer);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  uint32_t getLength() const override { return ImmutableStream.getLength(); }<br class="gmail_msg">
> +  uint32_t getLength() override { return ImmutableStream.getLength(); }<br class="gmail_msg">
><br class="gmail_msg">
> -  Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Buffer) const override {<br class="gmail_msg">
> +  Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Buffer) override {<br class="gmail_msg">
>     if (Buffer.empty())<br class="gmail_msg">
>       return Error::success();<br class="gmail_msg">
><br class="gmail_msg">
>     if (Data.size() < Buffer.size())<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
>     if (Offset > Buffer.size() - Data.size())<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
><br class="gmail_msg">
>     uint8_t *DataPtr = const_cast<uint8_t *>(Data.data());<br class="gmail_msg">
>     ::memcpy(DataPtr + Offset, Buffer.data(), Buffer.size());<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  Error commit() const override { return Error::success(); }<br class="gmail_msg">
> +  Error commit() override { return Error::success(); }<br class="gmail_msg">
><br class="gmail_msg">
>   MutableArrayRef<uint8_t> data() const { return Data; }<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
>   MutableArrayRef<uint8_t> Data;<br class="gmail_msg">
> -  ByteStream ImmutableStream;<br class="gmail_msg">
> +  BinaryByteStream ImmutableStream;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -// A simple adapter that acts like a ByteStream but holds ownership over<br class="gmail_msg">
> -// and underlying FileOutputBuffer.<br class="gmail_msg">
> -class FileBufferByteStream : public WritableStream {<br class="gmail_msg">
> +/// \brief An implementation of WritableBinaryStream backed by an llvm<br class="gmail_msg">
> +/// FileOutputBuffer.<br class="gmail_msg">
> +class FileBufferByteStream : public WritableBinaryStream {<br class="gmail_msg">
> private:<br class="gmail_msg">
> -  class StreamImpl : public MutableByteStream {<br class="gmail_msg">
> +  class StreamImpl : public MutableBinaryByteStream {<br class="gmail_msg">
>   public:<br class="gmail_msg">
> -    StreamImpl(std::unique_ptr<FileOutputBuffer> Buffer)<br class="gmail_msg">
> -        : MutableByteStream(MutableArrayRef<uint8_t>(Buffer->getBufferStart(),<br class="gmail_msg">
> -                                                     Buffer->getBufferEnd())),<br class="gmail_msg">
> +    StreamImpl(std::unique_ptr<FileOutputBuffer> Buffer,<br class="gmail_msg">
> +               llvm::support::endianness Endian)<br class="gmail_msg">
> +        : MutableBinaryByteStream(<br class="gmail_msg">
> +              MutableArrayRef<uint8_t>(Buffer->getBufferStart(),<br class="gmail_msg">
> +                                       Buffer->getBufferEnd()),<br class="gmail_msg">
> +              Endian),<br class="gmail_msg">
>           FileBuffer(std::move(Buffer)) {}<br class="gmail_msg">
><br class="gmail_msg">
> -    Error commit() const override {<br class="gmail_msg">
> +    Error commit() override {<br class="gmail_msg">
>       if (FileBuffer->commit())<br class="gmail_msg">
> -        return llvm::make_error<MSFError>(msf_error_code::not_writable);<br class="gmail_msg">
> +        return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
>       return Error::success();<br class="gmail_msg">
>     }<br class="gmail_msg">
><br class="gmail_msg">
> @@ -138,32 +159,36 @@ private:<br class="gmail_msg">
>   };<br class="gmail_msg">
><br class="gmail_msg">
> public:<br class="gmail_msg">
> -  explicit FileBufferByteStream(std::unique_ptr<FileOutputBuffer> Buffer)<br class="gmail_msg">
> -      : Impl(std::move(Buffer)) {}<br class="gmail_msg">
> +  explicit FileBufferByteStream(std::unique_ptr<FileOutputBuffer> Buffer,<br class="gmail_msg">
> +                                llvm::support::endianness Endian)<br class="gmail_msg">
> +      : Impl(std::move(Buffer), Endian) {}<br class="gmail_msg">
> +<br class="gmail_msg">
> +  llvm::support::endianness getEndian() const override {<br class="gmail_msg">
> +    return Impl.getEndian();<br class="gmail_msg">
> +  }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readBytes(uint32_t Offset, uint32_t Size,<br class="gmail_msg">
> -                  ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                  ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     return Impl.readBytes(Offset, Size, Buffer);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readLongestContiguousChunk(uint32_t Offset,<br class="gmail_msg">
> -                                   ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> +                                   ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
>     return Impl.readLongestContiguousChunk(Offset, Buffer);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  uint32_t getLength() const override { return Impl.getLength(); }<br class="gmail_msg">
> +  uint32_t getLength() override { return Impl.getLength(); }<br class="gmail_msg">
><br class="gmail_msg">
> -  Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Data) const override {<br class="gmail_msg">
> +  Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Data) override {<br class="gmail_msg">
>     return Impl.writeBytes(Offset, Data);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  Error commit() const override { return Impl.commit(); }<br class="gmail_msg">
> +  Error commit() override { return Impl.commit(); }<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
>   StreamImpl Impl;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> -#endif // LLVM_DEBUGINFO_MSF_BYTESTREAM_H<br class="gmail_msg">
> +#endif // LLVM_SUPPORT_BINARYBYTESTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/MSF/BinaryItemStream.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -1,4 +1,4 @@<br class="gmail_msg">
> -//===- SequencedItemStream.h ------------------------------------*- C++ -*-===//<br class="gmail_msg">
> +//===- BinaryItemStream.h ---------------------------------------*- C++ -*-===//<br class="gmail_msg">
> //<br class="gmail_msg">
> //                     The LLVM Compiler Infrastructure<br class="gmail_msg">
> //<br class="gmail_msg">
> @@ -7,87 +7,96 @@<br class="gmail_msg">
> //<br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> -#ifndef LLVM_DEBUGINFO_MSF_SEQUENCEDITEMSTREAM_H<br class="gmail_msg">
> -#define LLVM_DEBUGINFO_MSF_SEQUENCEDITEMSTREAM_H<br class="gmail_msg">
> +#ifndef LLVM_SUPPORT_BINARYITEMSTREAM_H<br class="gmail_msg">
> +#define LLVM_SUPPORT_BINARYITEMSTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> #include "llvm/ADT/ArrayRef.h"<br class="gmail_msg">
> #include "llvm/DebugInfo/MSF/BinaryStream.h"<br class="gmail_msg">
> -#include "llvm/DebugInfo/MSF/MSFError.h"<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
> #include <cstddef><br class="gmail_msg">
> #include <cstdint><br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
><br class="gmail_msg">
> -template <typename T> struct SequencedItemTraits {<br class="gmail_msg">
> -  static size_t length(const T &Item) = delete;<br class="gmail_msg">
> -  static ArrayRef<uint8_t> bytes(const T &Item) = delete;<br class="gmail_msg">
> +template <typename T> struct BinaryItemTraits {<br class="gmail_msg">
> +  size_t length(const T &Item) = delete;<br class="gmail_msg">
> +  ArrayRef<uint8_t> bytes(const T &Item) = delete;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -/// SequencedItemStream represents a sequence of objects stored in a<br class="gmail_msg">
> -/// standard container but for which it is useful to view as a stream of<br class="gmail_msg">
> -/// contiguous bytes.  An example of this might be if you have a std::vector<br class="gmail_msg">
> -/// of TPI records, where each record contains a byte sequence that<br class="gmail_msg">
> -/// represents that one record serialized, but where each consecutive item<br class="gmail_msg">
> -/// might not be allocated immediately after the previous item.  Using a<br class="gmail_msg">
> -/// SequencedItemStream, we can adapt the VarStreamArray class to trivially<br class="gmail_msg">
> -/// extract one item at a time, allowing the data to be used anywhere a<br class="gmail_msg">
> -/// VarStreamArray could be used.<br class="gmail_msg">
> -template <typename T, typename Traits = SequencedItemTraits<T>><br class="gmail_msg">
> -class SequencedItemStream : public ReadableStream {<br class="gmail_msg">
> +/// BinaryItemStream represents a sequence of objects stored in some kind of<br class="gmail_msg">
> +/// external container but for which it is useful to view as a stream of<br class="gmail_msg">
> +/// contiguous bytes.  An example of this might be if you have a collection of<br class="gmail_msg">
> +/// records and you serialize each one into a buffer, and store these serialized<br class="gmail_msg">
> +/// records in a container.  The pointers themselves are not laid out<br class="gmail_msg">
> +/// contiguously in memory, but we may wish to read from or write to these<br class="gmail_msg">
> +/// records as if they were.<br class="gmail_msg">
> +template <typename T, typename ItemTraits = BinaryItemTraits<T>><br class="gmail_msg">
> +class BinaryItemStream : public BinaryStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  SequencedItemStream() = default;<br class="gmail_msg">
> +  explicit BinaryItemStream(llvm::support::endianness Endian)<br class="gmail_msg">
> +      : Endian(Endian) {}<br class="gmail_msg">
> +<br class="gmail_msg">
> +  llvm::support::endianness getEndian() const override { return Endian; }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readBytes(uint32_t Offset, uint32_t Size,<br class="gmail_msg">
> -                  ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> -    auto ExpectedIndex = translateOffsetIndex(Offset);<br class="gmail_msg">
> -    if (!ExpectedIndex)<br class="gmail_msg">
> -      return ExpectedIndex.takeError();<br class="gmail_msg">
> -    const auto &Item = Items[*ExpectedIndex];<br class="gmail_msg">
> -    if (Size > Traits::length(Item))<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> -    Buffer = Traits::bytes(Item).take_front(Size);<br class="gmail_msg">
> +                  ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
> +    if (auto EC = readLongestContiguousChunk(Offset, Buffer))<br class="gmail_msg">
> +      return EC;<br class="gmail_msg">
> +<br class="gmail_msg">
> +    if (Size > Buffer.size())<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
> +<br class="gmail_msg">
> +    Buffer = Buffer.take_front(Size);<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   Error readLongestContiguousChunk(uint32_t Offset,<br class="gmail_msg">
> -                                   ArrayRef<uint8_t> &Buffer) const override {<br class="gmail_msg">
> -    auto ExpectedIndex = translateOffsetIndex(Offset);<br class="gmail_msg">
> -    if (!ExpectedIndex)<br class="gmail_msg">
> -      return ExpectedIndex.takeError();<br class="gmail_msg">
> -    Buffer = Traits::bytes(Items[*ExpectedIndex]);<br class="gmail_msg">
> +                                   ArrayRef<uint8_t> &Buffer) override {<br class="gmail_msg">
> +    uint32_t Index;<br class="gmail_msg">
> +    uint32_t ByteOffset;<br class="gmail_msg">
> +    if (auto EC = translateOffsetIndex(Offset, Index, ByteOffset))<br class="gmail_msg">
> +      return EC;<br class="gmail_msg">
> +    const auto &Item = Items[Index];<br class="gmail_msg">
> +    Buffer = Traits.bytes(Item).drop_front(ByteOffset);<br class="gmail_msg">
>     return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   void setItems(ArrayRef<T> ItemArray) { Items = ItemArray; }<br class="gmail_msg">
><br class="gmail_msg">
> -  uint32_t getLength() const override {<br class="gmail_msg">
> +  uint32_t getLength() override {<br class="gmail_msg">
>     uint32_t Size = 0;<br class="gmail_msg">
>     for (const auto &Item : Items)<br class="gmail_msg">
> -      Size += Traits::length(Item);<br class="gmail_msg">
> +      Size += Traits.length(Item);<br class="gmail_msg">
>     return Size;<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
> -  Expected<uint32_t> translateOffsetIndex(uint32_t Offset) const {<br class="gmail_msg">
> +  Error translateOffsetIndex(uint32_t Offset, uint32_t &ItemIndex,<br class="gmail_msg">
> +                             uint32_t &ByteOffset) {<br class="gmail_msg">
> +    ItemIndex = 0;<br class="gmail_msg">
> +    ByteOffset = 0;<br class="gmail_msg">
> +    uint32_t PrevOffset = 0;<br class="gmail_msg">
>     uint32_t CurrentOffset = 0;<br class="gmail_msg">
> -    uint32_t CurrentIndex = 0;<br class="gmail_msg">
> -    for (const auto &Item : Items) {<br class="gmail_msg">
> -      if (CurrentOffset >= Offset)<br class="gmail_msg">
> -        break;<br class="gmail_msg">
> -      CurrentOffset += Traits::length(Item);<br class="gmail_msg">
> -      ++CurrentIndex;<br class="gmail_msg">
> +    if (Offset > 0) {<br class="gmail_msg">
> +      for (const auto &Item : Items) {<br class="gmail_msg">
> +        PrevOffset = CurrentOffset;<br class="gmail_msg">
> +        CurrentOffset += Traits.length(Item);<br class="gmail_msg">
> +        if (CurrentOffset > Offset)<br class="gmail_msg">
> +          break;<br class="gmail_msg">
> +        ++ItemIndex;<br class="gmail_msg">
> +      }<br class="gmail_msg">
>     }<br class="gmail_msg">
> -    if (CurrentOffset != Offset)<br class="gmail_msg">
> -      return make_error<MSFError>(msf_error_code::insufficient_buffer);<br class="gmail_msg">
> -    return CurrentIndex;<br class="gmail_msg">
> +    if (CurrentOffset < Offset)<br class="gmail_msg">
> +      return errorCodeToError(make_error_code(std::errc::no_buffer_space));<br class="gmail_msg">
> +    ByteOffset = Offset - PrevOffset;<br class="gmail_msg">
> +    return Error::success();<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> +  llvm::support::endianness Endian;<br class="gmail_msg">
> +  ItemTraits Traits;<br class="gmail_msg">
>   ArrayRef<T> Items;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> -#endif // LLVM_DEBUGINFO_MSF_SEQUENCEDITEMSTREAM_H<br class="gmail_msg">
> +#endif // LLVM_SUPPORT_BINARYITEMSTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStream.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -1,4 +1,4 @@<br class="gmail_msg">
> -//===- StreamInterface.h - Base interface for a stream of data --*- C++ -*-===//<br class="gmail_msg">
> +//===- BinaryStream.h - Base interface for a stream of data -----*- C++ -*-===//<br class="gmail_msg">
> //<br class="gmail_msg">
> //                     The LLVM Compiler Infrastructure<br class="gmail_msg">
> //<br class="gmail_msg">
> @@ -7,47 +7,62 @@<br class="gmail_msg">
> //<br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> -#ifndef LLVM_DEBUGINFO_MSF_STREAMINTERFACE_H<br class="gmail_msg">
> -#define LLVM_DEBUGINFO_MSF_STREAMINTERFACE_H<br class="gmail_msg">
> +#ifndef LLVM_SUPPORT_BINARYSTREAM_H<br class="gmail_msg">
> +#define LLVM_SUPPORT_BINARYSTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> #include "llvm/ADT/ArrayRef.h"<br class="gmail_msg">
> +#include "llvm/Support/Endian.h"<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
> #include <cstdint><br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
><br class="gmail_msg">
> -class ReadableStream {<br class="gmail_msg">
> +/// \brief An interface for accessing data in a stream-like format, but which<br class="gmail_msg">
> +/// discourages copying.  Instead of specifying a buffer in which to copy<br class="gmail_msg">
> +/// data on a read, the API returns an ArrayRef to data owned by the stream's<br class="gmail_msg">
> +/// implementation.  Since implementations may not necessarily store data in a<br class="gmail_msg">
> +/// single contiguous buffer (or even in memory at all), in such cases a it may<br class="gmail_msg">
> +/// be necessary for an implementation to cache such a buffer so that it can<br class="gmail_msg">
> +/// return it.<br class="gmail_msg">
> +class BinaryStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  virtual ~ReadableStream() = default;<br class="gmail_msg">
> +  virtual ~BinaryStream() = default;<br class="gmail_msg">
><br class="gmail_msg">
> -  // Given an offset into the stream and a number of bytes, attempt to read<br class="gmail_msg">
> -  // the bytes and set the output ArrayRef to point to a reference into the<br class="gmail_msg">
> -  // stream, without copying any data.<br class="gmail_msg">
> +  virtual llvm::support::endianness getEndian() const = 0;<br class="gmail_msg">
> +<br class="gmail_msg">
> +  /// \brief Given an offset into the stream and a number of bytes, attempt to<br class="gmail_msg">
> +  /// read the bytes and set the output ArrayRef to point to data owned by the<br class="gmail_msg">
> +  /// stream.<br class="gmail_msg">
>   virtual Error readBytes(uint32_t Offset, uint32_t Size,<br class="gmail_msg">
> -                          ArrayRef<uint8_t> &Buffer) const = 0;<br class="gmail_msg">
> +                          ArrayRef<uint8_t> &Buffer) = 0;<br class="gmail_msg">
><br class="gmail_msg">
> -  // Given an offset into the stream, read as much as possible without copying<br class="gmail_msg">
> -  // any data.<br class="gmail_msg">
> +  /// \brief Given an offset into the stream, read as much as possible without<br class="gmail_msg">
> +  /// copying any data.<br class="gmail_msg">
>   virtual Error readLongestContiguousChunk(uint32_t Offset,<br class="gmail_msg">
> -                                           ArrayRef<uint8_t> &Buffer) const = 0;<br class="gmail_msg">
> +                                           ArrayRef<uint8_t> &Buffer) = 0;<br class="gmail_msg">
><br class="gmail_msg">
> -  virtual uint32_t getLength() const = 0;<br class="gmail_msg">
> +  /// \brief Return the number of bytes of data in this stream.<br class="gmail_msg">
> +  virtual uint32_t getLength() = 0;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -class WritableStream : public ReadableStream {<br class="gmail_msg">
> +/// \brief A BinaryStream which can be read from as well as written to.  Note<br class="gmail_msg">
> +/// that writing to a BinaryStream always necessitates copying from the input<br class="gmail_msg">
> +/// buffer to the stream's backing store.  Streams are assumed to be buffered<br class="gmail_msg">
> +/// so that to be portable it is necessary to call commit() on the stream when<br class="gmail_msg">
> +/// all data has been written.<br class="gmail_msg">
> +class WritableBinaryStream : public BinaryStream {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  ~WritableStream() override = default;<br class="gmail_msg">
> +  ~WritableBinaryStream() override = default;<br class="gmail_msg">
><br class="gmail_msg">
> -  // Attempt to write the given bytes into the stream at the desired offset.<br class="gmail_msg">
> -  // This will always necessitate a copy.  Cannot shrink or grow the stream,<br class="gmail_msg">
> -  // only writes into existing allocated space.<br class="gmail_msg">
> -  virtual Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Data) const = 0;<br class="gmail_msg">
> +  /// \brief Attempt to write the given bytes into the stream at the desired<br class="gmail_msg">
> +  /// offset. This will always necessitate a copy.  Cannot shrink or grow the<br class="gmail_msg">
> +  /// stream, only writes into existing allocated space.<br class="gmail_msg">
> +  virtual Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Data) = 0;<br class="gmail_msg">
><br class="gmail_msg">
> -  virtual Error commit() const = 0;<br class="gmail_msg">
> +  /// \brief For buffered streams, commits changes to the backing store.<br class="gmail_msg">
> +  virtual Error commit() = 0;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // end namespace msf<br class="gmail_msg">
> } // end namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> -#endif // LLVM_DEBUGINFO_MSF_STREAMINTERFACE_H<br class="gmail_msg">
> +#endif // LLVM_SUPPORT_BINARYSTREAM_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamArray.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -1,4 +1,4 @@<br class="gmail_msg">
> -//===- StreamArray.h - Array backed by an arbitrary stream ------*- C++ -*-===//<br class="gmail_msg">
> +//===- BinaryStreamArray.h - Array backed by an arbitrary stream *- C++ -*-===//<br class="gmail_msg">
> //<br class="gmail_msg">
> //                     The LLVM Compiler Infrastructure<br class="gmail_msg">
> //<br class="gmail_msg">
> @@ -7,8 +7,8 @@<br class="gmail_msg">
> //<br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> -#ifndef LLVM_DEBUGINFO_MSF_STREAMARRAY_H<br class="gmail_msg">
> -#define LLVM_DEBUGINFO_MSF_STREAMARRAY_H<br class="gmail_msg">
> +#ifndef LLVM_SUPPORT_BINARYSTREAMARRAY_H<br class="gmail_msg">
> +#define LLVM_SUPPORT_BINARYSTREAMARRAY_H<br class="gmail_msg">
><br class="gmail_msg">
> #include "llvm/ADT/ArrayRef.h"<br class="gmail_msg">
> #include "llvm/ADT/iterator.h"<br class="gmail_msg">
> @@ -17,11 +17,20 @@<br class="gmail_msg">
> #include <cassert><br class="gmail_msg">
> #include <cstdint><br class="gmail_msg">
><br class="gmail_msg">
> +/// Lightweight arrays that are backed by an arbitrary BinaryStream.  This file<br class="gmail_msg">
> +/// provides two different array implementations.<br class="gmail_msg">
> +///<br class="gmail_msg">
> +///     VarStreamArray - Arrays of variable length records.  The user specifies<br class="gmail_msg">
> +///       an Extractor type that can extract a record from a given offset and<br class="gmail_msg">
> +///       return the number of bytes consumed by the record.<br class="gmail_msg">
> +///<br class="gmail_msg">
> +///     FixedStreamArray - Arrays of fixed length records.  This is similar in<br class="gmail_msg">
> +///       spirit to ArrayRef<T>, but since it is backed by a BinaryStream, the<br class="gmail_msg">
> +///       elements of the array need not be laid out in contiguous memory.<br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
><br class="gmail_msg">
> /// VarStreamArrayExtractor is intended to be specialized to provide customized<br class="gmail_msg">
> -/// extraction logic.  On input it receives a StreamRef pointing to the<br class="gmail_msg">
> +/// extraction logic.  On input it receives a BinaryStreamRef pointing to the<br class="gmail_msg">
> /// beginning of the next record, but where the length of the record is not yet<br class="gmail_msg">
> /// known.  Upon completion, it should return an appropriate Error instance if<br class="gmail_msg">
> /// a record could not be extracted, or if one could be extracted it should<br class="gmail_msg">
> @@ -35,7 +44,7 @@ namespace msf {<br class="gmail_msg">
> template <typename T> struct VarStreamArrayExtractor {<br class="gmail_msg">
>   // Method intentionally deleted.  You must provide an explicit specialization<br class="gmail_msg">
>   // with the following method implemented.<br class="gmail_msg">
> -  Error operator()(ReadableStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
> +  Error operator()(BinaryStreamRef Stream, uint32_t &Len,<br class="gmail_msg">
>                    T &Item) const = delete;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> @@ -49,10 +58,10 @@ template <typename T> struct VarStreamAr<br class="gmail_msg">
> /// abstracting this out, we need not duplicate this memory, and we can<br class="gmail_msg">
> /// iterate over arrays in arbitrarily formatted streams.  Elements are parsed<br class="gmail_msg">
> /// lazily on iteration, so there is no upfront cost associated with building<br class="gmail_msg">
> -/// a VarStreamArray, no matter how large it may be.<br class="gmail_msg">
> +/// or copying a VarStreamArray, no matter how large it may be.<br class="gmail_msg">
> ///<br class="gmail_msg">
> /// You create a VarStreamArray by specifying a ValueType and an Extractor type.<br class="gmail_msg">
> -/// If you do not specify an Extractor type, it expects you to specialize<br class="gmail_msg">
> +/// If you do not specify an Extractor type, you are expected to specialize<br class="gmail_msg">
> /// VarStreamArrayExtractor<T> for your ValueType.<br class="gmail_msg">
> ///<br class="gmail_msg">
> /// By default an Extractor is default constructed in the class, but in some<br class="gmail_msg">
> @@ -86,8 +95,8 @@ public:<br class="gmail_msg">
>   VarStreamArray() = default;<br class="gmail_msg">
>   explicit VarStreamArray(const Extractor &E) : E(E) {}<br class="gmail_msg">
><br class="gmail_msg">
> -  explicit VarStreamArray(ReadableStreamRef Stream) : Stream(Stream) {}<br class="gmail_msg">
> -  VarStreamArray(ReadableStreamRef Stream, const Extractor &E)<br class="gmail_msg">
> +  explicit VarStreamArray(BinaryStreamRef Stream) : Stream(Stream) {}<br class="gmail_msg">
> +  VarStreamArray(BinaryStreamRef Stream, const Extractor &E)<br class="gmail_msg">
>       : Stream(Stream), E(E) {}<br class="gmail_msg">
><br class="gmail_msg">
>   VarStreamArray(const VarStreamArray<ValueType, Extractor> &Other)<br class="gmail_msg">
> @@ -101,10 +110,10 @@ public:<br class="gmail_msg">
><br class="gmail_msg">
>   const Extractor &getExtractor() const { return E; }<br class="gmail_msg">
><br class="gmail_msg">
> -  ReadableStreamRef getUnderlyingStream() const { return Stream; }<br class="gmail_msg">
> +  BinaryStreamRef getUnderlyingStream() const { return Stream; }<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
> -  ReadableStreamRef Stream;<br class="gmail_msg">
> +  BinaryStreamRef Stream;<br class="gmail_msg">
>   Extractor E;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> @@ -153,23 +162,25 @@ public:<br class="gmail_msg">
>     return ThisValue;<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  IterType &operator++() {<br class="gmail_msg">
> -    // We are done with the current record, discard it so that we are<br class="gmail_msg">
> -    // positioned at the next record.<br class="gmail_msg">
> -    IterRef = IterRef.drop_front(ThisLen);<br class="gmail_msg">
> -    if (IterRef.getLength() == 0) {<br class="gmail_msg">
> -      // There is nothing after the current record, we must make this an end<br class="gmail_msg">
> -      // iterator.<br class="gmail_msg">
> -      moveToEnd();<br class="gmail_msg">
> -    } else {<br class="gmail_msg">
> -      // There is some data after the current record.<br class="gmail_msg">
> -      auto EC = Extract(IterRef, ThisLen, ThisValue);<br class="gmail_msg">
> -      if (EC) {<br class="gmail_msg">
> -        consumeError(std::move(EC));<br class="gmail_msg">
> -        markError();<br class="gmail_msg">
> -      } else if (ThisLen == 0) {<br class="gmail_msg">
> -        // An empty record? Make this an end iterator.<br class="gmail_msg">
> +  IterType &operator+=(unsigned N) {<br class="gmail_msg">
> +    for (unsigned I = 0; I < N; ++I) {<br class="gmail_msg">
> +      // We are done with the current record, discard it so that we are<br class="gmail_msg">
> +      // positioned at the next record.<br class="gmail_msg">
> +      IterRef = IterRef.drop_front(ThisLen);<br class="gmail_msg">
> +      if (IterRef.getLength() == 0) {<br class="gmail_msg">
> +        // There is nothing after the current record, we must make this an end<br class="gmail_msg">
> +        // iterator.<br class="gmail_msg">
>         moveToEnd();<br class="gmail_msg">
> +      } else {<br class="gmail_msg">
> +        // There is some data after the current record.<br class="gmail_msg">
> +        auto EC = Extract(IterRef, ThisLen, ThisValue);<br class="gmail_msg">
> +        if (EC) {<br class="gmail_msg">
> +          consumeError(std::move(EC));<br class="gmail_msg">
> +          markError();<br class="gmail_msg">
> +        } else if (ThisLen == 0) {<br class="gmail_msg">
> +          // An empty record? Make this an end iterator.<br class="gmail_msg">
> +          moveToEnd();<br class="gmail_msg">
> +        }<br class="gmail_msg">
>       }<br class="gmail_msg">
>     }<br class="gmail_msg">
>     return *this;<br class="gmail_msg">
> @@ -188,7 +199,7 @@ private:<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
>   ValueType ThisValue;<br class="gmail_msg">
> -  ReadableStreamRef IterRef;<br class="gmail_msg">
> +  BinaryStreamRef IterRef;<br class="gmail_msg">
>   const ArrayType *Array{nullptr};<br class="gmail_msg">
>   uint32_t ThisLen{0};<br class="gmail_msg">
>   bool HasError{false};<br class="gmail_msg">
> @@ -198,12 +209,17 @@ private:<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T> class FixedStreamArrayIterator;<br class="gmail_msg">
><br class="gmail_msg">
> +/// FixedStreamArray is similar to VarStreamArray, except with each record<br class="gmail_msg">
> +/// having a fixed-length.  As with VarStreamArray, there is no upfront<br class="gmail_msg">
> +/// cost associated with building or copying a FixedStreamArray, as the<br class="gmail_msg">
> +/// memory for each element is not read from the backing stream until that<br class="gmail_msg">
> +/// element is iterated.<br class="gmail_msg">
> template <typename T> class FixedStreamArray {<br class="gmail_msg">
>   friend class FixedStreamArrayIterator<T>;<br class="gmail_msg">
><br class="gmail_msg">
> public:<br class="gmail_msg">
>   FixedStreamArray() = default;<br class="gmail_msg">
> -  FixedStreamArray(ReadableStreamRef Stream) : Stream(Stream) {<br class="gmail_msg">
> +  explicit FixedStreamArray(BinaryStreamRef Stream) : Stream(Stream) {<br class="gmail_msg">
>     assert(Stream.getLength() % sizeof(T) == 0);<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> @@ -242,10 +258,10 @@ public:<br class="gmail_msg">
>     return FixedStreamArrayIterator<T>(*this, size());<br class="gmail_msg">
>   }<br class="gmail_msg">
><br class="gmail_msg">
> -  ReadableStreamRef getUnderlyingStream() const { return Stream; }<br class="gmail_msg">
> +  BinaryStreamRef getUnderlyingStream() const { return Stream; }<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
> -  ReadableStreamRef Stream;<br class="gmail_msg">
> +  BinaryStreamRef Stream;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> template <typename T><br class="gmail_msg">
> @@ -298,7 +314,6 @@ private:<br class="gmail_msg">
>   uint32_t Index;<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> -} // namespace msf<br class="gmail_msg">
> } // namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> -#endif // LLVM_DEBUGINFO_MSF_STREAMARRAY_H<br class="gmail_msg">
> +#endif // LLVM_SUPPORT_BINARYSTREAMARRAY_H<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h?rev=296215&r1=296214&r2=296215&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h?rev=296215&r1=296214&r2=296215&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/DebugInfo/MSF/BinaryStreamReader.h Fri Feb 24 18:44:30 2017<br class="gmail_msg">
> @@ -1,4 +1,4 @@<br class="gmail_msg">
> -//===- StreamReader.h - Reads bytes and objects from a stream ---*- C++ -*-===//<br class="gmail_msg">
> +//===- BinaryStreamReader.h - Reads objects from a binary stream *- C++ -*-===//<br class="gmail_msg">
> //<br class="gmail_msg">
> //                     The LLVM Compiler Infrastructure<br class="gmail_msg">
> //<br class="gmail_msg">
> @@ -7,71 +7,166 @@<br class="gmail_msg">
> //<br class="gmail_msg">
> //===----------------------------------------------------------------------===//<br class="gmail_msg">
><br class="gmail_msg">
> -#ifndef LLVM_DEBUGINFO_MSF_STREAMREADER_H<br class="gmail_msg">
> -#define LLVM_DEBUGINFO_MSF_STREAMREADER_H<br class="gmail_msg">
> +#ifndef LLVM_SUPPORT_BINARYSTREAMREADER_H<br class="gmail_msg">
> +#define LLVM_SUPPORT_BINARYSTREAMREADER_H<br class="gmail_msg">
><br class="gmail_msg">
> #include "llvm/ADT/ArrayRef.h"<br class="gmail_msg">
> +#include "llvm/ADT/STLExtras.h"<br class="gmail_msg">
> #include "llvm/DebugInfo/MSF/BinaryStream.h"<br class="gmail_msg">
> #include "llvm/DebugInfo/MSF/BinaryStreamArray.h"<br class="gmail_msg">
> #include "llvm/DebugInfo/MSF/BinaryStreamRef.h"<br class="gmail_msg">
> -#include "llvm/DebugInfo/MSF/MSFError.h"<br class="gmail_msg">
> #include "llvm/Support/Endian.h"<br class="gmail_msg">
> #include "llvm/Support/Error.h"<br class="gmail_msg">
> +#include "llvm/Support/MathExtras.h"<br class="gmail_msg">
> #include "llvm/Support/type_traits.h"<br class="gmail_msg">
><br class="gmail_msg">
> #include <string><br class="gmail_msg">
> #include <type_traits><br class="gmail_msg">
><br class="gmail_msg">
> namespace llvm {<br class="gmail_msg">
> -namespace msf {<br class="gmail_msg">
><br class="gmail_msg">
> -class StreamReader {<br class="gmail_msg">
> +/// \brief Provides read only access to a subclass of `BinaryStream`.  Provides<br class="gmail_msg">
> +/// bounds checking and helpers for writing certain common data types such as<br class="gmail_msg">
> +/// null-terminated strings, integers in various flavors of endianness, etc.<br class="gmail_msg">
> +/// Can be subclassed to provide reading of custom datatypes, although no<br class="gmail_msg">
> +/// are overridable.<br class="gmail_msg">
> +class BinaryStreamReader {<br class="gmail_msg">
> public:<br class="gmail_msg">
> -  StreamReader(ReadableStreamRef Stream);<br class="gmail_msg">
> +  explicit BinaryStreamReader(BinaryStreamRef Stream);<br class="gmail_msg">
> +  virtual ~BinaryStreamReader() {}<br class="gmail_msg">
><br class="gmail_msg">
> +  /// Read as much as possible from the underlying string at the current offset<br class="gmail_msg">
> +  /// without invoking a copy, and set \p Buffer to the resulting data slice.<br class="gmail_msg">
> +  /// Updates the stream's offset to point after the newly read data.<br class="gmail_msg">
> +  ///<br class="gmail_msg">
> +  /// \returns a success error code if the data was successfully read, otherwise<br class="gmail_msg">
> +  /// returns an appropriate error code.<br class="gmail_msg">
>   Error readLongestContiguousChunk(ArrayRef<uint8_t> &Buffer);<br class="gmail_msg">
> +<br class="gmail_msg">
> +  /// Read \p Size bytes from the underlying stream at the current offset and<br class="gmail_msg">
> +  /// and set \p Buffer to the resulting data slice.  Whether a copy occurs<br class="gmail_msg">
> +  /// depends on the implementation of the underlying stream.  Updates the<br class="gmail_msg">
> +  /// stream's offset to point after the newly read data.<br class="gmail_msg">
> +  ///<br class="gmail_msg">
> +  /// \returns a success error code if the data was successfully read, otherwise<br class="gmail_msg">
> +  /// returns an appropriate error code.<br class="gmail_msg">
>   Error readBytes(ArrayRef<uint8_t> &Buffer, uint32_t Size);<br class="gmail_msg">
><br class="gmail_msg">
> -  template <typename T><br class="gmail_msg">
> -  Error readInteger(T &Dest,<br class="gmail_msg">
> -      </blockquote></div>