00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "Memory.h"
00011 #include <stdlib.h>
00012
00024
00025
00026
00027
00028
00029
00030
00039 UInt32 IsTagValid(ANetMemoryTag tag)
00040 {
00041 return (tag != 0);
00042 }
00043
00059 ANetMemoryTag NewMemoryBlock(UInt32 size, UInt32 flags)
00060 {
00061
00062 UInt32 *mem;
00063 if (size & 0xC0000000)
00064 {
00065 return (ANetMemoryTag)(0);
00066 }
00067 mem = (UInt32*)(malloc(size + sizeof(UInt32)));
00068 mem[0] = size;
00069 return (ANetMemoryTag)(mem);
00070 }
00071
00083 UInt32 DeleteMemoryBlock(ANetMemoryTag tag)
00084 {
00085 if (!tag)
00086 return 1;
00087 free((char*)(tag));
00088 return 0;
00089 }
00090
00102 UInt32 GetMemoryBlockSize(ANetMemoryTag tag)
00103 {
00104 return *(UInt32*)(tag);
00105 }
00106
00123 UInt32 ResolveMemoryTag(ANetMemoryTag tag, UInt8 **ptr)
00124 {
00125
00126 if (!tag)
00127 return 1;
00128 if (!ptr)
00129 return 2;
00130 if (*((UInt32*)(tag)) & 0xC0000000)
00131 return 1;
00132 *ptr = (UInt8*)((UInt32*)(tag) + 1);
00133 return 0;
00134 }
00135