LLVM 22.0.0git
SmallVectorMemoryBuffer.h
Go to the documentation of this file.
1//===- SmallVectorMemoryBuffer.h --------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares a wrapper class to hold the memory into which an
10// object will be generated.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_SUPPORT_SMALLVECTORMEMORYBUFFER_H
15#define LLVM_SUPPORT_SMALLVECTORMEMORYBUFFER_H
16
21
22namespace llvm {
23
24/// 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).
31public:
32 /// Construct a SmallVectorMemoryBuffer from the given SmallVector r-value.
34 bool RequiresNullTerminator = true)
35 : SmallVectorMemoryBuffer(std::move(SV), "<in-memory object>",
36 RequiresNullTerminator) {}
37
38 /// Construct a named SmallVectorMemoryBuffer from the given SmallVector
39 /// r-value and StringRef.
41 bool RequiresNullTerminator = true)
42 : SV(std::move(SV)), BufferName(std::string(Name)) {
43 if (RequiresNullTerminator) {
44 this->SV.push_back('\0');
45 this->SV.pop_back();
46 }
47 init(this->SV.begin(), this->SV.end(), false);
48 }
49
50 // Key function.
52
53 StringRef getBufferIdentifier() const override { return BufferName; }
54
55 BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
56
57private:
59 std::string BufferName;
60};
61
62} // namespace llvm
63
64#endif
#define LLVM_ABI
Definition Compiler.h:213
This file defines the SmallVector class.
BufferKind
The kind of memory backing used to support the MemoryBuffer.
void init(const char *BufStart, const char *BufEnd, bool RequiresNullTerminator)
init - Initialize this MemoryBuffer as a reference to externally allocated memory,...
MemoryBuffer()=default
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
SmallVectorMemoryBuffer(SmallVectorImpl< char > &&SV, bool RequiresNullTerminator=true)
Construct a SmallVectorMemoryBuffer from the given SmallVector r-value.
StringRef getBufferIdentifier() const override
Return an identifier for this buffer, typically the filename it was read from.
SmallVectorMemoryBuffer(SmallVectorImpl< char > &&SV, StringRef Name, bool RequiresNullTerminator=true)
Construct a named SmallVectorMemoryBuffer from the given SmallVector r-value and StringRef.
BufferKind getBufferKind() const override
Return information on the memory mechanism used to support the MemoryBuffer.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1847
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:851