Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:44:34

0001 //===- SmallVectorMemoryBuffer.h --------------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file declares a wrapper class to hold the memory into which an
0010 // object will be generated.
0011 //
0012 //===----------------------------------------------------------------------===//
0013 
0014 #ifndef LLVM_SUPPORT_SMALLVECTORMEMORYBUFFER_H
0015 #define LLVM_SUPPORT_SMALLVECTORMEMORYBUFFER_H
0016 
0017 #include "llvm/ADT/SmallVector.h"
0018 #include "llvm/Support/MemoryBuffer.h"
0019 #include "llvm/Support/raw_ostream.h"
0020 
0021 namespace llvm {
0022 
0023 /// SmallVector-backed MemoryBuffer instance.
0024 ///
0025 /// This class enables efficient construction of MemoryBuffers from SmallVector
0026 /// instances. This is useful for MCJIT and Orc, where object files are streamed
0027 /// into SmallVectors, then inspected using ObjectFile (which takes a
0028 /// MemoryBuffer).
0029 class SmallVectorMemoryBuffer : public MemoryBuffer {
0030 public:
0031   /// Construct a SmallVectorMemoryBuffer from the given SmallVector r-value.
0032   SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV,
0033                           bool RequiresNullTerminator = true)
0034       : SmallVectorMemoryBuffer(std::move(SV), "<in-memory object>",
0035                                 RequiresNullTerminator) {}
0036 
0037   /// Construct a named SmallVectorMemoryBuffer from the given SmallVector
0038   /// r-value and StringRef.
0039   SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV, StringRef Name,
0040                           bool RequiresNullTerminator = true)
0041       : SV(std::move(SV)), BufferName(std::string(Name)) {
0042     if (RequiresNullTerminator) {
0043       this->SV.push_back('\0');
0044       this->SV.pop_back();
0045     }
0046     init(this->SV.begin(), this->SV.end(), false);
0047   }
0048 
0049   // Key function.
0050   ~SmallVectorMemoryBuffer() override;
0051 
0052   StringRef getBufferIdentifier() const override { return BufferName; }
0053 
0054   BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
0055 
0056 private:
0057   SmallVector<char, 0> SV;
0058   std::string BufferName;
0059 };
0060 
0061 } // namespace llvm
0062 
0063 #endif