Retour
Version Originale

./aip/1.8aipmod/source/Irrlicht/CMemoryFile.cpp :


// Copyright (C) 2002-2011 Nikolaus Gebhardt

// This file is part of the "Irrlicht Engine".

// For conditions of distribution and use, see copyright notice in irrlicht.h


#include "CMemoryFile.h"
#include "irrString.h"

namespace irr
{
namespace io
{


CMemoryFile::CMemoryFile(void* memory, long len, const io::path& fileName, bool d)
: Buffer(memory), Len(len), Pos(0), Filename(fileName), deleteMemoryWhenDropped(d)
{
	#ifdef _DEBUG
	setDebugName("CMemoryFile");
	#endif
}


CMemoryFile::~CMemoryFile()
{
	if (deleteMemoryWhenDropped)
		delete [] (c8*)Buffer;
}


//! returns how much was read

s32 CMemoryFile::read(void* buffer, u32 sizeToRead)
{
	s32 amount = static_cast<s32>(sizeToRead);
	if (Pos + amount > Len)
		amount -= Pos + amount - Len;

	if (amount <= 0)
		return 0;

	c8* p = (c8*)Buffer;
	memcpy(buffer, p + Pos, amount);

	Pos += amount;

	return amount;
}

//! returns how much was written

s32 CMemoryFile::write(const void* buffer, u32 sizeToWrite)
{
	s32 amount = static_cast<s32>(sizeToWrite);
	if (Pos + amount > Len)
		amount -= Pos + amount - Len;

	if (amount <= 0)
		return 0;

	c8* p = (c8*)Buffer;
	memcpy(p + Pos, buffer, amount);

	Pos += amount;

	return amount;
}



//! changes position in file, returns true if successful

//! if relativeMovement==true, the pos is changed relative to current pos,

//! otherwise from begin of file

bool CMemoryFile::seek(long finalPos, bool relativeMovement)
{
	if (relativeMovement)
	{
		if (Pos + finalPos > Len)
			return false;

		Pos += finalPos;
	}
	else
	{
		if (finalPos > Len)
			return false;

		Pos = finalPos;
	}

	return true;
}


//! returns size of file

long CMemoryFile::getSize() const
{
	return Len;
}


//! returns where in the file we are.

long CMemoryFile::getPos() const
{
	return Pos;
}


//! returns name of file

const io::path& CMemoryFile::getFileName() const
{
	return Filename;
}


IReadFile* createMemoryReadFile(void* memory, long size, const io::path& fileName, bool deleteMemoryWhenDropped)
{
	CMemoryFile* file = new CMemoryFile(memory, size, fileName, deleteMemoryWhenDropped);
	return file;
}


} // end namespace io

} // end namespace irr


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
25 invités en ligne
Aucun membre connecté
RSS Feed