diff options
Diffstat (limited to 'include/llvm/Support/BinaryStreamRef.h')
| -rw-r--r-- | include/llvm/Support/BinaryStreamRef.h | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/include/llvm/Support/BinaryStreamRef.h b/include/llvm/Support/BinaryStreamRef.h index e3bd4bf0860e..6d5135cb258d 100644 --- a/include/llvm/Support/BinaryStreamRef.h +++ b/include/llvm/Support/BinaryStreamRef.h @@ -166,6 +166,28 @@ public:                                     ArrayRef<uint8_t> &Buffer) const;  }; +struct BinarySubstreamRef { +  uint32_t Offset;            // Offset in the parent stream +  BinaryStreamRef StreamData; // Stream Data + +  BinarySubstreamRef slice(uint32_t Off, uint32_t Size) const { +    BinaryStreamRef SubSub = StreamData.slice(Off, Size); +    return {Off + Offset, SubSub}; +  } +  BinarySubstreamRef drop_front(uint32_t N) const { +    return slice(N, size() - N); +  } +  BinarySubstreamRef keep_front(uint32_t N) const { return slice(0, N); } + +  std::pair<BinarySubstreamRef, BinarySubstreamRef> +  split(uint32_t Offset) const { +    return std::make_pair(keep_front(Offset), drop_front(Offset)); +  } + +  uint32_t size() const { return StreamData.getLength(); } +  bool empty() const { return size() == 0; } +}; +  class WritableBinaryStreamRef      : public BinaryStreamRefBase<WritableBinaryStreamRef,                                   WritableBinaryStream> {  | 
