Moving Buffer definitions out of the header file.
This commit is contained in:
parent
467bb064c7
commit
4b6e70e2c5
140
Buffer.cc
140
Buffer.cc
|
@ -47,6 +47,36 @@ anonymousName()
|
|||
}
|
||||
|
||||
|
||||
std::string
|
||||
Buffer::FileStatusToString(Buffer::FileStatus status)
|
||||
{
|
||||
switch (status) {
|
||||
case FileStatus::FileStatusOK:
|
||||
return std::string("OK");
|
||||
case FileStatus::FileStatusReadOnly:
|
||||
return std::string("read-only file");
|
||||
case FileStatus::FileStatusIOFailed:
|
||||
return std::string("I/O failure");
|
||||
case FileStatus::FileStatusVirtual:
|
||||
return std::string("virtual buffer");
|
||||
case FileStatus::FileStatusInvalidPermissions:
|
||||
return std::string("invalid permissions");
|
||||
case FileStatus::FileStatusNonExistent:
|
||||
return std::string("file does not exist");
|
||||
default:
|
||||
abort();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Buffer::StatusOK(FileStatus status)
|
||||
{
|
||||
return status == FileStatus::FileStatusOK;
|
||||
}
|
||||
|
||||
|
||||
Buffer::Buffer()
|
||||
: dirty(false), name(anonymousName()), status(statusOK)
|
||||
{
|
||||
|
@ -63,9 +93,9 @@ Buffer::Buffer(std::string fName)
|
|||
Buffer::Buffer(std::filesystem::path fPath)
|
||||
: dirty(false), path(OptString(fPath.string()))
|
||||
{
|
||||
this->name = fPath.filename().string();
|
||||
this->name = fPath.filename().string();
|
||||
this->cursor = Cursor();
|
||||
this->file = OptFile(fPath.string());
|
||||
this->file = OptFile(fPath.string());
|
||||
// N.B. I am leaving this in to show that I thought about it, but
|
||||
// it's the wrong choice. A Frame should call Refresh on a buffer
|
||||
// when it's ready to load it.
|
||||
|
@ -77,14 +107,37 @@ Buffer::Buffer(std::filesystem::path fPath)
|
|||
}
|
||||
|
||||
|
||||
|
||||
Buffer::Buffer(std::string fName, std::string fPath)
|
||||
: dirty(false), name(std::move(fName)), path(fPath)
|
||||
{
|
||||
if (this->path) {
|
||||
this->file = OptFile (File(fPath));
|
||||
this->file = OptFile(File(fPath));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::Close()
|
||||
{
|
||||
this->clearContents();
|
||||
this->dirty = false;
|
||||
this->file = std::nullopt;
|
||||
this->path = std::nullopt;
|
||||
this->name = std::string("deleted buffer (" + this->name + ")");
|
||||
}
|
||||
|
||||
|
||||
const std::string
|
||||
Buffer::Name()
|
||||
{
|
||||
return this->name;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Buffer::IsVirtual()
|
||||
{
|
||||
return !this->file.has_value();
|
||||
}
|
||||
|
||||
|
||||
|
@ -126,7 +179,7 @@ Buffer::Flush(OptString altPath)
|
|||
return Buffer::FileStatus::FileStatusIOFailed;
|
||||
}
|
||||
|
||||
for (auto line : this->contents) {
|
||||
for (auto line: this->contents) {
|
||||
std::copy(line.begin(), line.end(),
|
||||
std::ostream_iterator<uint8_t>(*realHandle, ""));
|
||||
}
|
||||
|
@ -149,7 +202,7 @@ Buffer::Refresh()
|
|||
}
|
||||
|
||||
auto realFile = this->file.value();
|
||||
auto handle = realFile.Refresh();
|
||||
auto handle = realFile.Refresh();
|
||||
if (!handle) {
|
||||
return FileStatus::FileStatusNonExistent;
|
||||
}
|
||||
|
@ -188,6 +241,13 @@ Buffer::Refresh()
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::Rename(std::string fName)
|
||||
{
|
||||
this->name = fName;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::ChangePath(std::string newPath)
|
||||
{
|
||||
|
@ -195,14 +255,10 @@ Buffer::ChangePath(std::string newPath)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::clearContents()
|
||||
Cursor
|
||||
Buffer::Where()
|
||||
{
|
||||
for (auto & line : this->contents) {
|
||||
line.clear();
|
||||
}
|
||||
|
||||
this->contents.clear();
|
||||
return this->cursor;
|
||||
}
|
||||
|
||||
|
||||
|
@ -217,12 +273,19 @@ Buffer::MarkDirty()
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
Buffer::IsDirty()
|
||||
{
|
||||
return this->dirty;
|
||||
}
|
||||
|
||||
|
||||
size_t
|
||||
Buffer::Size()
|
||||
{
|
||||
size_t size = 0;
|
||||
size_t size = 0;
|
||||
|
||||
for (const auto& line : this->contents) {
|
||||
for (const auto &line: this->contents) {
|
||||
size += line.size();
|
||||
}
|
||||
|
||||
|
@ -230,39 +293,6 @@ Buffer::Size()
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::Close()
|
||||
{
|
||||
this->clearContents();
|
||||
this->dirty = false;
|
||||
this->file = std::nullopt;
|
||||
this->path = std::nullopt;
|
||||
this->name = std::string("deleted buffer (" + this->name + ")");
|
||||
}
|
||||
|
||||
|
||||
std::string
|
||||
Buffer::FileStatusToString(Buffer::FileStatus status)
|
||||
{
|
||||
switch (status) {
|
||||
case FileStatus::FileStatusOK:
|
||||
return std::string("OK");
|
||||
case FileStatus::FileStatusReadOnly:
|
||||
return std::string("read-only file");
|
||||
case FileStatus::FileStatusIOFailed:
|
||||
return std::string("I/O failure");
|
||||
case FileStatus::FileStatusVirtual:
|
||||
return std::string("virtual buffer");
|
||||
case FileStatus::FileStatusInvalidPermissions:
|
||||
return std::string("invalid permissions");
|
||||
case FileStatus::FileStatusNonExistent:
|
||||
return std::string("file does not exist");
|
||||
default:
|
||||
abort();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Buffer::Exists()
|
||||
|
@ -275,7 +305,6 @@ Buffer::Exists()
|
|||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
Buffer::PrintBufferStatus(std::ostream &os)
|
||||
{
|
||||
|
@ -319,3 +348,16 @@ Buffer::PrintBufferStatus(std::ostream &os)
|
|||
os << "\n";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Buffer::clearContents()
|
||||
{
|
||||
for (auto &line: this->contents) {
|
||||
line.clear();
|
||||
}
|
||||
|
||||
this->contents.clear();
|
||||
}
|
||||
|
||||
|
||||
|
|
28
Buffer.h
28
Buffer.h
|
@ -70,10 +70,7 @@ public:
|
|||
};
|
||||
|
||||
static std::string FileStatusToString(FileStatus status);
|
||||
|
||||
|
||||
static bool StatusOK(FileStatus status)
|
||||
{ return status == FileStatus::FileStatusOK; }
|
||||
static bool StatusOK(FileStatus status);
|
||||
|
||||
|
||||
/// The constructor with no arguments generates a new anonymous
|
||||
|
@ -83,19 +80,17 @@ public:
|
|||
/// A single constructor generates a virtual buffer.
|
||||
Buffer(std::string fName);
|
||||
|
||||
/// Instantiate a Buffer pointing to fPath.
|
||||
Buffer(std::string fName, std::string fPath);
|
||||
|
||||
void Close();
|
||||
|
||||
/// Instantiate a buffer from a filesystem path.
|
||||
Buffer(std::filesystem::path fPath);
|
||||
|
||||
std::string Name() const
|
||||
{ return this->name; }
|
||||
/// Instantiate a Buffer pointing to fPath.
|
||||
Buffer(std::string fName, std::string fPath);
|
||||
|
||||
bool IsVirtual()
|
||||
{ return !this->file.has_value(); }
|
||||
|
||||
void Close();
|
||||
|
||||
const std::string Name();
|
||||
bool IsVirtual();
|
||||
|
||||
Buffer::FileStatus Flush(OptString altPath);
|
||||
|
||||
|
@ -108,14 +103,13 @@ public:
|
|||
/// \return A FileStatus indicating whether the read was successful.
|
||||
Buffer::FileStatus Refresh();
|
||||
|
||||
void Rename(std::string fName);
|
||||
void ChangePath(std::string newPath);
|
||||
|
||||
Cursor Where()
|
||||
{ return this->cursor; }
|
||||
Cursor Where();
|
||||
|
||||
void MarkDirty();
|
||||
bool IsDirty()
|
||||
{ return this->dirty; }
|
||||
bool IsDirty();
|
||||
|
||||
size_t Size();
|
||||
|
||||
|
|
Loading…
Reference in New Issue