LLVM  4.0.0
ObjectMemoryBuffer.h
Go to the documentation of this file.
1 //===- ObjectMemoryBuffer.h - SmallVector-backed MemoryBuffrer -*- C++ -*-===//
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 //
10 // This file declares a wrapper class to hold the memory into which an
11 // object will be generated.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_EXECUTIONENGINE_OBJECTMEMORYBUFFER_H
16 #define LLVM_EXECUTIONENGINE_OBJECTMEMORYBUFFER_H
17 
18 #include "llvm/ADT/SmallVector.h"
21 
22 namespace llvm {
23 
24 /// \brief SmallVector-backed MemoryBuffer instance.
25 ///
26 /// This class enables efficient construction of MemoryBuffers from SmallVector
27 /// instances. This is useful for MCJIT and Orc, where object files are streamed
28 /// into SmallVectors, then inspected using ObjectFile (which takes a
29 /// MemoryBuffer).
31 public:
32 
33  /// \brief Construct an ObjectMemoryBuffer from the given SmallVector r-value.
34  ///
35  /// FIXME: It'd be nice for this to be a non-templated constructor taking a
36  /// SmallVectorImpl here instead of a templated one taking a SmallVector<N>,
37  /// but SmallVector's move-construction/assignment currently only take
38  /// SmallVectors. If/when that is fixed we can simplify this constructor and
39  /// the following one.
41  : SV(std::move(SV)), BufferName("<in-memory object>") {
42  init(this->SV.begin(), this->SV.end(), false);
43  }
44 
45  /// \brief Construct a named ObjectMemoryBuffer from the given SmallVector
46  /// r-value and StringRef.
48  : SV(std::move(SV)), BufferName(Name) {
49  init(this->SV.begin(), this->SV.end(), false);
50  }
51 
52  StringRef getBufferIdentifier() const override { return BufferName; }
53 
54  BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
55 
56 private:
58  std::string BufferName;
59 };
60 
61 } // namespace llvm
62 
63 #endif
void init(const char *BufStart, const char *BufEnd, bool RequiresNullTerminator)
init - Initialize this MemoryBuffer as a reference to externally allocated memory, memory that we know is already null terminated.
StringRef getBufferIdentifier() const override
Return an identifier for this buffer, typically the filename it was read from.
ObjectMemoryBuffer(SmallVectorImpl< char > &&SV, StringRef Name)
Construct a named ObjectMemoryBuffer from the given SmallVector r-value and StringRef.
ObjectMemoryBuffer(SmallVectorImpl< char > &&SV)
Construct an ObjectMemoryBuffer from the given SmallVector r-value.
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator begin()
Definition: SmallVector.h:115
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Definition: MemoryBuffer.h:40
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator end()
Definition: SmallVector.h:119
SmallVector-backed MemoryBuffer instance.
BufferKind
The kind of memory backing used to support the MemoryBuffer.
Definition: MemoryBuffer.h:146
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:47
BufferKind getBufferKind() const override
Return information on the memory mechanism used to support the MemoryBuffer.