1 //===- Buffer.h -------------------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_TOOLS_OBJCOPY_BUFFER_H
10 #define LLVM_TOOLS_OBJCOPY_BUFFER_H
12 #include "llvm/ADT/StringRef.h"
13 #include "llvm/Support/FileOutputBuffer.h"
14 #include "llvm/Support/MemoryBuffer.h"
20 // The class Buffer abstracts out the common interface of FileOutputBuffer and
21 // WritableMemoryBuffer so that the hierarchy of Writers depends on this
22 // abstract interface and doesn't depend on a particular implementation.
23 // TODO: refactor the buffer classes in LLVM to enable us to use them here
30 virtual Error
allocate(size_t Size
) = 0;
31 virtual uint8_t *getBufferStart() = 0;
32 virtual Error
commit() = 0;
34 explicit Buffer(StringRef Name
) : Name(Name
) {}
35 StringRef
getName() const { return Name
; }
38 class FileBuffer
: public Buffer
{
39 std::unique_ptr
<FileOutputBuffer
> Buf
;
40 // Indicates that allocate(0) was called, and commit() should create or
41 // truncate a file instead of using a FileOutputBuffer.
42 bool EmptyFile
= false;
45 Error
allocate(size_t Size
) override
;
46 uint8_t *getBufferStart() override
;
47 Error
commit() override
;
49 explicit FileBuffer(StringRef FileName
) : Buffer(FileName
) {}
52 class MemBuffer
: public Buffer
{
53 std::unique_ptr
<WritableMemoryBuffer
> Buf
;
56 Error
allocate(size_t Size
) override
;
57 uint8_t *getBufferStart() override
;
58 Error
commit() override
;
60 explicit MemBuffer(StringRef Name
) : Buffer(Name
) {}
62 std::unique_ptr
<WritableMemoryBuffer
> releaseMemoryBuffer();
65 } // end namespace objcopy
66 } // end namespace llvm
68 #endif // LLVM_TOOLS_OBJCOPY_BUFFER_H