diff options
Diffstat (limited to 'include/llvm/Support/StreamingMemoryObject.h')
| -rw-r--r-- | include/llvm/Support/StreamingMemoryObject.h | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/include/llvm/Support/StreamingMemoryObject.h b/include/llvm/Support/StreamingMemoryObject.h deleted file mode 100644 index 1ab85372cd20..000000000000 --- a/include/llvm/Support/StreamingMemoryObject.h +++ /dev/null @@ -1,87 +0,0 @@ -//===- StreamingMemoryObject.h - Streamable data interface -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SUPPORT_STREAMINGMEMORYOBJECT_H -#define LLVM_SUPPORT_STREAMINGMEMORYOBJECT_H - -#include "llvm/Support/Compiler.h" -#include "llvm/Support/DataStream.h" -#include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/MemoryObject.h" -#include <memory> -#include <vector> - -namespace llvm { - -/// Interface to data which is actually streamed from a DataStreamer. In -/// addition to inherited members, it has the dropLeadingBytes and -/// setKnownObjectSize methods which are not applicable to non-streamed objects. -class StreamingMemoryObject : public MemoryObject { -public: - StreamingMemoryObject(std::unique_ptr<DataStreamer> Streamer); - uint64_t getExtent() const override; - uint64_t readBytes(uint8_t *Buf, uint64_t Size, - uint64_t Address) const override; - const uint8_t *getPointer(uint64_t Address, uint64_t Size) const override; - bool isValidAddress(uint64_t address) const override; - - /// Drop s bytes from the front of the stream, pushing the positions of the - /// remaining bytes down by s. This is used to skip past the bitcode header, - /// since we don't know a priori if it's present, and we can't put bytes - /// back into the stream once we've read them. - bool dropLeadingBytes(size_t s); - - /// If the data object size is known in advance, many of the operations can - /// be made more efficient, so this method should be called before reading - /// starts (although it can be called anytime). - void setKnownObjectSize(size_t size); - - /// The number of bytes read at a time from the data streamer. - static const uint32_t kChunkSize = 4096 * 4; - -private: - mutable std::vector<unsigned char> Bytes; - std::unique_ptr<DataStreamer> Streamer; - mutable size_t BytesRead; // Bytes read from stream - size_t BytesSkipped;// Bytes skipped at start of stream (e.g. wrapper/header) - mutable size_t ObjectSize; // 0 if unknown, set if wrapper seen or EOF reached - mutable bool EOFReached; - - // Fetch enough bytes such that Pos can be read (i.e. BytesRead > - // Pos). Returns true if Pos can be read. Unlike most of the - // functions in BitcodeReader, returns true on success. Most of the - // requests will be small, but we fetch at kChunkSize bytes at a - // time to avoid making too many potentially expensive GetBytes - // calls. - bool fetchToPos(size_t Pos) const { - while (Pos >= BytesRead) { - if (EOFReached) - return false; - Bytes.resize(BytesRead + BytesSkipped + kChunkSize); - size_t bytes = Streamer->GetBytes(&Bytes[BytesRead + BytesSkipped], - kChunkSize); - BytesRead += bytes; - if (bytes == 0) { // reached EOF/ran out of bytes - if (ObjectSize == 0) - ObjectSize = BytesRead; - EOFReached = true; - } - } - return !ObjectSize || Pos < ObjectSize; - } - - StreamingMemoryObject(const StreamingMemoryObject&) = delete; - void operator=(const StreamingMemoryObject&) = delete; -}; - -MemoryObject *getNonStreamedMemoryObject( - const unsigned char *Start, const unsigned char *End); - -} -#endif // STREAMINGMEMORYOBJECT_H_ |
