Completely remove irrAllocator

This commit is contained in:
sfan5 2022-12-23 19:56:21 +01:00
parent 07fd32da50
commit 05a00a8d91
6 changed files with 189 additions and 372 deletions

@ -9,7 +9,6 @@
#include "position2d.h"
#include "rect.h"
#include "SColor.h"
#include "irrAllocator.h"
#include <string.h>
namespace irr
@ -44,7 +43,7 @@ public:
delete[] Data;
if (DeleteMipMapsMemory)
Allocator.deallocate(MipMapsData);
delete[] MipMapsData;
}
//! Returns the color format
@ -275,13 +274,13 @@ public:
will by copied internally.
\param deleteMemory Whether the memory is deallocated upon
destruction. */
void setMipMapsData(void* data, bool ownForeignMemory, bool deleteMemory)
void setMipMapsData(void* data, bool ownForeignMemory)
{
if (data != MipMapsData)
{
if (DeleteMipMapsMemory)
{
Allocator.deallocate(MipMapsData);
delete[] MipMapsData;
DeleteMipMapsMemory = false;
}
@ -292,7 +291,7 @@ public:
{
MipMapsData = static_cast<u8*>(data);
DeleteMipMapsMemory = deleteMemory;
DeleteMipMapsMemory = false;
}
else
{
@ -311,7 +310,7 @@ public:
dataSize += getDataSizeFromFormat(Format, width, height);
} while (width != 1 || height != 1);
MipMapsData = Allocator.allocate(dataSize);
MipMapsData = new u8[dataSize];
memcpy(MipMapsData, data, dataSize);
DeleteMipMapsMemory = true;
@ -578,7 +577,6 @@ protected:
bool DeleteMemory;
bool DeleteMipMapsMemory;
core::irrAllocator<u8> Allocator;
#if defined(IRRLICHT_sRGB)
int Format_sRGB;
#endif

@ -331,7 +331,7 @@ namespace video
_IRR_DEPRECATED_ ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData)
{
if (image)
image->setMipMapsData(mipmapData, false, true);
image->setMipMapsData(mipmapData, false);
return addTexture(name, image);
}

@ -6,7 +6,6 @@
#define __S_MATERIAL_LAYER_H_INCLUDED__
#include "matrix4.h"
#include "irrAllocator.h"
namespace irr
{
@ -69,8 +68,7 @@ namespace video
{
if ( TextureMatrix )
{
MatrixAllocator.destruct(TextureMatrix);
MatrixAllocator.deallocate(TextureMatrix);
delete TextureMatrix;
}
}
@ -90,8 +88,7 @@ namespace video
*TextureMatrix = *other.TextureMatrix;
else
{
MatrixAllocator.destruct(TextureMatrix);
MatrixAllocator.deallocate(TextureMatrix);
delete TextureMatrix;
TextureMatrix = 0;
}
}
@ -99,8 +96,7 @@ namespace video
{
if (other.TextureMatrix)
{
TextureMatrix = MatrixAllocator.allocate(1);
MatrixAllocator.construct(TextureMatrix,*other.TextureMatrix);
TextureMatrix = new core::matrix4(*other.TextureMatrix);
}
else
TextureMatrix = 0;
@ -122,8 +118,7 @@ namespace video
{
if (!TextureMatrix)
{
TextureMatrix = MatrixAllocator.allocate(1);
MatrixAllocator.construct(TextureMatrix,core::IdentityMatrix);
TextureMatrix = new core::matrix4();
}
return *TextureMatrix;
}
@ -146,8 +141,7 @@ namespace video
{
if (!TextureMatrix)
{
TextureMatrix = MatrixAllocator.allocate(1);
MatrixAllocator.construct(TextureMatrix,mat);
TextureMatrix = new core::matrix4(mat);
}
else
*TextureMatrix = mat;
@ -216,7 +210,6 @@ namespace video
private:
friend class SMaterial;
irr::core::irrAllocator<irr::core::matrix4> MatrixAllocator;
//! Texture Matrix
/** Do not access this element directly as the internal

@ -1,113 +0,0 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
#ifndef __IRR_ALLOCATOR_H_INCLUDED__
#define __IRR_ALLOCATOR_H_INCLUDED__
#include "irrTypes.h"
#include <new>
// necessary for older compilers
#include <memory.h>
namespace irr
{
namespace core
{
//! Very simple allocator implementation, containers using it can be used across dll boundaries
template<typename T>
class irrAllocator
{
public:
//! Destructor
virtual ~irrAllocator() {}
//! Allocate memory for an array of objects
T* allocate(size_t cnt)
{
return (T*)internal_new(cnt* sizeof(T));
}
//! Deallocate memory for an array of objects
void deallocate(T* ptr)
{
internal_delete(ptr);
}
//! Construct an element
void construct(T* ptr, const T&e)
{
new ((void*)ptr) T(e);
}
//! Destruct an element
void destruct(T* ptr)
{
ptr->~T();
}
protected:
virtual void* internal_new(size_t cnt)
{
return operator new(cnt);
}
virtual void internal_delete(void* ptr)
{
operator delete(ptr);
}
};
//! Fast allocator, only to be used in containers inside the same memory heap.
/** Containers using it are NOT able to be used it across dll boundaries. Use this
when using in an internal class or function or when compiled into a static lib */
template<typename T>
class irrAllocatorFast
{
public:
//! Allocate memory for an array of objects
T* allocate(size_t cnt)
{
return (T*)operator new(cnt* sizeof(T));
}
//! Deallocate memory for an array of objects
void deallocate(T* ptr)
{
operator delete(ptr);
}
//! Construct an element
void construct(T* ptr, const T&e)
{
new ((void*)ptr) T(e);
}
//! Destruct an element
void destruct(T* ptr)
{
ptr->~T();
}
};
//! defines an allocation strategy (used only by irr::array so far)
enum eAllocStrategy
{
ALLOC_STRATEGY_SAFE = 0, // increase size by 1
ALLOC_STRATEGY_DOUBLE = 1, // double size when under 500 elements, beyond that increase by 1/4th size. Plus a small constant.
ALLOC_STRATEGY_SQRT = 2 // not implemented
};
} // end namespace core
} // end namespace irr
#endif

File diff suppressed because it is too large Load Diff

@ -82,7 +82,7 @@ public:
{
if ( OriginalSize == Size && OriginalColorFormat == ColorFormat )
{
Images[i]->setMipMapsData( images[i]->getMipMapsData(), false, true);
Images[i]->setMipMapsData( images[i]->getMipMapsData(), false);
}
else
{