blob: c0ac0b7a8ff039be5c2fa9ff67a8f74d5cf58763 [file] [log] [blame]
Zachary Turner6ba65de2016-04-29 17:22:58 +00001//===- ByteStream.cpp - Reads stream data from a byte sequence ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Zachary Turnerd5d37dc2016-05-25 20:37:03 +000010#include "llvm/DebugInfo/CodeView/ByteStream.h"
11#include "llvm/DebugInfo/CodeView/CodeViewError.h"
12#include "llvm/DebugInfo/CodeView/StreamReader.h"
Eugene Zelenko417d4c52016-05-09 23:11:38 +000013#include <cstring>
Zachary Turner6ba65de2016-04-29 17:22:58 +000014
15using namespace llvm;
Zachary Turnerd5d37dc2016-05-25 20:37:03 +000016using namespace llvm::codeview;
Zachary Turner6ba65de2016-04-29 17:22:58 +000017
Zachary Turner06c2b4b2016-05-09 17:45:21 +000018ByteStream::ByteStream() {}
Zachary Turner6ba65de2016-04-29 17:22:58 +000019
Zachary Turner0d43c1c2016-05-28 05:21:57 +000020ByteStream::ByteStream(ArrayRef<uint8_t> Data) : Data(Data) {}
Zachary Turner6ba65de2016-04-29 17:22:58 +000021
Zachary Turner8dbe3622016-05-27 01:54:44 +000022ByteStream::~ByteStream() {}
Zachary Turner6ba65de2016-04-29 17:22:58 +000023
Zachary Turner8dbe3622016-05-27 01:54:44 +000024Error ByteStream::readBytes(uint32_t Offset, uint32_t Size,
25 ArrayRef<uint8_t> &Buffer) const {
Zachary Turner0d43c1c2016-05-28 05:21:57 +000026 if (Data.size() < Size + Offset)
Zachary Turnerd5d37dc2016-05-25 20:37:03 +000027 return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
Zachary Turner8dbe3622016-05-27 01:54:44 +000028 Buffer = Data.slice(Offset, Size);
Zachary Turner819e77d2016-05-06 20:51:57 +000029 return Error::success();
Zachary Turnerf5c59652016-05-03 00:28:21 +000030}
31
Zachary Turner6ba65de2016-04-29 17:22:58 +000032uint32_t ByteStream::getLength() const { return Data.size(); }
Zachary Turner0eace0b2016-05-02 18:09:14 +000033
34StringRef ByteStream::str() const {
35 const char *CharData = reinterpret_cast<const char *>(Data.data());
36 return StringRef(CharData, Data.size());
37}