[PATCH] D39693: Move factory methods out of their classes.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 6 12:49:03 PST 2017
ruiu created this revision.
Herald added a subscriber: hiraditya.
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.
https://reviews.llvm.org/D39693
Files:
llvm/lib/Support/FileOutputBuffer.cpp
Index: llvm/lib/Support/FileOutputBuffer.cpp
===================================================================
--- llvm/lib/Support/FileOutputBuffer.cpp
+++ llvm/lib/Support/FileOutputBuffer.cpp
@@ -38,9 +38,6 @@
std::unique_ptr<fs::mapped_file_region> Buf)
: FileOutputBuffer(Path), Buffer(std::move(Buf)), TempPath(TempPath) {}
- static ErrorOr<std::unique_ptr<OnDiskBuffer>>
- create(StringRef Path, size_t Size, unsigned Mode);
-
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer->data(); }
uint8_t *getBufferEnd() const override {
@@ -78,16 +75,6 @@
InMemoryBuffer(StringRef Path, MemoryBlock Buf, unsigned Mode)
: FileOutputBuffer(Path), Buffer(Buf), Mode(Mode) {}
- static ErrorOr<std::unique_ptr<InMemoryBuffer>>
- create(StringRef Path, size_t Size, unsigned Mode) {
- std::error_code EC;
- MemoryBlock MB = Memory::allocateMappedMemory(
- Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
- if (EC)
- return EC;
- return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
- }
-
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer.base(); }
uint8_t *getBufferEnd() const override {
@@ -111,8 +98,8 @@
unsigned Mode;
};
-ErrorOr<std::unique_ptr<OnDiskBuffer>>
-OnDiskBuffer::create(StringRef Path, size_t Size, unsigned Mode) {
+static ErrorOr<std::unique_ptr<OnDiskBuffer>>
+createOnDiskBuffer(StringRef Path, size_t Size, unsigned Mode) {
// Create new file in same directory but with random name.
SmallString<128> TempPath;
int FD;
@@ -141,6 +128,16 @@
return llvm::make_unique<OnDiskBuffer>(Path, TempPath, std::move(MappedFile));
}
+static ErrorOr<std::unique_ptr<InMemoryBuffer>>
+createInMemoryBuffer(StringRef Path, size_t Size, unsigned Mode) {
+ std::error_code EC;
+ MemoryBlock MB = Memory::allocateMappedMemory(
+ Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
+ if (EC)
+ return EC;
+ return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
+}
+
// Create an instance of FileOutputBuffer.
ErrorOr<std::unique_ptr<FileOutputBuffer>>
FileOutputBuffer::create(StringRef Path, size_t Size, unsigned Flags) {
@@ -165,8 +162,8 @@
case fs::file_type::regular_file:
case fs::file_type::file_not_found:
case fs::file_type::status_error:
- return OnDiskBuffer::create(Path, Size, Mode);
+ return createOnDiskBuffer(Path, Size, Mode);
default:
- return InMemoryBuffer::create(Path, Size, Mode);
+ return createInMemoryBuffer(Path, Size, Mode);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39693.121770.patch
Type: text/x-patch
Size: 2578 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171106/9ed51def/attachment.bin>
More information about the llvm-commits
mailing list