mirror of https://github.com/PCSX2/pcsx2.git
55 lines
928 B
C++
55 lines
928 B
C++
// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team
|
|
// SPDX-License-Identifier: GPL-3.0+
|
|
|
|
#pragma once
|
|
|
|
#include "common/AlignedMalloc.h"
|
|
|
|
template <int i>
|
|
class GSAlignedClass
|
|
{
|
|
protected:
|
|
GSAlignedClass() = default;
|
|
~GSAlignedClass() = default;
|
|
|
|
public:
|
|
void* operator new(size_t size)
|
|
{
|
|
return _aligned_malloc(size, i);
|
|
}
|
|
|
|
void operator delete(void* p)
|
|
{
|
|
_aligned_free(p);
|
|
}
|
|
|
|
void* operator new(size_t size, void* ptr)
|
|
{
|
|
return ptr;
|
|
}
|
|
|
|
void operator delete(void* ptr, void* placement_ptr)
|
|
{
|
|
// Just here to satisfy compilers
|
|
// Person who calls in-place placement new must handle error case
|
|
}
|
|
|
|
void* operator new[](size_t size)
|
|
{
|
|
return _aligned_malloc(size, i);
|
|
}
|
|
|
|
void operator delete[](void* p)
|
|
{
|
|
_aligned_free(p);
|
|
}
|
|
};
|
|
|
|
/// GSAlignedClass with a virtual destructor
|
|
template <int i>
|
|
class GSVirtualAlignedClass : public GSAlignedClass<i>
|
|
{
|
|
public:
|
|
virtual ~GSVirtualAlignedClass() {}
|
|
};
|