1ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//===- lib/Support/StringRefMemoryObject.cpp --------------------*- C++ -*-===//
2ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
3ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//                     The LLVM Compiler Infrastructure
4ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
5ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// This file is distributed under the University of Illinois Open Source
6ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// License. See LICENSE.TXT for details.
7ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
8ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//===----------------------------------------------------------------------===//
9ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
10ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha#include "llvm/Support/StringRefMemoryObject.h"
11ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
12ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachausing namespace llvm;
13ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
14ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachaint StringRefMemoryObject::readByte(uint64_t Addr, uint8_t *Byte) const {
15ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  if (Addr >= Base + getExtent() || Addr < Base)
16ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha    return -1;
17ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  *Byte = Bytes[Addr - Base];
18ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  return 0;
19ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
20ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
21ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachaint StringRefMemoryObject::readBytes(uint64_t Addr,
22ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha                                     uint64_t Size,
2349a6a8d8f2994249c81b7914b07015714748a55cBenjamin Kramer                                     uint8_t *Buf) const {
24ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  uint64_t Offset = Addr - Base;
2549a6a8d8f2994249c81b7914b07015714748a55cBenjamin Kramer  if (Addr >= Base + getExtent() || Offset + Size > getExtent() || Addr < Base)
2649a6a8d8f2994249c81b7914b07015714748a55cBenjamin Kramer    return -1;
27ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  memcpy(Buf, Bytes.data() + Offset, Size);
28ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  return 0;
29ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
30