Code-style consistency improvement:
Apply clang-format-all.sh using the _clang-format file through all the cpp/.h files. make sure not to apply it to certain serialization structures, since some parser expects the * as part of the name, instead of type. This commit contains no other changes aside from adding and applying clang-format-all.sh
This commit is contained in:
@@ -20,97 +20,99 @@ Nov.2006
|
||||
#ifndef B3_STACK_ALLOC
|
||||
#define B3_STACK_ALLOC
|
||||
|
||||
#include "b3Scalar.h" //for b3Assert
|
||||
#include "b3Scalar.h" //for b3Assert
|
||||
#include "b3AlignedAllocator.h"
|
||||
|
||||
///The b3Block class is an internal structure for the b3StackAlloc memory allocator.
|
||||
struct b3Block
|
||||
{
|
||||
b3Block* previous;
|
||||
unsigned char* address;
|
||||
b3Block* previous;
|
||||
unsigned char* address;
|
||||
};
|
||||
|
||||
///The StackAlloc class provides some fast stack-based memory allocator (LIFO last-in first-out)
|
||||
class b3StackAlloc
|
||||
{
|
||||
public:
|
||||
b3StackAlloc(unsigned int size)
|
||||
{
|
||||
ctor();
|
||||
create(size);
|
||||
}
|
||||
~b3StackAlloc() { destroy(); }
|
||||
|
||||
b3StackAlloc(unsigned int size) { ctor();create(size); }
|
||||
~b3StackAlloc() { destroy(); }
|
||||
|
||||
inline void create(unsigned int size)
|
||||
inline void create(unsigned int size)
|
||||
{
|
||||
destroy();
|
||||
data = (unsigned char*) b3AlignedAlloc(size,16);
|
||||
totalsize = size;
|
||||
data = (unsigned char*)b3AlignedAlloc(size, 16);
|
||||
totalsize = size;
|
||||
}
|
||||
inline void destroy()
|
||||
inline void destroy()
|
||||
{
|
||||
b3Assert(usedsize==0);
|
||||
b3Assert(usedsize == 0);
|
||||
//Raise(L"StackAlloc is still in use");
|
||||
|
||||
if(usedsize==0)
|
||||
if (usedsize == 0)
|
||||
{
|
||||
if(!ischild && data)
|
||||
if (!ischild && data)
|
||||
b3AlignedFree(data);
|
||||
|
||||
data = 0;
|
||||
usedsize = 0;
|
||||
data = 0;
|
||||
usedsize = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int getAvailableMemory() const
|
||||
int getAvailableMemory() const
|
||||
{
|
||||
return static_cast<int>(totalsize - usedsize);
|
||||
}
|
||||
|
||||
unsigned char* allocate(unsigned int size)
|
||||
unsigned char* allocate(unsigned int size)
|
||||
{
|
||||
const unsigned int nus(usedsize+size);
|
||||
if(nus<totalsize)
|
||||
const unsigned int nus(usedsize + size);
|
||||
if (nus < totalsize)
|
||||
{
|
||||
usedsize=nus;
|
||||
return(data+(usedsize-size));
|
||||
usedsize = nus;
|
||||
return (data + (usedsize - size));
|
||||
}
|
||||
b3Assert(0);
|
||||
//&& (L"Not enough memory"));
|
||||
|
||||
return(0);
|
||||
|
||||
return (0);
|
||||
}
|
||||
B3_FORCE_INLINE b3Block* beginBlock()
|
||||
B3_FORCE_INLINE b3Block* beginBlock()
|
||||
{
|
||||
b3Block* pb = (b3Block*)allocate(sizeof(b3Block));
|
||||
pb->previous = current;
|
||||
pb->address = data+usedsize;
|
||||
current = pb;
|
||||
return(pb);
|
||||
b3Block* pb = (b3Block*)allocate(sizeof(b3Block));
|
||||
pb->previous = current;
|
||||
pb->address = data + usedsize;
|
||||
current = pb;
|
||||
return (pb);
|
||||
}
|
||||
B3_FORCE_INLINE void endBlock(b3Block* block)
|
||||
B3_FORCE_INLINE void endBlock(b3Block* block)
|
||||
{
|
||||
b3Assert(block==current);
|
||||
b3Assert(block == current);
|
||||
//Raise(L"Unmatched blocks");
|
||||
if(block==current)
|
||||
if (block == current)
|
||||
{
|
||||
current = block->previous;
|
||||
usedsize = (unsigned int)((block->address-data)-sizeof(b3Block));
|
||||
current = block->previous;
|
||||
usedsize = (unsigned int)((block->address - data) - sizeof(b3Block));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void ctor()
|
||||
void ctor()
|
||||
{
|
||||
data = 0;
|
||||
totalsize = 0;
|
||||
usedsize = 0;
|
||||
current = 0;
|
||||
ischild = false;
|
||||
data = 0;
|
||||
totalsize = 0;
|
||||
usedsize = 0;
|
||||
current = 0;
|
||||
ischild = false;
|
||||
}
|
||||
unsigned char* data;
|
||||
unsigned int totalsize;
|
||||
unsigned int usedsize;
|
||||
b3Block* current;
|
||||
bool ischild;
|
||||
unsigned char* data;
|
||||
unsigned int totalsize;
|
||||
unsigned int usedsize;
|
||||
b3Block* current;
|
||||
bool ischild;
|
||||
};
|
||||
|
||||
#endif //B3_STACK_ALLOC
|
||||
#endif //B3_STACK_ALLOC
|
||||
|
||||
Reference in New Issue
Block a user