diff options
| author | Mirrorbot <mirrorbot@cogarr.net> | 2025-12-27 17:53:06 -0600 |
|---|---|---|
| committer | Mirrorbot <mirrorbot@cogarr.net> | 2025-12-27 17:53:06 -0600 |
| commit | 71e94ee161447b84c0eaabf6567f8fa62262cd3e (patch) | |
| tree | 391064cc6173a6fe75069af2fdc1978af12f623e /tools/GUIEditor/CMemoryReadWriteFile.cpp | |
| download | irrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.tar.gz irrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.tar.bz2 irrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.zip | |
Diffstat (limited to 'tools/GUIEditor/CMemoryReadWriteFile.cpp')
| -rw-r--r-- | tools/GUIEditor/CMemoryReadWriteFile.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/GUIEditor/CMemoryReadWriteFile.cpp b/tools/GUIEditor/CMemoryReadWriteFile.cpp new file mode 100644 index 0000000..0a69587 --- /dev/null +++ b/tools/GUIEditor/CMemoryReadWriteFile.cpp @@ -0,0 +1,95 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+#include "CMemoryReadWriteFile.h"
+
+using namespace irr;
+using namespace io;
+
+CMemoryReadWriteFile::CMemoryReadWriteFile(const c8* filename)
+: Data(), FileName(filename), Pos(0)
+{
+}
+
+
+s32 CMemoryReadWriteFile::write(const void* buffer, u32 sizeToWrite)
+{
+ // no point in writing 0 bytes
+ if (sizeToWrite < 1)
+ return 0;
+
+ // expand size
+ if (Pos + sizeToWrite > Data.size())
+ Data.set_used(Pos+sizeToWrite);
+
+ // copy data
+ memcpy( (void*) &Data[Pos], buffer, (size_t) sizeToWrite);
+
+ Pos += sizeToWrite;
+
+ return sizeToWrite;
+
+}
+
+bool CMemoryReadWriteFile::seek(long finalPos, bool relativeMovement)
+{
+ if (relativeMovement)
+ {
+ if (finalPos + Pos < 0)
+ return 0;
+ else
+ Pos += finalPos;
+ }
+ else
+ {
+ Pos = finalPos;
+ }
+
+ if (Pos > (s32)Data.size())
+ Data.set_used(Pos+1);
+
+ return true;
+
+}
+
+const io::path& CMemoryReadWriteFile::getFileName() const
+{
+ return FileName;
+}
+
+long CMemoryReadWriteFile::getPos() const
+{
+ return Pos;
+}
+
+core::array<c8>& CMemoryReadWriteFile::getData()
+{
+ return Data;
+}
+
+
+long CMemoryReadWriteFile::getSize() const
+{
+ return Data.size();
+}
+
+
+s32 CMemoryReadWriteFile::read(void* buffer, u32 sizeToRead)
+{
+ // cant read past the end
+ if (Pos + sizeToRead >= Data.size())
+ sizeToRead = Data.size() - Pos;
+
+ // cant read 0 bytes
+ if (!sizeToRead)
+ return 0;
+
+ // copy data
+ memcpy( buffer, (void*) &Data[Pos], (size_t) sizeToRead);
+
+ Pos += sizeToRead;
+
+ return sizeToRead;
+}
+
|
