mirror of
https://github.com/libAthena/athena.git
synced 2025-12-16 00:17:05 +00:00
Add TransactionalFileWriter
This commit is contained in:
@@ -16,7 +16,11 @@ FileWriter::FileWriter(const std::string& filename, bool overwrite, bool globalE
|
||||
m_bytePosition(0),
|
||||
m_globalErr(globalErr)
|
||||
{
|
||||
#if _WIN32
|
||||
m_filename = utility::utf8ToWide(m_filename);
|
||||
#else
|
||||
m_filename = filename;
|
||||
#endif
|
||||
open(overwrite);
|
||||
}
|
||||
|
||||
@@ -25,7 +29,11 @@ FileWriter::FileWriter(const std::wstring& filename, bool overwrite, bool global
|
||||
m_bytePosition(0),
|
||||
m_globalErr(globalErr)
|
||||
{
|
||||
#if _WIN32
|
||||
m_filename = filename;
|
||||
#else
|
||||
m_filename = utility::wideToUtf8(filename);
|
||||
#endif
|
||||
open(overwrite);
|
||||
}
|
||||
|
||||
@@ -121,5 +129,33 @@ void FileWriter::writeUBytes(const atUint8* data, atUint64 len)
|
||||
}
|
||||
}
|
||||
|
||||
void TransactionalFileWriter::seek(atInt64 pos, SeekOrigin origin)
|
||||
{
|
||||
switch (origin)
|
||||
{
|
||||
case SeekOrigin::Begin:
|
||||
m_position = pos;
|
||||
break;
|
||||
case SeekOrigin::Current:
|
||||
m_position += pos;
|
||||
break;
|
||||
case SeekOrigin::End:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void TransactionalFileWriter::writeUBytes(const atUint8* data, atUint64 len)
|
||||
{
|
||||
atUint64 neededSz = m_position + len;
|
||||
if (neededSz > m_deferredBuffer.size())
|
||||
{
|
||||
m_deferredBuffer.reserve(neededSz * 2);
|
||||
m_deferredBuffer.resize(neededSz);
|
||||
}
|
||||
|
||||
memmove(m_deferredBuffer.data() + m_position, data, len);
|
||||
m_position += len;
|
||||
}
|
||||
|
||||
}
|
||||
} // Athena
|
||||
|
||||
Reference in New Issue
Block a user