From 393b5cd1dc438872af89d334ef6e5fcc59f27d47 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sun, 13 Jan 2013 17:24:39 +1000 Subject: Added Irrlicht 1.8, but without all the Windows binaries. --- .../tools/GUIEditor/CMemoryReadWriteFile.cpp | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 libraries/irrlicht-1.8/tools/GUIEditor/CMemoryReadWriteFile.cpp (limited to 'libraries/irrlicht-1.8/tools/GUIEditor/CMemoryReadWriteFile.cpp') diff --git a/libraries/irrlicht-1.8/tools/GUIEditor/CMemoryReadWriteFile.cpp b/libraries/irrlicht-1.8/tools/GUIEditor/CMemoryReadWriteFile.cpp new file mode 100644 index 0000000..0a69587 --- /dev/null +++ b/libraries/irrlicht-1.8/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& 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; +} + -- cgit v1.1