2021-07-18 11:16:43 +00:00
|
|
|
#pragma once
|
|
|
|
|
2021-07-29 22:07:37 +00:00
|
|
|
#if !defined(POMME_PTR_TRACKING)
|
|
|
|
#define POMME_PTR_TRACKING _DEBUG
|
|
|
|
#endif
|
|
|
|
|
2021-07-18 11:16:43 +00:00
|
|
|
namespace Pomme::Files
|
|
|
|
{
|
|
|
|
struct ResourceMetadata;
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace Pomme::Memory
|
|
|
|
{
|
2021-07-29 22:07:37 +00:00
|
|
|
struct BlockDescriptor
|
2021-07-18 11:16:43 +00:00
|
|
|
{
|
2021-07-29 22:07:37 +00:00
|
|
|
uint32_t magic;
|
|
|
|
uint32_t size;
|
|
|
|
uint32_t ptrBatch;
|
|
|
|
uint32_t ptrNumInBatch;
|
|
|
|
Ptr ptrToData;
|
2021-07-18 11:16:43 +00:00
|
|
|
const Pomme::Files::ResourceMetadata* rezMeta;
|
|
|
|
|
2021-07-29 22:07:37 +00:00
|
|
|
static BlockDescriptor* Allocate(uint32_t size);
|
2021-07-18 11:16:43 +00:00
|
|
|
|
2021-07-29 22:07:37 +00:00
|
|
|
static void Free(BlockDescriptor* block);
|
|
|
|
|
|
|
|
void CheckIsLive() const;
|
2021-07-18 11:16:43 +00:00
|
|
|
|
|
|
|
static BlockDescriptor* HandleToBlock(Handle h);
|
2021-07-29 22:07:37 +00:00
|
|
|
|
|
|
|
static BlockDescriptor* PtrToBlock(Ptr p);
|
2021-07-18 11:16:43 +00:00
|
|
|
};
|
2021-07-18 13:33:01 +00:00
|
|
|
|
|
|
|
class DisposeHandleGuard
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DisposeHandleGuard(Handle theHandle)
|
|
|
|
: h(theHandle)
|
|
|
|
{}
|
|
|
|
|
|
|
|
~DisposeHandleGuard()
|
|
|
|
{
|
|
|
|
if (h)
|
|
|
|
DisposeHandle(h);
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
Handle h;
|
|
|
|
};
|
2021-07-18 11:16:43 +00:00
|
|
|
}
|