File objects inherit from Stream.

This commit is contained in:
Alex Szpakowski
2022-04-21 19:53:27 -03:00
parent 1e85893abb
commit d5865e160c
13 changed files with 156 additions and 174 deletions
+30 -4
View File
@@ -39,13 +39,14 @@ namespace filesystem
love::Type NativeFile::type("NativeFile", &File::type);
NativeFile::NativeFile(const std::string &filename)
NativeFile::NativeFile(const std::string &filename, Mode mode)
: filename(filename)
, file(nullptr)
, mode(MODE_CLOSED)
, bufferMode(BUFFER_NONE)
, bufferSize(0)
{
open(mode);
}
NativeFile::~NativeFile()
@@ -54,10 +55,28 @@ NativeFile::~NativeFile()
close();
}
NativeFile::NativeFile(const NativeFile &other)
: filename(other.filename)
, file(nullptr)
, mode(MODE_CLOSED)
, bufferMode(other.bufferMode)
, bufferSize(other.bufferSize)
{
open(other.mode);
}
NativeFile *NativeFile::clone()
{
return new NativeFile(*this);
}
bool NativeFile::open(Mode newmode)
{
if (newmode == MODE_CLOSED)
{
close();
return true;
}
// File already open?
if (file != nullptr)
@@ -197,15 +216,22 @@ int64 NativeFile::tell()
#endif
}
bool NativeFile::seek(uint64 pos)
bool NativeFile::seek(int64 pos, SeekOrigin origin)
{
if (file == nullptr)
return false;
int forigin = SEEK_SET;
if (origin == SEEKORIGIN_CURRENT)
forigin = SEEK_CUR;
else if (origin == SEEKORIGIN_END)
forigin = SEEK_END;
// TODO
#ifdef LOVE_WINDOWS
return _fseeki64(file, (int64) pos, SEEK_SET) == 0;
return _fseeki64(file, pos, forigin) == 0;
#else
return fseeko(file, (off_t) pos, SEEK_SET) == 0;
return fseeko(file, (off_t) pos, forigin) == 0;
#endif
}