Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
86
Src/external_dependencies/openmpt-trunk/include/unrar/suballoc.hpp
vendored
Normal file
86
Src/external_dependencies/openmpt-trunk/include/unrar/suballoc.hpp
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
/****************************************************************************
|
||||
* This file is part of PPMd project *
|
||||
* Written and distributed to public domain by Dmitry Shkarin 1997, *
|
||||
* 1999-2000 *
|
||||
* Contents: interface to memory allocation routines *
|
||||
****************************************************************************/
|
||||
#if !defined(_SUBALLOC_H_)
|
||||
#define _SUBALLOC_H_
|
||||
|
||||
#if defined(__GNUC__) && defined(ALLOW_MISALIGNED)
|
||||
#define RARPPM_PACK_ATTR __attribute__ ((packed))
|
||||
#else
|
||||
#define RARPPM_PACK_ATTR
|
||||
#endif /* defined(__GNUC__) */
|
||||
|
||||
#ifdef ALLOW_MISALIGNED
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
struct RARPPM_MEM_BLK
|
||||
{
|
||||
ushort Stamp, NU;
|
||||
RARPPM_MEM_BLK* next, * prev;
|
||||
void insertAt(RARPPM_MEM_BLK* p)
|
||||
{
|
||||
next=(prev=p)->next;
|
||||
p->next=next->prev=this;
|
||||
}
|
||||
void remove()
|
||||
{
|
||||
prev->next=next;
|
||||
next->prev=prev;
|
||||
}
|
||||
} RARPPM_PACK_ATTR;
|
||||
|
||||
#ifdef ALLOW_MISALIGNED
|
||||
#ifdef _AIX
|
||||
#pragma pack(pop)
|
||||
#else
|
||||
#pragma pack()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
class SubAllocator
|
||||
{
|
||||
private:
|
||||
static const int N1=4, N2=4, N3=4, N4=(128+3-1*N1-2*N2-3*N3)/4;
|
||||
static const int N_INDEXES=N1+N2+N3+N4;
|
||||
|
||||
struct RAR_NODE
|
||||
{
|
||||
RAR_NODE* next;
|
||||
};
|
||||
|
||||
inline void InsertNode(void* p,int indx);
|
||||
inline void* RemoveNode(int indx);
|
||||
inline uint U2B(int NU);
|
||||
inline void SplitBlock(void* pv,int OldIndx,int NewIndx);
|
||||
inline void GlueFreeBlocks();
|
||||
void* AllocUnitsRare(int indx);
|
||||
inline RARPPM_MEM_BLK* MBPtr(RARPPM_MEM_BLK *BasePtr,int Items);
|
||||
|
||||
long SubAllocatorSize;
|
||||
byte Indx2Units[N_INDEXES], Units2Indx[128], GlueCount;
|
||||
byte *HeapStart,*LoUnit, *HiUnit;
|
||||
struct RAR_NODE FreeList[N_INDEXES];
|
||||
public:
|
||||
SubAllocator();
|
||||
~SubAllocator() {StopSubAllocator();}
|
||||
void Clean();
|
||||
bool StartSubAllocator(int SASize);
|
||||
void StopSubAllocator();
|
||||
void InitSubAllocator();
|
||||
inline void* AllocContext();
|
||||
inline void* AllocUnits(int NU);
|
||||
inline void* ExpandUnits(void* ptr,int OldNU);
|
||||
inline void* ShrinkUnits(void* ptr,int OldNU,int NewNU);
|
||||
inline void FreeUnits(void* ptr,int OldNU);
|
||||
long GetAllocatedMemory() {return(SubAllocatorSize);}
|
||||
|
||||
byte *pText, *UnitsStart,*HeapEnd,*FakeUnitsStart;
|
||||
};
|
||||
|
||||
|
||||
#endif /* !defined(_SUBALLOC_H_) */
|
Loading…
Add table
Add a link
Reference in a new issue