mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-01 17:15:06 +01:00
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
// MEM2 allocator
|
|
// Made as a class so i can have 2 sections, one being dedicated to the covers
|
|
|
|
#ifndef __MEM2ALLOC_HPP
|
|
#define __MEM2ALLOC_HPP
|
|
|
|
#include <ogc/mutex.h>
|
|
|
|
class CMEM2Alloc
|
|
{
|
|
public:
|
|
void *allocate(unsigned int s);
|
|
void release(void *p);
|
|
void *reallocate(void *p, unsigned int s);
|
|
void init(unsigned int size);
|
|
void init(void *addr, void *end);
|
|
void cleanup(void);
|
|
void clear(void);
|
|
static unsigned int usableSize(void *p);
|
|
void forceEndAddress(void *newAddr) { m_endAddress = (SBlock *)newAddr; }
|
|
void *getEndAddress(void) const { return m_endAddress; }
|
|
void info(void *&address, unsigned int &size) const { address = m_baseAddress; size = (const char *)m_endAddress - (const char *)m_baseAddress; }
|
|
unsigned int FreeSize();
|
|
//
|
|
CMEM2Alloc(void) : m_baseAddress(0), m_endAddress(0), m_first(0), m_mutex(0) { }
|
|
private:
|
|
struct SBlock
|
|
{
|
|
unsigned int s;
|
|
SBlock *next;
|
|
SBlock *prev;
|
|
bool f;
|
|
} __attribute__((aligned(32)));
|
|
bool is_valid(const SBlock *block);
|
|
SBlock *m_baseAddress;
|
|
SBlock *m_endAddress;
|
|
SBlock *m_first;
|
|
mutex_t m_mutex;
|
|
private:
|
|
CMEM2Alloc(const CMEM2Alloc &);
|
|
};
|
|
|
|
#endif // !defined(__MEM2ALLOC_HPP)
|