Skip to content

Commit f6490e0

Browse files
committed
[FileOutputBuffer] Move factory methods out of their classes.
InMemoryBuffer and OnDiskBuffer classes have both factory methods and public constructors, and that looks a bit odd. This patch makes factory methods non-member function to fix it. Differential Revision: https://reviews.llvm.org/D39693 llvm-svn: 317739
1 parent 75a3517 commit f6490e0

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

llvm/lib/Support/FileOutputBuffer.cpp

+14-17
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ class OnDiskBuffer : public FileOutputBuffer {
3838
std::unique_ptr<fs::mapped_file_region> Buf)
3939
: FileOutputBuffer(Path), Buffer(std::move(Buf)), TempPath(TempPath) {}
4040

41-
static Expected<std::unique_ptr<OnDiskBuffer>>
42-
create(StringRef Path, size_t Size, unsigned Mode);
43-
4441
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer->data(); }
4542

4643
uint8_t *getBufferEnd() const override {
@@ -78,16 +75,6 @@ class InMemoryBuffer : public FileOutputBuffer {
7875
InMemoryBuffer(StringRef Path, MemoryBlock Buf, unsigned Mode)
7976
: FileOutputBuffer(Path), Buffer(Buf), Mode(Mode) {}
8077

81-
static Expected<std::unique_ptr<InMemoryBuffer>>
82-
create(StringRef Path, size_t Size, unsigned Mode) {
83-
std::error_code EC;
84-
MemoryBlock MB = Memory::allocateMappedMemory(
85-
Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
86-
if (EC)
87-
return errorCodeToError(EC);
88-
return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
89-
}
90-
9178
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer.base(); }
9279

9380
uint8_t *getBufferEnd() const override {
@@ -111,8 +98,18 @@ class InMemoryBuffer : public FileOutputBuffer {
11198
unsigned Mode;
11299
};
113100

114-
Expected<std::unique_ptr<OnDiskBuffer>>
115-
OnDiskBuffer::create(StringRef Path, size_t Size, unsigned Mode) {
101+
static Expected<std::unique_ptr<InMemoryBuffer>>
102+
createInMemoryBuffer(StringRef Path, size_t Size, unsigned Mode) {
103+
std::error_code EC;
104+
MemoryBlock MB = Memory::allocateMappedMemory(
105+
Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
106+
if (EC)
107+
return errorCodeToError(EC);
108+
return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
109+
}
110+
111+
static Expected<std::unique_ptr<OnDiskBuffer>>
112+
createOnDiskBuffer(StringRef Path, size_t Size, unsigned Mode) {
116113
// Create new file in same directory but with random name.
117114
SmallString<128> TempPath;
118115
int FD;
@@ -165,8 +162,8 @@ FileOutputBuffer::create(StringRef Path, size_t Size, unsigned Flags) {
165162
case fs::file_type::regular_file:
166163
case fs::file_type::file_not_found:
167164
case fs::file_type::status_error:
168-
return OnDiskBuffer::create(Path, Size, Mode);
165+
return createOnDiskBuffer(Path, Size, Mode);
169166
default:
170-
return InMemoryBuffer::create(Path, Size, Mode);
167+
return createInMemoryBuffer(Path, Size, Mode);
171168
}
172169
}

0 commit comments

Comments
 (0)