0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78 #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 6d .h"..#include "m
0020: 65 6d 6f 72 79 2e 68 22 0d 0a 75 73 69 6e 67 20 emory.h"..using
0030: 6e 61 6d 65 73 70 61 63 65 20 6b 69 3b 0d 0a 0d namespace ki;...
0040: 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d .....//=========
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0090: 0d 0a 0d 0a 23 69 66 64 65 66 20 53 55 50 45 52 ....#ifdef SUPER
00a0: 54 49 4e 59 0d 0a 0d 0a 09 73 74 61 74 69 63 20 TINY.....static
00b0: 48 41 4e 44 4c 45 20 67 5f 68 65 61 70 3b 0d 0a HANDLE g_heap;..
00c0: 0d 0a 09 23 69 66 6e 64 65 66 20 5f 44 45 42 55 ...#ifndef _DEBU
00d0: 47 0d 0a 0d 0a 09 09 76 6f 69 64 2a 20 5f 5f 63 G......void* __c
00e0: 64 65 63 6c 20 6f 70 65 72 61 74 6f 72 20 6e 65 decl operator ne
00f0: 77 28 20 73 69 7a 65 5f 74 20 73 69 7a 20 29 0d w( size_t siz ).
0100: 0a 09 09 7b 0d 0a 09 09 09 72 65 74 75 72 6e 20 ...{.....return
0110: 3a 3a 48 65 61 70 41 6c 6c 6f 63 28 20 67 5f 68 ::HeapAlloc( g_h
0120: 65 61 70 2c 20 48 45 41 50 5f 47 45 4e 45 52 41 eap, HEAP_GENERA
0130: 54 45 5f 45 58 43 45 50 54 49 4f 4e 53 2c 20 73 TE_EXCEPTIONS, s
0140: 69 7a 20 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 iz );....}......
0150: 76 6f 69 64 20 5f 5f 63 64 65 63 6c 20 6f 70 65 void __cdecl ope
0160: 72 61 74 6f 72 20 64 65 6c 65 74 65 28 20 76 6f rator delete( vo
0170: 69 64 2a 20 70 74 72 20 29 0d 0a 09 09 7b 0d 0a id* ptr )....{..
0180: 09 09 09 3a 3a 48 65 61 70 46 72 65 65 28 20 67 ...::HeapFree( g
0190: 5f 68 65 61 70 2c 20 30 2c 20 70 74 72 20 29 3b _heap, 0, ptr );
01a0: 0d 0a 09 09 7d 0d 0a 0d 0a 09 23 65 6c 73 65 0d ....}.....#else.
01b0: 0a 0d 0a 09 09 2f 2f 20 83 66 83 6f 83 62 83 4f .....// .f.o.b.O
01c0: 97 70 82 c9 89 f1 90 94 8c 76 91 aa 94 c5 28 5e .p.......v....(^
01d0: 5e 3b 0d 0a 09 09 73 74 61 74 69 63 20 69 6e 74 ^;....static int
01e0: 20 61 6c 6c 6f 63 43 6f 75 6e 74 65 72 20 3d 20 allocCounter =
01f0: 30 3b 0d 0a 09 09 76 6f 69 64 2a 20 5f 5f 63 64 0;....void* __cd
0200: 65 63 6c 20 6f 70 65 72 61 74 6f 72 20 6e 65 77 ecl operator new
0210: 28 20 73 69 7a 65 5f 74 20 73 69 7a 20 29 0d 0a ( size_t siz )..
0220: 09 09 7b 0d 0a 09 09 09 2b 2b 61 6c 6c 6f 63 43 ..{.....++allocC
0230: 6f 75 6e 74 65 72 3b 0d 0a 09 09 09 72 65 74 75 ounter;.....retu
0240: 72 6e 20 3a 3a 48 65 61 70 41 6c 6c 6f 63 28 20 rn ::HeapAlloc(
0250: 67 5f 68 65 61 70 2c 20 48 45 41 50 5f 47 45 4e g_heap, HEAP_GEN
0260: 45 52 41 54 45 5f 45 58 43 45 50 54 49 4f 4e 53 ERATE_EXCEPTIONS
0270: 2c 20 73 69 7a 20 29 3b 0d 0a 09 09 7d 0d 0a 09 , siz );....}...
0280: 09 76 6f 69 64 20 5f 5f 63 64 65 63 6c 20 6f 70 .void __cdecl op
0290: 65 72 61 74 6f 72 20 64 65 6c 65 74 65 28 20 76 erator delete( v
02a0: 6f 69 64 2a 20 70 74 72 20 29 0d 0a 09 09 7b 0d oid* ptr )....{.
02b0: 0a 09 09 09 3a 3a 48 65 61 70 46 72 65 65 28 20 ....::HeapFree(
02c0: 67 5f 68 65 61 70 2c 20 30 2c 20 70 74 72 20 29 g_heap, 0, ptr )
02d0: 3b 0d 0a 09 09 09 69 66 28 20 70 74 72 20 21 3d ;.....if( ptr !=
02e0: 20 4e 55 4c 4c 20 29 0d 0a 09 09 09 09 2d 2d 61 NULL )......--a
02f0: 6c 6c 6f 63 43 6f 75 6e 74 65 72 3b 0d 0a 09 09 llocCounter;....
0300: 7d 0d 0a 0d 0a 09 23 65 6e 64 69 66 0d 0a 0d 0a }.....#endif....
0310: 09 65 78 74 65 72 6e 20 22 43 22 0d 0a 09 76 6f .extern "C"...vo
0320: 69 64 2a 20 5f 5f 63 64 65 63 6c 20 6d 65 6d 73 id* __cdecl mems
0330: 65 74 28 20 76 6f 69 64 2a 20 62 75 66 2c 20 69 et( void* buf, i
0340: 6e 74 20 63 68 2c 20 73 69 7a 65 5f 74 20 6e 20 nt ch, size_t n
0350: 29 0d 0a 09 7b 0d 0a 09 09 42 59 54 45 20 76 20 )...{....BYTE v
0360: 3d 20 42 59 54 45 28 63 68 26 30 78 66 66 29 3b = BYTE(ch&0xff);
0370: 0d 0a 09 09 42 59 54 45 2a 20 70 74 72 20 3d 20 ....BYTE* ptr =
0380: 28 42 59 54 45 2a 29 62 75 66 3b 0d 0a 09 09 44 (BYTE*)buf;....D
0390: 57 4f 52 44 20 76 76 76 76 20 3d 20 28 76 3c 3c WORD vvvv = (v<<
03a0: 32 34 29 20 7c 20 28 76 3c 3c 31 36 29 20 7c 20 24) | (v<<16) |
03b0: 28 76 3c 3c 38 29 20 7c 20 76 3b 0d 0a 09 09 66 (v<<8) | v;....f
03c0: 6f 72 28 3b 6e 3e 33 3b 6e 2d 3d 34 2c 70 74 72 or(;n>3;n-=4,ptr
03d0: 2b 3d 34 29 20 2a 28 44 57 4f 52 44 2a 29 70 74 +=4) *(DWORD*)pt
03e0: 72 20 3d 20 76 76 76 76 3b 0d 0a 09 09 66 6f 72 r = vvvv;....for
03f0: 28 3b 6e 3b 2d 2d 6e 2c 2b 2b 70 74 72 29 20 2a (;n;--n,++ptr) *
0400: 70 74 72 20 3d 20 76 3b 0d 0a 09 09 72 65 74 75 ptr = v;....retu
0410: 72 6e 20 62 75 66 3b 0d 0a 09 7d 0d 0a 0d 0a 09 rn buf;...}.....
0420: 76 6f 69 64 2a 20 5f 5f 63 64 65 63 6c 20 6d 65 void* __cdecl me
0430: 6d 6d 6f 76 65 28 20 76 6f 69 64 2a 20 64 73 74 mmove( void* dst
0440: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 20 73 72 , const void* sr
0450: 63 2c 20 73 69 7a 65 5f 74 20 63 6e 74 20 29 0d c, size_t cnt ).
0460: 0a 09 7b 0d 0a 09 09 5f 5f 61 73 6d 20 7b 0d 0a ..{....__asm {..
0470: 09 09 09 6d 6f 76 20 20 65 73 69 2c 20 5b 73 72 ...mov esi, [sr
0480: 63 5d 20 20 20 20 3b 55 20 20 65 73 69 20 3d 20 c] ;U esi =
0490: 63 6f 6e 73 74 20 76 6f 69 64 2a 20 73 72 63 0d const void* src.
04a0: 0a 09 09 09 6d 6f 76 20 20 65 64 78 2c 20 5b 63 ....mov edx, [c
04b0: 6e 74 5d 20 20 20 20 3b 56 20 20 65 64 78 20 3d nt] ;V edx =
04c0: 20 20 20 20 20 20 20 76 6f 69 64 2a 20 63 6e 74 void* cnt
04d0: 0d 0a 09 09 09 6d 6f 76 20 20 65 64 69 2c 20 5b .....mov edi, [
04e0: 64 73 74 5d 20 20 20 20 3b 55 20 20 65 64 69 20 dst] ;U edi
04f0: 3d 20 20 20 20 20 20 20 75 6c 6f 6e 67 20 64 73 = ulong ds
0500: 74 0d 0a 09 09 09 6d 6f 76 20 20 65 62 78 2c 20 t.....mov ebx,
0510: 65 64 78 20 20 20 20 20 20 3b 56 0d 0a 09 09 09 edx ;V.....
0520: 6d 6f 76 20 20 65 61 78 2c 20 30 33 68 20 20 20 mov eax, 03h
0530: 20 20 20 3b 55 20 20 65 61 78 20 3d 20 63 6f 6e ;U eax = con
0540: 73 74 20 75 6c 6f 6e 67 20 20 33 20 28 66 6f 72 st ulong 3 (for
0550: 20 6d 61 73 6b 69 6e 67 29 0d 0a 09 09 09 61 64 masking).....ad
0560: 64 20 20 65 62 78 2c 20 65 73 69 20 20 20 20 20 d ebx, esi
0570: 20 3b 56 20 20 65 62 78 20 3d 20 63 6f 6e 73 74 ;V ebx = const
0580: 20 76 6f 69 64 2a 20 73 72 63 2b 63 6e 74 0d 0a void* src+cnt..
0590: 0d 0a 09 09 09 63 6d 70 20 20 65 64 69 2c 20 65 .....cmp edi, e
05a0: 73 69 20 20 20 20 20 20 3b 0d 0a 09 09 09 6a 62 si ;.....jb
05b0: 65 20 20 43 6f 70 79 55 70 20 20 20 20 20 20 20 e CopyUp
05c0: 20 3b 0d 0a 09 09 09 63 6d 70 20 20 65 64 69 2c ;.....cmp edi,
05d0: 20 65 62 78 20 20 20 20 20 20 3b 20 20 20 69 66 ebx ; if
05e0: 28 20 73 72 63 20 3c 20 64 73 74 20 3c 20 73 72 ( src < dst < sr
05f0: 63 2b 63 6e 74 20 29 0d 0a 09 09 09 6a 62 20 20 c+cnt ).....jb
0600: 20 43 6f 70 79 44 6f 77 6e 20 20 20 20 20 20 3b CopyDown ;
0610: 20 20 20 20 20 64 6f 77 6e 77 61 72 64 20 63 6f downward co
0620: 70 79 0d 0a 0d 0a 09 09 43 6f 70 79 55 70 3a 0d py......CopyUp:.
0630: 0a 09 09 09 63 6d 70 20 20 65 64 78 2c 20 65 61 ....cmp edx, ea
0640: 78 20 20 20 20 20 20 3b 20 20 20 69 66 28 20 63 x ; if( c
0650: 6e 74 3c 3d 33 20 29 0d 0a 09 09 09 6a 62 65 20 nt<=3 ).....jbe
0660: 20 4d 69 6e 69 43 6f 70 79 20 20 20 20 20 20 3b MiniCopy ;
0670: 20 20 20 20 20 62 79 74 65 20 62 79 20 62 79 74 byte by byt
0680: 65 20 63 6f 70 79 0d 0a 0d 0a 09 09 09 6d 6f 76 e copy.......mov
0690: 20 20 65 62 78 2c 20 65 64 69 20 20 20 20 20 20 ebx, edi
06a0: 3b 55 0d 0a 09 09 09 6d 6f 76 20 20 65 63 78 2c ;U.....mov ecx,
06b0: 20 65 61 78 20 20 20 20 20 20 3b 56 0d 0a 09 09 eax ;V....
06c0: 09 61 6e 64 20 20 65 62 78 2c 20 65 61 78 20 20 .and ebx, eax
06d0: 20 20 20 20 3b 55 20 20 65 62 78 20 3d 20 28 64 ;U ebx = (d
06e0: 73 74 26 33 29 0d 0a 09 09 09 69 6e 63 20 20 65 st&3).....inc e
06f0: 63 78 20 20 20 20 20 20 20 20 20 20 20 3b 56 0d cx ;V.
0700: 0a 09 09 09 73 75 62 20 20 65 63 78 2c 20 65 62 ....sub ecx, eb
0710: 78 20 20 20 20 20 20 3b 20 20 20 65 63 78 20 3d x ; ecx =
0720: 20 28 34 2d 28 64 73 74 26 33 29 29 0d 0a 09 09 (4-(dst&3))....
0730: 09 61 6e 64 20 20 65 63 78 2c 20 65 61 78 20 20 .and ecx, eax
0740: 20 20 20 20 3b 20 20 20 65 63 78 20 3d 20 7b 64 ; ecx = {d
0750: 73 74 25 34 20 30 2d 3e 30 20 31 2d 3e 33 20 32 st%4 0->0 1->3 2
0760: 2d 3e 32 20 33 2d 3e 31 7d 0d 0a 09 09 09 73 75 ->2 3->1}.....su
0770: 62 20 20 65 64 78 2c 20 65 63 78 20 20 20 20 20 b edx, ecx
0780: 20 3b 0d 0a 09 09 09 72 65 70 20 20 6d 6f 76 73 ;.....rep movs
0790: 62 20 20 20 20 20 20 20 20 20 3b 4e 20 20 42 59 b ;N BY
07a0: 54 45 20 4d 4f 56 45 20 28 61 6c 69 67 6e 20 64 TE MOVE (align d
07b0: 73 74 29 0d 0a 0d 0a 09 09 09 6d 6f 76 20 20 65 st).......mov e
07c0: 63 78 2c 20 65 64 78 20 20 20 20 20 20 3b 0d 0a cx, edx ;..
07d0: 09 09 09 73 68 72 20 20 65 63 78 2c 20 32 20 20 ...shr ecx, 2
07e0: 20 20 20 20 20 20 3b 20 20 20 65 63 78 20 3d 20 ; ecx =
07f0: 5b 72 65 73 74 20 62 79 74 65 73 5d 2f 34 0d 0a [rest bytes]/4..
0800: 09 09 09 61 6e 64 20 20 65 64 78 2c 20 65 61 78 ...and edx, eax
0810: 20 20 20 20 20 20 3b 20 20 20 65 64 78 20 3d 20 ; edx =
0820: 5b 72 65 73 74 20 62 79 74 65 73 5d 25 34 0d 0a [rest bytes]%4..
0830: 09 09 09 72 65 70 20 20 6d 6f 76 73 64 20 20 20 ...rep movsd
0840: 20 20 20 20 20 20 3b 4e 20 20 44 57 4f 52 44 20 ;N DWORD
0850: 4d 4f 56 45 0d 0a 09 09 09 6a 6d 70 20 20 4d 69 MOVE.....jmp Mi
0860: 6e 69 43 6f 70 79 20 20 20 20 20 20 3b 0d 0a 0d niCopy ;...
0870: 0a 09 09 43 6f 70 79 44 6f 77 6e 3a 0d 0a 09 09 ...CopyDown:....
0880: 09 73 74 64 20 20 20 20 20 20 20 20 20 20 20 20 .std
0890: 20 20 20 20 20 20 3b 0d 0a 09 09 09 6c 65 61 20 ;.....lea
08a0: 20 65 73 69 2c 5b 65 73 69 2b 65 64 78 2d 31 5d esi,[esi+edx-1]
08b0: 20 3b 0d 0a 09 09 09 6c 65 61 20 20 65 64 69 2c ;.....lea edi,
08c0: 5b 65 64 69 2b 65 64 78 2d 31 5d 20 3b 0d 0a 0d [edi+edx-1] ;...
08d0: 0a 09 09 09 63 6d 70 20 20 65 64 78 2c 20 34 20 ....cmp edx, 4
08e0: 20 20 20 20 20 20 20 3b 20 20 20 69 66 28 20 63 ; if( c
08f0: 6e 74 3c 3d 34 20 29 0d 0a 09 09 09 6a 62 65 20 nt<=4 ).....jbe
0900: 20 4d 69 6e 69 43 6f 70 79 20 20 20 20 20 20 3b MiniCopy ;
0910: 20 20 20 20 20 62 79 74 65 20 62 79 20 62 79 74 byte by byt
0920: 65 20 63 6f 70 79 0d 0a 0d 0a 09 09 09 6d 6f 76 e copy.......mov
0930: 20 20 65 63 78 2c 20 65 64 69 20 20 20 20 20 20 ecx, edi
0940: 3b 0d 0a 09 09 09 61 6e 64 20 20 65 63 78 2c 20 ;.....and ecx,
0950: 65 61 78 20 20 20 20 20 20 3b 0d 0a 09 09 09 69 eax ;.....i
0960: 6e 63 20 20 65 63 78 20 20 20 20 20 20 20 20 20 nc ecx
0970: 20 20 3b 20 20 20 65 63 78 20 3d 20 7b 64 73 74 ; ecx = {dst
0980: 25 34 20 30 2d 3e 31 20 31 2d 3e 32 20 32 2d 3e %4 0->1 1->2 2->
0990: 33 20 33 2d 3e 34 7d 0d 0a 09 09 09 73 75 62 20 3 3->4}.....sub
09a0: 20 65 64 78 2c 20 65 63 78 20 20 20 20 20 20 3b edx, ecx ;
09b0: 0d 0a 09 09 09 72 65 70 20 20 6d 6f 76 73 62 20 .....rep movsb
09c0: 20 20 20 20 20 20 20 20 3b 4e 20 20 42 59 54 45 ;N BYTE
09d0: 20 4d 4f 56 45 20 28 61 6c 69 67 6e 20 64 73 74 MOVE (align dst
09e0: 20 40 20 64 77 6f 72 64 29 0d 0a 0d 0a 09 09 09 @ dword).......
09f0: 73 75 62 20 20 65 64 69 2c 20 65 61 78 20 20 20 sub edi, eax
0a00: 20 20 20 3b 55 0d 0a 09 09 09 6d 6f 76 20 20 65 ;U.....mov e
0a10: 63 78 2c 20 65 64 78 20 20 20 20 20 20 3b 56 0d cx, edx ;V.
0a20: 0a 09 09 09 73 75 62 20 20 65 73 69 2c 20 65 61 ....sub esi, ea
0a30: 78 20 20 20 20 20 20 3b 55 0d 0a 09 09 09 73 68 x ;U.....sh
0a40: 72 20 20 65 63 78 2c 20 32 20 20 20 20 20 20 20 r ecx, 2
0a50: 20 3b 56 20 20 65 63 78 20 3d 20 5b 72 65 73 74 ;V ecx = [rest
0a60: 20 62 79 74 65 73 5d 2f 34 0d 0a 09 09 09 61 6e bytes]/4.....an
0a70: 64 20 20 65 64 78 2c 20 65 61 78 20 20 20 20 20 d edx, eax
0a80: 20 3b 20 20 20 65 64 78 20 3d 20 5b 72 65 73 74 ; edx = [rest
0a90: 20 62 79 74 65 73 5d 25 34 0d 0a 09 09 09 72 65 bytes]%4.....re
0aa0: 70 20 20 6d 6f 76 73 64 20 20 20 20 20 20 20 20 p movsd
0ab0: 20 3b 4e 20 20 44 57 4f 52 44 20 4d 4f 56 45 0d ;N DWORD MOVE.
0ac0: 0a 09 09 09 61 64 64 20 20 65 64 69 2c 20 65 61 ....add edi, ea
0ad0: 78 20 20 20 20 20 20 3b 55 0d 0a 09 09 09 61 64 x ;U.....ad
0ae0: 64 20 20 65 73 69 2c 20 65 61 78 20 20 20 20 20 d esi, eax
0af0: 20 3b 56 0d 0a 0d 0a 09 09 4d 69 6e 69 43 6f 70 ;V......MiniCop
0b00: 79 3a 0d 0a 09 09 09 6d 6f 76 20 20 65 63 78 2c y:.....mov ecx,
0b10: 20 65 64 78 20 20 20 20 20 20 3b 0d 0a 09 09 09 edx ;.....
0b20: 72 65 70 20 20 6d 6f 76 73 62 20 20 20 20 20 20 rep movsb
0b30: 20 20 20 3b 4e 20 20 42 59 54 45 20 4d 4f 56 45 ;N BYTE MOVE
0b40: 0d 0a 0d 0a 09 09 09 63 6c 64 20 20 20 20 20 20 .......cld
0b50: 20 20 20 20 20 20 20 20 20 20 3b 55 0d 0a 09 09 ;U....
0b60: 09 6d 6f 76 20 20 65 61 78 2c 20 5b 64 73 74 5d .mov eax, [dst]
0b70: 20 20 20 20 3b 56 20 20 72 65 74 75 72 6e 20 64 ;V return d
0b80: 73 74 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 75 72 st....}....retur
0b90: 6e 20 64 73 74 3b 0d 0a 09 7d 0d 0a 0d 0a 23 65 n dst;...}....#e
0ba0: 6e 64 69 66 0d 0a 0d 0a 0d 0a 0d 0a 23 69 66 64 ndif........#ifd
0bb0: 65 66 20 55 53 45 5f 4f 52 49 47 49 4e 41 4c 5f ef USE_ORIGINAL_
0bc0: 4d 45 4d 4d 41 4e 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d MEMMAN..//======
0bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c10: 3d 3d 3d 0d 0a 2f 2f 09 8c f8 97 a6 93 49 82 c8 ===..//......I..
0c20: 83 81 83 82 83 8a 8a c7 97 9d 82 f0 96 da 8e 77 ...............w
0c30: 82 b7 83 41 83 8d 83 50 81 5b 83 5e 0d 0a 2f 2f ...A...P.[.^..//
0c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 2f 2f 0d =========....//.
0c90: 0a 2f 2f 20 83 81 83 82 83 8a 83 75 83 8d 83 62 .// .......u...b
0ca0: 83 4e 0d 0a 2f 2f 20 81 75 73 69 7a 83 6f 83 43 .N..// .usiz.o.C
0cb0: 83 67 20 2a 20 6e 75 6d 8c c2 81 76 95 aa 82 cc .g * num...v....
0cc0: 97 cc 88 e6 82 f0 88 ea 8a 87 8a 6d 95 db 82 b7 ...........m....
0cd0: 82 e9 82 cc 82 aa 8e 64 8e 96 0d 0a 2f 2f 0d 0a .......d....//..
0ce0: 2f 2f 20 8b f3 82 ab 83 75 83 8d 83 62 83 4e 82 // .....u...b.N.
0cf0: c9 82 cd 81 41 90 e6 93 aa 83 6f 83 43 83 67 82 ....A.....o.C.g.
0d00: c9 20 5b 8e 9f 82 cc 8b f3 82 ab 83 75 83 8d 83 . [.........u...
0d10: 62 83 4e 82 cc 69 6e 64 65 78 5d 20 82 f0 8a 69 b.N..index] ...i
0d20: 94 5b 81 42 0d 0a 2f 2f 20 82 b1 82 ea 82 f0 97 .[.B..// .......
0d30: 70 82 a2 82 c4 81 41 90 e6 93 aa 82 d6 82 cc 8f p.....A.........
0d40: 6f 82 b5 93 fc 82 ea 82 cc 82 dd 82 aa 89 c2 94 o...............
0d50: 5c 82 c8 92 50 95 fb 8c fc 83 8a 83 58 83 67 82 \...P.......X.g.
0d60: c6 82 b5 82 c4 88 b5 82 a4 81 42 0d 0a 2f 2f 0d ..........B..//.
0d70: 0a 0d 0a 73 74 72 75 63 74 20 6b 69 3a 3a 4d 65 ...struct ki::Me
0d80: 6d 42 6c 6f 63 6b 0d 0a 7b 0d 0a 70 75 62 6c 69 mBlock..{..publi
0d90: 63 3a 0d 0a 09 76 6f 69 64 20 20 43 6f 6e 73 74 c:...void Const
0da0: 72 75 63 74 28 20 62 79 74 65 20 73 69 7a 2c 20 ruct( byte siz,
0db0: 62 79 74 65 20 6e 75 6d 20 29 3b 0d 0a 09 76 6f byte num );...vo
0dc0: 69 64 20 20 44 65 73 74 72 75 63 74 28 29 3b 0d id Destruct();.
0dd0: 0a 09 76 6f 69 64 2a 20 41 6c 6c 6f 63 28 20 62 ..void* Alloc( b
0de0: 79 74 65 20 73 69 7a 20 29 3b 0d 0a 09 76 6f 69 yte siz );...voi
0df0: 64 20 20 44 65 41 6c 6c 6f 63 28 20 76 6f 69 64 d DeAlloc( void
0e00: 2a 20 70 74 72 2c 20 62 79 74 65 20 73 69 7a 20 * ptr, byte siz
0e10: 29 3b 0d 0a 09 62 6f 6f 6c 20 20 69 73 41 76 61 );...bool isAva
0e20: 69 6c 28 29 3b 0d 0a 09 62 6f 6f 6c 20 20 69 73 il();...bool is
0e30: 45 6d 70 74 79 28 20 62 79 74 65 20 6e 75 6d 20 Empty( byte num
0e40: 29 3b 0d 0a 09 62 6f 6f 6c 20 20 68 61 73 54 68 );...bool hasTh
0e50: 69 73 50 74 72 28 20 76 6f 69 64 2a 20 70 74 72 isPtr( void* ptr
0e60: 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 20 29 3b 0d , size_t len );.
0e70: 0a 70 72 69 76 61 74 65 3a 0d 0a 09 62 79 74 65 .private:...byte
0e80: 2a 20 62 75 66 5f 3b 0d 0a 09 62 79 74 65 20 20 * buf_;...byte
0e90: 66 69 72 73 74 5f 2c 20 61 76 61 69 6c 5f 3b 0d first_, avail_;.
0ea0: 0a 7d 3b 0d 0a 0d 0a 76 6f 69 64 20 4d 65 6d 42 .};....void MemB
0eb0: 6c 6f 63 6b 3a 3a 43 6f 6e 73 74 72 75 63 74 28 lock::Construct(
0ec0: 20 62 79 74 65 20 73 69 7a 2c 20 62 79 74 65 20 byte siz, byte
0ed0: 6e 75 6d 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 8a 6d num )..{...// .m
0ee0: 95 db 0d 0a 09 62 75 66 5f 20 20 20 3d 20 3a 3a .....buf_ = ::
0ef0: 6e 65 77 20 62 79 74 65 5b 73 69 7a 2a 6e 75 6d new byte[siz*num
0f00: 5d 3b 0d 0a 09 66 69 72 73 74 5f 20 3d 20 30 3b ];...first_ = 0;
0f10: 0d 0a 09 61 76 61 69 6c 5f 20 3d 20 6e 75 6d 3b ...avail_ = num;
0f20: 0d 0a 0d 0a 09 2f 2f 20 98 41 8c 8b 83 8a 83 58 .....// .A.....X
0f30: 83 67 8f 89 8a fa 89 bb 0d 0a 09 66 6f 72 28 20 .g.........for(
0f40: 62 79 74 65 20 69 3d 30 2c 2a 70 3d 62 75 66 5f byte i=0,*p=buf_
0f50: 3b 20 69 3c 6e 75 6d 3b 20 70 2b 3d 73 69 7a 20 ; i<num; p+=siz
0f60: 29 0d 0a 09 09 2a 70 20 3d 20 2b 2b 69 3b 0d 0a )....*p = ++i;..
0f70: 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 76 6f 69 64 }....inline void
0f80: 20 4d 65 6d 42 6c 6f 63 6b 3a 3a 44 65 73 74 72 MemBlock::Destr
0f90: 75 63 74 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 89 f0 uct()..{...// ..
0fa0: 95 fa 0d 0a 09 3a 3a 64 65 6c 65 74 65 20 5b 5d .....::delete []
0fb0: 20 62 75 66 5f 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 buf_;..}....voi
0fc0: 64 2a 20 4d 65 6d 42 6c 6f 63 6b 3a 3a 41 6c 6c d* MemBlock::All
0fd0: 6f 63 28 20 62 79 74 65 20 73 69 7a 20 29 0d 0a oc( byte siz )..
0fe0: 7b 0d 0a 09 2f 2f 20 83 81 83 82 83 8a 90 d8 82 {...// .........
0ff0: e8 8f 6f 82 b5 0d 0a 09 2f 2f 20 20 20 28 20 61 ..o.....// ( a
1000: 76 61 69 6c 3d 3d 30 20 93 99 82 cc 83 60 83 46 vail==0 .....`.F
1010: 83 62 83 4e 82 cd 8f e3 88 ca 91 77 82 c9 94 43 .b.N.......w...C
1020: 82 b9 82 e9 20 29 0d 0a 09 62 79 74 65 2a 20 62 .... )...byte* b
1030: 6c 6b 20 3d 20 62 75 66 5f 20 2b 20 73 69 7a 2a lk = buf_ + siz*
1040: 66 69 72 73 74 5f 3b 0d 0a 09 66 69 72 73 74 5f first_;...first_
1050: 20 20 20 20 3d 20 2a 62 6c 6b 3b 0d 0a 09 2d 2d = *blk;...--
1060: 61 76 61 69 6c 5f 3b 0d 0a 09 72 65 74 75 72 6e avail_;...return
1070: 20 62 6c 6b 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 blk;..}....void
1080: 20 4d 65 6d 42 6c 6f 63 6b 3a 3a 44 65 41 6c 6c MemBlock::DeAll
1090: 6f 63 28 20 76 6f 69 64 2a 20 70 74 72 2c 20 62 oc( void* ptr, b
10a0: 79 74 65 20 73 69 7a 20 29 0d 0a 7b 0d 0a 09 2f yte siz )..{.../
10b0: 2f 20 83 81 83 82 83 8a 96 df 82 b7 0d 0a 09 2f / ............./
10c0: 2f 20 20 20 28 20 95 cf 82 c8 83 7c 83 43 83 93 / ( .....|.C..
10d0: 83 5e 93 6e 82 b3 82 ea 82 bd 82 e7 82 be 81 60 .^.n...........`
10e0: 82 df 81 60 20 29 0d 0a 09 62 79 74 65 2a 20 62 ...` )...byte* b
10f0: 6c 6b 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74 lk = static_cast
1100: 3c 62 79 74 65 2a 3e 28 70 74 72 29 3b 0d 0a 09 <byte*>(ptr);...
1110: 2a 62 6c 6b 20 20 20 20 20 20 3d 20 66 69 72 73 *blk = firs
1120: 74 5f 3b 0d 0a 09 66 69 72 73 74 5f 20 20 20 20 t_;...first_
1130: 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 62 79 = static_cast<by
1140: 74 65 3e 28 28 62 6c 6b 2d 62 75 66 5f 29 2f 73 te>((blk-buf_)/s
1150: 69 7a 29 3b 0d 0a 09 2b 2b 61 76 61 69 6c 5f 3b iz);...++avail_;
1160: 0d 0a 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 62 6f ..}....inline bo
1170: 6f 6c 20 4d 65 6d 42 6c 6f 63 6b 3a 3a 69 73 41 ol MemBlock::isA
1180: 76 61 69 6c 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 8b vail()..{...// .
1190: f3 82 ab 82 aa 82 a0 82 e9 81 48 0d 0a 09 72 65 ..........H...re
11a0: 74 75 72 6e 20 28 61 76 61 69 6c 5f 20 21 3d 20 turn (avail_ !=
11b0: 30 29 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 0);..}....inline
11c0: 20 62 6f 6f 6c 20 4d 65 6d 42 6c 6f 63 6b 3a 3a bool MemBlock::
11d0: 69 73 45 6d 70 74 79 28 20 62 79 74 65 20 6e 75 isEmpty( byte nu
11e0: 6d 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 8a ae 91 53 m )..{...// ...S
11f0: 82 c9 8b f3 81 48 0d 0a 09 72 65 74 75 72 6e 20 .....H...return
1200: 28 61 76 61 69 6c 5f 20 3d 3d 20 6e 75 6d 29 3b (avail_ == num);
1210: 0d 0a 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 62 6f ..}....inline bo
1220: 6f 6c 20 4d 65 6d 42 6c 6f 63 6b 3a 3a 68 61 73 ol MemBlock::has
1230: 54 68 69 73 50 74 72 28 20 76 6f 69 64 2a 20 70 ThisPtr( void* p
1240: 74 72 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 20 29 tr, size_t len )
1250: 0d 0a 7b 0d 0a 09 2f 2f 20 82 b1 82 cc 83 75 83 ..{...// .....u.
1260: 8d 83 62 83 4e 82 cc 83 7c 83 43 83 93 83 5e 81 ..b.N...|.C...^.
1270: 48 0d 0a 09 72 65 74 75 72 6e 20 28 20 62 75 66 H...return ( buf
1280: 5f 3c 3d 70 74 72 20 26 26 20 70 74 72 3c 62 75 _<=ptr && ptr<bu
1290: 66 5f 2b 6c 65 6e 20 29 3b 0d 0a 7d 0d 0a 0d 0a f_+len );..}....
12a0: 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//----------
12b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
12c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
12f0: 0a 0d 0a 2f 2f 0d 0a 2f 2f 20 8c c5 92 e8 83 54 ...//..// .....T
1300: 83 43 83 59 8a 6d 95 db 90 6c 0d 0a 2f 2f 20 81 .C.Y.m...l..// .
1310: 75 73 69 7a 83 6f 83 43 83 67 81 76 82 cc 97 cc usiz.o.C.g.v....
1320: 88 e6 82 f0 96 88 89 f1 8a 6d 95 db 82 b7 82 e9 .........m......
1330: 82 cc 82 aa 8e 64 8e 96 0d 0a 2f 2f 0d 0a 2f 2f .....d....//..//
1340: 20 83 81 83 82 83 8a 83 75 83 8d 83 62 83 4e 82 .......u...b.N.
1350: cc 83 8a 83 58 83 67 82 f0 95 db 8e 9d 82 b5 81 ....X.g.........
1360: 41 8b f3 82 a2 82 c4 82 a2 82 e9 83 75 83 8d 83 A...........u...
1370: 62 83 4e 82 f0 8e 67 82 c1 82 c4 0d 0a 2f 2f 20 b.N...g......//
1380: 83 81 83 82 83 8a 97 76 8b 81 82 c9 89 9e 82 a6 .......v........
1390: 82 c4 82 a2 82 ad 81 42 8b f3 82 ab 82 aa 82 c8 .......B........
13a0: 82 ad 82 c8 82 c1 82 bd 82 e7 90 56 82 b5 82 ad ...........V....
13b0: 4d 65 6d 42 6c 6f 63 6b 82 f0 0d 0a 2f 2f 20 8d MemBlock....// .
13c0: ec 82 c1 82 c4 83 8a 83 58 83 67 82 c9 89 c1 82 ........X.g.....
13d0: a6 82 e9 81 42 0d 0a 2f 2f 0d 0a 2f 2f 20 8d c5 ....B..//..// ..
13e0: 8c e3 82 c9 83 81 83 82 83 8a 8a 84 82 e8 93 96 ................
13f0: 82 c4 2f 89 f0 95 fa 82 f0 8d 73 82 c1 82 bd 42 ../.......s....B
1400: 6c 6f 63 6b 82 f0 82 bb 82 ea 82 bc 82 ea 8b 4c lock...........L
1410: 89 af 82 b5 82 c4 82 a8 82 ab 81 41 0d 0a 2f 2f ...........A..//
1420: 20 8d c5 8f 89 82 c9 82 bb 82 b1 82 f0 92 b2 82 ...............
1430: d7 82 e9 82 b1 82 c6 82 c5 8d 82 91 ac 89 bb 82 ................
1440: f0 90 7d 82 e9 81 42 0d 0a 2f 2f 0d 0a 0d 0a 76 ..}...B..//....v
1450: 6f 69 64 20 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 oid MemoryManage
1460: 72 3a 3a 46 69 78 65 64 53 69 7a 65 4d 65 6d 42 r::FixedSizeMemB
1470: 6c 6f 63 6b 50 6f 6f 6c 3a 3a 43 6f 6e 73 74 72 lockPool::Constr
1480: 75 63 74 28 20 62 79 74 65 20 73 69 7a 20 29 0d uct( byte siz ).
1490: 0a 7b 0d 0a 09 2f 2f 20 83 81 83 82 83 8a 83 7d .{...// .......}
14a0: 83 6c 81 5b 83 57 83 83 82 aa 8f 89 8a fa 89 bb .l.[.W..........
14b0: 82 b3 82 ea 82 e9 82 dc 82 c5 82 cd 81 41 0d 0a .............A..
14c0: 09 2f 2f 20 95 81 92 ca 82 cc 61 75 74 6f 5f 70 .// ......auto_p
14d0: 74 72 82 e0 8e 67 82 ed 82 c8 82 a2 95 fb 82 aa tr...g..........
14e0: 96 b3 93 ef 81 63 0d 0a 09 73 74 72 75 63 74 20 .....c...struct
14f0: 41 75 74 6f 44 65 6c 65 74 65 72 0d 0a 09 7b 0d AutoDeleter...{.
1500: 0a 09 09 41 75 74 6f 44 65 6c 65 74 65 72 28 20 ...AutoDeleter(
1510: 4d 65 6d 42 6c 6f 63 6b 2a 20 70 20 29 20 3a 20 MemBlock* p ) :
1520: 70 74 72 5f 28 70 29 20 7b 7d 0d 0a 09 09 7e 41 ptr_(p) {}....~A
1530: 75 74 6f 44 65 6c 65 74 65 72 28 29 20 7b 20 3a utoDeleter() { :
1540: 3a 64 65 6c 65 74 65 20 5b 5d 20 70 74 72 5f 3b :delete [] ptr_;
1550: 20 7d 0d 0a 09 09 76 6f 69 64 20 52 65 6c 65 61 }....void Relea
1560: 73 65 28 29 20 7b 20 70 74 72 5f 20 3d 20 4e 55 se() { ptr_ = NU
1570: 4c 4c 3b 20 7d 0d 0a 09 09 4d 65 6d 42 6c 6f 63 LL; }....MemBloc
1580: 6b 2a 20 70 74 72 5f 3b 0d 0a 09 7d 3b 0d 0a 0d k* ptr_;...};...
1590: 0a 09 2f 2f 20 83 81 83 82 83 8a 83 75 83 8d 83 ..// .......u...
15a0: 62 83 4e 8f ee 95 f1 88 e6 82 f0 82 bf 82 e5 82 b.N.............
15b0: b1 82 c1 82 c6 8a 6d 95 db 0d 0a 09 41 75 74 6f ......m.....Auto
15c0: 44 65 6c 65 74 65 72 20 61 28 20 62 6c 6f 63 6b Deleter a( block
15d0: 73 5f 20 3d 20 3a 3a 6e 65 77 20 4d 65 6d 42 6c s_ = ::new MemBl
15e0: 6f 63 6b 5b 34 5d 20 29 3b 0d 0a 0d 0a 09 2f 2f ock[4] );.....//
15f0: 20 83 75 83 8d 83 62 83 4e 83 54 83 43 83 59 93 .u...b.N.T.C.Y.
1600: 99 8c 76 8e 5a 0d 0a 09 69 6e 74 20 6e 70 62 20 ..v.Z...int npb
1610: 3d 20 42 4c 4f 43 4b 5f 53 49 5a 2f 73 69 7a 3b = BLOCK_SIZ/siz;
1620: 0d 0a 09 6e 75 6d 50 65 72 42 6c 6f 63 6b 5f 20 ...numPerBlock_
1630: 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 62 79 = static_cast<by
1640: 74 65 3e 28 20 4d 69 6e 28 20 6e 70 62 2c 20 32 te>( Min( npb, 2
1650: 35 35 20 29 20 29 3b 0d 0a 09 66 69 78 65 64 53 55 ) );...fixedS
1660: 69 7a 65 5f 20 20 20 3d 20 73 69 7a 3b 0d 0a 0d ize_ = siz;...
1670: 0a 09 2f 2f 20 88 ea 8c c2 82 be 82 af 83 75 83 ..// .........u.
1680: 8d 83 62 83 4e 8d ec 90 ac 0d 0a 09 62 6c 6f 63 ..b.N.......bloc
1690: 6b 73 5f 5b 30 5d 2e 43 6f 6e 73 74 72 75 63 74 ks_[0].Construct
16a0: 28 20 66 69 78 65 64 53 69 7a 65 5f 2c 20 6e 75 ( fixedSize_, nu
16b0: 6d 50 65 72 42 6c 6f 63 6b 5f 20 29 3b 0d 0a 0d mPerBlock_ );...
16c0: 0a 09 61 2e 52 65 6c 65 61 73 65 28 29 3b 0d 0a ..a.Release();..
16d0: 09 6c 61 73 74 41 5f 20 20 20 20 20 20 20 20 20 .lastA_
16e0: 20 20 20 3d 20 30 3b 0d 0a 09 6c 61 73 74 44 41 = 0;...lastDA
16f0: 5f 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 3b _ = 0;
1700: 0d 0a 09 62 6c 6f 63 6b 4e 75 6d 5f 20 20 20 20 ...blockNum_
1710: 20 20 20 20 20 3d 20 31 3b 0d 0a 09 62 6c 6f 63 = 1;...bloc
1720: 6b 4e 75 6d 52 65 73 65 72 76 65 64 5f 20 3d 20 kNumReserved_ =
1730: 34 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 4d 65 4;..}....void Me
1740: 6d 6f 72 79 4d 61 6e 61 67 65 72 3a 3a 46 69 78 moryManager::Fix
1750: 65 64 53 69 7a 65 4d 65 6d 42 6c 6f 63 6b 50 6f edSizeMemBlockPo
1760: 6f 6c 3a 3a 44 65 73 74 72 75 63 74 28 29 0d 0a ol::Destruct()..
1770: 7b 0d 0a 09 2f 2f 20 8a 65 83 75 83 8d 83 62 83 {...// .e.u...b.
1780: 4e 82 f0 89 f0 95 fa 0d 0a 09 66 6f 72 28 20 69 N.........for( i
1790: 6e 74 20 69 3d 30 3b 20 69 3c 62 6c 6f 63 6b 4e nt i=0; i<blockN
17a0: 75 6d 5f 3b 20 2b 2b 69 20 29 0d 0a 09 09 62 6c um_; ++i )....bl
17b0: 6f 63 6b 73 5f 5b 69 5d 2e 44 65 73 74 72 75 63 ocks_[i].Destruc
17c0: 74 28 29 3b 0d 0a 0d 0a 09 2f 2f 20 83 75 83 8d t();.....// .u..
17d0: 83 62 83 4e 8f ee 95 f1 95 db 8e 9d 97 cc 88 e6 .b.N............
17e0: 82 cc 83 81 83 82 83 8a 82 e0 89 f0 95 fa 0d 0a ................
17f0: 09 3a 3a 64 65 6c 65 74 65 20 5b 5d 20 62 6c 6f .::delete [] blo
1800: 63 6b 73 5f 3b 0d 0a 09 62 6c 6f 63 6b 4e 75 6d cks_;...blockNum
1810: 5f 20 3d 20 30 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 _ = 0;..}....voi
1820: 64 2a 20 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 72 d* MemoryManager
1830: 3a 3a 46 69 78 65 64 53 69 7a 65 4d 65 6d 42 6c ::FixedSizeMemBl
1840: 6f 63 6b 50 6f 6f 6c 3a 3a 41 6c 6c 6f 63 28 29 ockPool::Alloc()
1850: 0d 0a 7b 0d 0a 09 2f 2f 20 82 b1 82 b1 82 c5 6c ..{...// ......l
1860: 61 73 74 41 5f 82 aa 56 61 6c 69 64 82 a9 82 c7 astA_..Valid....
1870: 82 a4 82 a9 83 60 83 46 83 62 83 4e 82 b5 82 c8 .....`.F.b.N....
1880: 82 a2 82 c6 82 dc 82 b8 82 a2 81 42 0d 0a 09 2f ...........B.../
1890: 2f 20 44 65 41 6c 6c 6f 63 82 b3 82 ea 82 c4 82 / DeAlloc.......
18a0: c8 82 ad 82 c8 82 c1 82 c4 82 e9 82 a9 82 e0 82 ................
18b0: b5 82 e7 82 c8 82 a2 82 cc 82 c5 81 42 0d 0a 0d ............B...
18c0: 0a 09 2f 2f 20 91 4f 89 f1 83 81 83 82 83 8a 82 ..// .O.........
18d0: f0 90 d8 82 e8 8f 6f 82 b5 82 bd 83 75 83 8d 83 ......o.....u...
18e0: 62 83 4e 82 c9 0d 0a 09 2f 2f 20 82 dc 82 be 8b b.N.....// .....
18f0: f3 82 ab 82 aa 82 a0 82 e9 82 a9 82 c7 82 a4 82 ................
1900: a9 83 60 83 46 83 62 83 4e 0d 0a 09 69 66 28 20 ..`.F.b.N...if(
1910: 21 62 6c 6f 63 6b 73 5f 5b 6c 61 73 74 41 5f 5d !blocks_[lastA_]
1920: 2e 69 73 41 76 61 69 6c 28 29 20 29 0d 0a 09 7b .isAvail() )...{
1930: 0d 0a 09 09 2f 2f 20 96 b3 82 a9 82 c1 82 bd 8f ....// .........
1940: ea 8d 87 81 41 83 8a 83 58 83 67 82 cc 96 96 94 ....A...X.g.....
1950: f6 82 a9 82 e7 8f 87 82 c9 90 fc 8c 60 92 54 8d ............`.T.
1960: f5 0d 0a 09 09 66 6f 72 28 20 69 6e 74 20 69 3d .....for( int i=
1970: 62 6c 6f 63 6b 4e 75 6d 5f 3b 3b 20 29 0d 0a 09 blockNum_;; )...
1980: 09 7b 0d 0a 09 09 09 69 66 28 20 62 6c 6f 63 6b .{.....if( block
1990: 73 5f 5b 2d 2d 69 5d 2e 69 73 41 76 61 69 6c 28 s_[--i].isAvail(
19a0: 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2f ) ).....{....../
19b0: 2f 20 8b f3 82 ab 83 75 83 8d 83 62 83 4e 94 ad / .....u...b.N..
19c0: 8c a9 81 60 81 49 0d 0a 09 09 09 09 6c 61 73 74 ...`.I......last
19d0: 41 5f 20 3d 20 69 3b 0d 0a 09 09 09 09 62 72 65 A_ = i;......bre
19e0: 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 69 66 ak;.....}.....if
19f0: 28 20 69 20 3d 3d 20 30 20 29 0d 0a 09 09 09 7b ( i == 0 ).....{
1a00: 0d 0a 09 09 09 09 2f 2f 20 91 53 95 94 96 84 82 ......// .S.....
1a10: dc 82 c1 82 c4 82 bd 2e 2e 2e 0d 0a 09 09 09 09 ................
1a20: 69 66 28 20 62 6c 6f 63 6b 4e 75 6d 5f 20 3d 3d if( blockNum_ ==
1a30: 20 62 6c 6f 63 6b 4e 75 6d 52 65 73 65 72 76 65 blockNumReserve
1a40: 64 5f 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 d_ )......{.....
1a50: 09 09 2f 2f 20 82 b5 82 a9 82 e0 8d ec 8b c6 97 ..// ...........
1a60: cc 88 e6 82 e0 96 9e 94 74 82 c8 82 cc 82 c5 8a ........t.......
1a70: 67 92 a3 0d 0a 09 09 09 09 09 4d 65 6d 42 6c 6f g.........MemBlo
1a80: 63 6b 2a 20 6e 62 20 3d 20 3a 3a 6e 65 77 20 4d ck* nb = ::new M
1a90: 65 6d 42 6c 6f 63 6b 5b 20 62 6c 6f 63 6b 4e 75 emBlock[ blockNu
1aa0: 6d 5f 2a 32 20 5d 3b 0d 0a 09 09 09 09 09 6d 65 m_*2 ];.......me
1ab0: 6d 6d 6f 76 65 28 20 6e 62 2c 20 62 6c 6f 63 6b mmove( nb, block
1ac0: 73 5f 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 42 6c s_, sizeof(MemBl
1ad0: 6f 63 6b 29 2a 28 62 6c 6f 63 6b 4e 75 6d 5f 29 ock)*(blockNum_)
1ae0: 20 29 3b 0d 0a 09 09 09 09 09 3a 3a 64 65 6c 65 );.......::dele
1af0: 74 65 20 5b 5d 20 62 6c 6f 63 6b 73 5f 3b 0d 0a te [] blocks_;..
1b00: 09 09 09 09 09 62 6c 6f 63 6b 73 5f 20 3d 20 6e .....blocks_ = n
1b10: 62 3b 0d 0a 09 09 09 09 09 62 6c 6f 63 6b 4e 75 b;.......blockNu
1b20: 6d 52 65 73 65 72 76 65 64 5f 20 2a 3d 20 32 3b mReserved_ *= 2;
1b30: 0d 0a 09 09 09 09 7d 0d 0a 0d 0a 09 09 09 09 2f ......}......../
1b40: 2f 20 90 56 82 b5 82 ad 83 75 83 8d 83 62 83 4e / .V.....u...b.N
1b50: 8d 5c 92 7a 0d 0a 09 09 09 09 62 6c 6f 63 6b 73 .\.z......blocks
1b60: 5f 5b 20 62 6c 6f 63 6b 4e 75 6d 5f 20 5d 2e 43 _[ blockNum_ ].C
1b70: 6f 6e 73 74 72 75 63 74 28 20 66 69 78 65 64 53 onstruct( fixedS
1b80: 69 7a 65 5f 2c 20 6e 75 6d 50 65 72 42 6c 6f 63 ize_, numPerBloc
1b90: 6b 5f 20 29 3b 0d 0a 09 09 09 09 6c 61 73 74 41 k_ );......lastA
1ba0: 5f 20 3d 20 62 6c 6f 63 6b 4e 75 6d 5f 2b 2b 3b _ = blockNum_++;
1bb0: 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ......break;....
1bc0: 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 0d 0a 09 .}....}...}.....
1bd0: 2f 2f 20 83 75 83 8d 83 62 83 4e 82 a9 82 e7 90 // .u...b.N.....
1be0: d8 82 e8 8f 6f 82 b5 8a 84 82 e8 93 96 82 c4 0d ....o...........
1bf0: 0a 09 72 65 74 75 72 6e 20 62 6c 6f 63 6b 73 5f ..return blocks_
1c00: 5b 6c 61 73 74 41 5f 5d 2e 41 6c 6c 6f 63 28 20 [lastA_].Alloc(
1c10: 66 69 78 65 64 53 69 7a 65 5f 20 29 3b 0d 0a 7d fixedSize_ );..}
1c20: 0d 0a 0d 0a 76 6f 69 64 20 4d 65 6d 6f 72 79 4d ....void MemoryM
1c30: 61 6e 61 67 65 72 3a 3a 46 69 78 65 64 53 69 7a anager::FixedSiz
1c40: 65 4d 65 6d 42 6c 6f 63 6b 50 6f 6f 6c 3a 3a 44 eMemBlockPool::D
1c50: 65 41 6c 6c 6f 63 28 20 76 6f 69 64 2a 20 70 74 eAlloc( void* pt
1c60: 72 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 8a 59 93 96 r )..{...// .Y..
1c70: 83 75 83 8d 83 62 83 4e 82 f0 92 54 8d f5 0d 0a .u...b.N...T....
1c80: 09 63 6f 6e 73 74 20 69 6e 74 20 6d 78 3d 62 6c .const int mx=bl
1c90: 6f 63 6b 4e 75 6d 5f 2c 20 6c 6e 3d 66 69 78 65 ockNum_, ln=fixe
1ca0: 64 53 69 7a 65 5f 2a 6e 75 6d 50 65 72 42 6c 6f dSize_*numPerBlo
1cb0: 63 6b 5f 3b 0d 0a 09 66 6f 72 28 20 69 6e 74 20 ck_;...for( int
1cc0: 75 3d 6c 61 73 74 44 41 5f 2c 20 64 3d 6c 61 73 u=lastDA_, d=las
1cd0: 74 44 41 5f 2d 31 3b 3b 20 29 0d 0a 09 7b 0d 0a tDA_-1;; )...{..
1ce0: 09 09 69 66 28 20 75 3e 3d 30 20 29 0d 0a 09 09 ..if( u>=0 )....
1cf0: 09 69 66 28 20 62 6c 6f 63 6b 73 5f 5b 75 5d 2e .if( blocks_[u].
1d00: 68 61 73 54 68 69 73 50 74 72 28 70 74 72 2c 6c hasThisPtr(ptr,l
1d10: 6e 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 n) ).....{......
1d20: 6c 61 73 74 44 41 5f 20 3d 20 75 3b 0d 0a 09 09 lastDA_ = u;....
1d30: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a ..break;.....}..
1d40: 09 09 09 65 6c 73 65 20 69 66 28 20 75 3d 3d 6d ...else if( u==m
1d50: 78 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 75 x ).....{......u
1d60: 20 3d 20 2d 31 3b 0d 0a 09 09 09 7d 0d 0a 09 09 = -1;.....}....
1d70: 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 .else.....{.....
1d80: 09 2b 2b 75 3b 0d 0a 09 09 09 7d 0d 0a 09 09 69 .++u;.....}....i
1d90: 66 28 20 64 3e 3d 30 20 29 0d 0a 09 09 09 69 66 f( d>=0 ).....if
1da0: 28 20 62 6c 6f 63 6b 73 5f 5b 64 5d 2e 68 61 73 ( blocks_[d].has
1db0: 54 68 69 73 50 74 72 28 70 74 72 2c 6c 6e 29 20 ThisPtr(ptr,ln)
1dc0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6c 61 73 ).....{......las
1dd0: 74 44 41 5f 20 3d 20 64 3b 0d 0a 09 09 09 09 62 tDA_ = d;......b
1de0: 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 reak;.....}.....
1df0: 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 else.....{......
1e00: 2d 2d 64 3b 0d 0a 09 09 09 7d 0d 0a 09 7d 0d 0a --d;.....}...}..
1e10: 0d 0a 09 2f 2f 20 89 f0 95 fa 82 f0 8e c0 8d 73 ...// .........s
1e20: 0d 0a 09 62 6c 6f 63 6b 73 5f 5b 6c 61 73 74 44 ...blocks_[lastD
1e30: 41 5f 5d 2e 44 65 41 6c 6c 6f 63 28 20 70 74 72 A_].DeAlloc( ptr
1e40: 2c 20 66 69 78 65 64 53 69 7a 65 5f 20 29 3b 0d , fixedSize_ );.
1e50: 0a 0d 0a 09 2f 2f 20 82 b1 82 cc 8d ed 8f 9c 82 ....// .........
1e60: c5 83 75 83 8d 83 62 83 4e 82 aa 8a ae 91 53 82 ..u...b.N.....S.
1e70: c9 8b f3 82 c9 82 c8 82 c1 82 bd 8f ea 8d 87 0d ................
1e80: 0a 09 69 66 28 20 62 6c 6f 63 6b 73 5f 5b 6c 61 ..if( blocks_[la
1e90: 73 74 44 41 5f 5d 2e 69 73 45 6d 70 74 79 28 20 stDA_].isEmpty(
1ea0: 6e 75 6d 50 65 72 42 6c 6f 63 6b 5f 20 29 20 29 numPerBlock_ ) )
1eb0: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 82 b5 82 a9 82 ...{....// .....
1ec0: e0 88 ea 94 d4 8c e3 82 eb 82 cc 83 75 83 8d 83 ............u...
1ed0: 62 83 4e 82 c5 82 c8 82 a9 82 c1 82 bd 82 e7 0d b.N.............
1ee0: 0a 09 09 69 6e 74 20 65 6e 64 20 3d 20 62 6c 6f ...int end = blo
1ef0: 63 6b 4e 75 6d 5f 2d 31 3b 0d 0a 09 09 69 66 28 ckNum_-1;....if(
1f00: 20 6c 61 73 74 44 41 5f 20 21 3d 20 65 6e 64 20 lastDA_ != end
1f10: 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 88 ea )....{.....// ..
1f20: 94 d4 8c e3 82 eb 82 aa 8b f3 82 be 82 c1 82 bd ................
1f30: 82 e7 89 f0 95 fa 0d 0a 09 09 09 69 66 28 20 62 ...........if( b
1f40: 6c 6f 63 6b 73 5f 5b 65 6e 64 5d 2e 69 73 45 6d locks_[end].isEm
1f50: 70 74 79 28 20 6e 75 6d 50 65 72 42 6c 6f 63 6b pty( numPerBlock
1f60: 5f 20 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 _ ) ).....{.....
1f70: 09 62 6c 6f 63 6b 73 5f 5b 65 6e 64 5d 2e 44 65 .blocks_[end].De
1f80: 73 74 72 75 63 74 28 29 3b 0d 0a 09 09 09 09 2d struct();......-
1f90: 2d 62 6c 6f 63 6b 4e 75 6d 5f 3b 0d 0a 09 09 09 -blockNum_;.....
1fa0: 09 69 66 28 20 6c 61 73 74 41 5f 20 3e 20 2d 2d .if( lastA_ > --
1fb0: 65 6e 64 20 29 0d 0a 09 09 09 09 09 6c 61 73 74 end ).......last
1fc0: 41 5f 20 3d 20 65 6e 64 3b 0d 0a 09 09 09 7d 0d A_ = end;.....}.
1fd0: 0a 0d 0a 09 09 09 2f 2f 20 8c e3 82 eb 82 c6 8c ......// .......
1fe0: f0 8a b7 0d 0a 09 09 09 4d 65 6d 42 6c 6f 63 6b ........MemBlock
1ff0: 20 74 6d 70 28 20 62 6c 6f 63 6b 73 5f 5b 6c 61 tmp( blocks_[la
2000: 73 74 44 41 5f 5d 20 29 3b 0d 0a 09 09 09 62 6c stDA_] );.....bl
2010: 6f 63 6b 73 5f 5b 6c 61 73 74 44 41 5f 5d 20 3d ocks_[lastDA_] =
2020: 20 62 6c 6f 63 6b 73 5f 5b 65 6e 64 5d 3b 0d 0a blocks_[end];..
2030: 09 09 09 62 6c 6f 63 6b 73 5f 5b 65 6e 64 5d 20 ...blocks_[end]
2040: 20 20 20 20 3d 20 74 6d 70 3b 0d 0a 09 09 7d 0d = tmp;....}.
2050: 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 ..}..}....inline
2060: 20 62 6f 6f 6c 20 4d 65 6d 6f 72 79 4d 61 6e 61 bool MemoryMana
2070: 67 65 72 3a 3a 46 69 78 65 64 53 69 7a 65 4d 65 ger::FixedSizeMe
2080: 6d 42 6c 6f 63 6b 50 6f 6f 6c 3a 3a 69 73 56 61 mBlockPool::isVa
2090: 6c 69 64 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 8a f9 lid()..{...// ..
20a0: 82 c9 8e 67 97 70 8a 4a 8e 6e 82 b3 82 ea 82 c4 ...g.p.J.n......
20b0: 82 a2 82 e9 82 a9 81 48 0d 0a 09 72 65 74 75 72 .......H...retur
20c0: 6e 20 28 62 6c 6f 63 6b 4e 75 6d 5f 20 21 3d 20 n (blockNum_ !=
20d0: 30 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 0);..}........//
20e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 2f 2f 0d ---------....//.
2130: 0a 2f 2f 20 8d c5 8f e3 88 ca 91 77 0d 0a 2f 2f .// .......w..//
2140: 20 8e 77 92 e8 83 54 83 43 83 59 82 c9 82 a0 82 .w...T.C.Y.....
2150: c1 82 bd 20 46 69 78 65 64 53 69 7a 65 4d 65 6d ... FixedSizeMem
2160: 42 6c 6f 63 6b 50 6f 6f 6c 20 82 c9 8f 88 97 9d BlockPool ......
2170: 82 f0 82 dc 82 ed 82 b7 0d 0a 2f 2f 0d 0a 2f 2f ..........//..//
2180: 20 6c 6f 6b 69 82 cc 8e c0 91 95 82 c5 82 cd 8c loki...........
2190: c5 92 e8 83 54 83 43 83 59 83 41 83 8d 83 50 81 ....T.C.Y.A...P.
21a0: 5b 83 5e 82 e0 81 41 95 4b 97 76 82 c9 89 9e 82 [.^...A.K.v.....
21b0: b6 82 c4 0d 0a 2f 2f 20 93 ae 93 49 8a 6d 95 db .....// ...I.m..
21c0: 82 b5 82 c4 82 a2 82 bd 82 aa 81 41 82 bb 82 ea ...........A....
21d0: 82 cd 96 ca 93 7c 82 c8 82 cc 82 c5 82 e2 82 df .....|..........
21e0: 82 dc 82 b5 82 bd 81 42 28 5e 5e 3b 0d 0a 2f 2f .......B(^^;..//
21f0: 20 8d c5 8f 89 82 c9 36 34 8c c2 8a 6d 95 db 82 ......64...m...
2200: b5 82 bd 82 a9 82 e7 82 c6 8c be 82 c1 82 c4 81 ................
2210: 41 82 bb 82 f1 82 c8 82 c9 83 81 83 82 83 8a 82 A...............
2220: e0 8b f2 82 ed 82 c8 82 a2 82 b5 81 63 81 42 0d ............c.B.
2230: 0a 2f 2f 0d 0a 0d 0a 4d 65 6d 6f 72 79 4d 61 6e .//....MemoryMan
2240: 61 67 65 72 2a 20 4d 65 6d 6f 72 79 4d 61 6e 61 ager* MemoryMana
2250: 67 65 72 3a 3a 70 55 6e 69 71 75 65 49 6e 73 74 ger::pUniqueInst
2260: 61 6e 63 65 5f 3b 0d 0a 0d 0a 4d 65 6d 6f 72 79 ance_;....Memory
2270: 4d 61 6e 61 67 65 72 3a 3a 4d 65 6d 6f 72 79 4d Manager::MemoryM
2280: 61 6e 61 67 65 72 28 29 0d 0a 7b 0d 0a 09 67 5f anager()..{...g_
2290: 68 65 61 70 20 3d 20 3a 3a 47 65 74 50 72 6f 63 heap = ::GetProc
22a0: 65 73 73 48 65 61 70 28 29 3b 0d 0a 0d 0a 09 2f essHeap();...../
22b0: 2f 20 83 81 83 82 83 8a 83 76 81 5b 83 8b 82 f0 / .......v.[....
22c0: 5a 45 52 4f 83 4e 83 8a 83 41 0d 0a 09 6d 65 6d ZERO.N...A...mem
22d0: 30 30 28 20 70 6f 6f 6c 73 5f 2c 20 73 69 7a 65 00( pools_, size
22e0: 6f 66 28 70 6f 6f 6c 73 5f 29 20 29 3b 0d 0a 0d of(pools_) );...
22f0: 0a 09 2f 2f 20 97 42 88 ea 82 cc 83 43 83 93 83 ..// .B.....C...
2300: 58 83 5e 83 93 83 58 82 cd 8e 84 82 c5 82 b7 0d X.^...X.........
2310: 0a 09 70 55 6e 69 71 75 65 49 6e 73 74 61 6e 63 ..pUniqueInstanc
2320: 65 5f 20 3d 20 74 68 69 73 3b 0d 0a 7d 0d 0a 0d e_ = this;..}...
2330: 0a 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 72 3a 3a .MemoryManager::
2340: 7e 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 72 28 29 ~MemoryManager()
2350: 0d 0a 7b 0d 0a 09 2f 2f 20 8d 5c 92 7a 8d cf 82 ..{...// .\.z...
2360: dd 83 81 83 82 83 8a 83 76 81 5b 83 8b 82 f0 91 ........v.[.....
2370: 53 82 c4 89 f0 95 fa 0d 0a 09 66 6f 72 28 20 69 S.........for( i
2380: 6e 74 20 69 3d 30 3b 20 69 3c 53 4d 41 4c 4c 5f nt i=0; i<SMALL_
2390: 4d 41 58 3b 20 2b 2b 69 20 29 0d 0a 09 09 69 66 MAX; ++i )....if
23a0: 28 20 70 6f 6f 6c 73 5f 5b 69 5d 2e 69 73 56 61 ( pools_[i].isVa
23b0: 6c 69 64 28 29 20 29 0d 0a 09 09 09 70 6f 6f 6c lid() ).....pool
23c0: 73 5f 5b 69 5d 2e 44 65 73 74 72 75 63 74 28 29 s_[i].Destruct()
23d0: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 ;....#if defined
23e0: 28 53 55 50 45 52 54 49 4e 59 29 20 26 26 20 64 (SUPERTINY) && d
23f0: 65 66 69 6e 65 64 28 5f 44 45 42 55 47 29 0d 0a efined(_DEBUG)..
2400: 09 2f 2f 20 83 8a 81 5b 83 4e 8c 9f 8f 6f 97 70 .// ...[.N...o.p
2410: 0d 0a 09 69 66 28 20 61 6c 6c 6f 63 43 6f 75 6e ...if( allocCoun
2420: 74 65 72 20 21 3d 20 30 20 29 0d 0a 09 09 3a 3a ter != 0 )....::
2430: 4d 65 73 73 61 67 65 42 6f 78 28 20 4e 55 4c 4c MessageBox( NULL
2440: 2c 20 54 45 58 54 28 22 4d 65 6d 6f 72 79 4c 65 , TEXT("MemoryLe
2450: 61 6b 21 22 29 2c 20 4e 55 4c 4c 2c 20 4d 42 5f ak!"), NULL, MB_
2460: 4f 4b 20 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d OK );..#endif..}
2470: 0d 0a 0d 0a 0d 0a 76 6f 69 64 2a 20 4d 65 6d 6f ......void* Memo
2480: 72 79 4d 61 6e 61 67 65 72 3a 3a 41 6c 6c 6f 63 ryManager::Alloc
2490: 28 20 73 69 7a 65 5f 74 20 73 69 7a 20 29 0d 0a ( size_t siz )..
24a0: 7b 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 {..#if defined(S
24b0: 55 50 45 52 54 49 4e 59 29 20 26 26 20 64 65 66 UPERTINY) && def
24c0: 69 6e 65 64 28 5f 44 45 42 55 47 29 0d 0a 09 2b ined(_DEBUG)...+
24d0: 2b 61 6c 6c 6f 63 43 6f 75 6e 74 65 72 3b 0d 0a +allocCounter;..
24e0: 23 65 6e 64 69 66 0d 0a 0d 0a 09 2f 2f 20 83 54 #endif.....// .T
24f0: 83 43 83 59 82 aa 97 eb 82 a9 91 e5 82 ab 82 b7 .C.Y............
2500: 82 ac 82 e9 82 c8 82 e7 0d 0a 09 2f 2f 20 83 66 ...........// .f
2510: 83 74 83 48 83 8b 83 67 82 cc 20 6e 65 77 20 89 .t.H...g.. new .
2520: 89 8e 5a 8e 71 82 c9 94 43 82 b9 82 e9 0d 0a 09 ..Z.q...C.......
2530: 75 69 6e 74 20 69 20 3d 20 73 74 61 74 69 63 5f uint i = static_
2540: 63 61 73 74 3c 75 69 6e 74 3e 28 20 73 69 7a 2d cast<uint>( siz-
2550: 31 20 29 3b 0d 0a 09 69 66 28 20 69 20 3e 3d 20 1 );...if( i >=
2560: 53 4d 41 4c 4c 5f 4d 41 58 20 29 0d 0a 09 09 72 SMALL_MAX )....r
2570: 65 74 75 72 6e 20 3a 3a 6f 70 65 72 61 74 6f 72 eturn ::operator
2580: 20 6e 65 77 28 20 73 69 7a 20 29 3b 0d 0a 0d 0a new( siz );....
2590: 09 2f 2f 20 83 7d 83 8b 83 60 83 58 83 8c 83 62 .// .}...`.X...b
25a0: 83 68 91 ce 89 9e 0d 0a 09 41 75 74 6f 4c 6f 63 .h.......AutoLoc
25b0: 6b 20 61 6c 28 74 68 69 73 29 3b 0d 0a 0d 0a 09 k al(this);.....
25c0: 2f 2f 20 82 b1 82 cc 83 54 83 43 83 59 82 cc 83 // .....T.C.Y...
25d0: 81 83 82 83 8a 8a 6d 95 db 82 aa 8f 89 82 df 82 ......m.........
25e0: c4 82 c8 82 e7 0d 0a 09 2f 2f 20 82 b1 82 b1 82 ........// .....
25f0: c5 83 81 83 82 83 8a 83 76 81 5b 83 8b 82 f0 8d ........v.[.....
2600: ec 90 ac 82 b7 82 e9 81 42 0d 0a 09 69 66 28 20 ........B...if(
2610: 21 70 6f 6f 6c 73 5f 5b 69 5d 2e 69 73 56 61 6c !pools_[i].isVal
2620: 69 64 28 29 20 29 0d 0a 09 09 70 6f 6f 6c 73 5f id() )....pools_
2630: 5b 69 5d 2e 43 6f 6e 73 74 72 75 63 74 28 20 73 [i].Construct( s
2640: 74 61 74 69 63 5f 63 61 73 74 3c 62 79 74 65 3e tatic_cast<byte>
2650: 28 73 69 7a 29 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 (siz) );.....//
2660: 82 b1 82 b1 82 c5 8a 84 82 e8 93 96 82 c4 0d 0a ................
2670: 09 72 65 74 75 72 6e 20 70 6f 6f 6c 73 5f 5b 69 .return pools_[i
2680: 5d 2e 41 6c 6c 6f 63 28 29 3b 0d 0a 7d 0d 0a 0d ].Alloc();..}...
2690: 0a 76 6f 69 64 20 4d 65 6d 6f 72 79 4d 61 6e 61 .void MemoryMana
26a0: 67 65 72 3a 3a 44 65 41 6c 6c 6f 63 28 20 76 6f ger::DeAlloc( vo
26b0: 69 64 2a 20 70 74 72 2c 20 73 69 7a 65 5f 74 20 id* ptr, size_t
26c0: 73 69 7a 20 29 0d 0a 7b 0d 0a 23 69 66 20 64 65 siz )..{..#if de
26d0: 66 69 6e 65 64 28 53 55 50 45 52 54 49 4e 59 29 fined(SUPERTINY)
26e0: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 44 45 42 && defined(_DEB
26f0: 55 47 29 0d 0a 09 2d 2d 61 6c 6c 6f 63 43 6f 75 UG)...--allocCou
2700: 6e 74 65 72 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d nter;..#endif...
2710: 0a 09 2f 2f 20 83 54 83 43 83 59 82 aa 97 eb 82 ..// .T.C.Y.....
2720: a9 91 e5 82 ab 82 b7 82 ac 82 e9 82 c8 82 e7 0d ................
2730: 0a 09 2f 2f 20 83 66 83 74 83 48 83 8b 83 67 82 ..// .f.t.H...g.
2740: cc 20 64 65 6c 65 74 65 20 89 89 8e 5a 8e 71 82 . delete ...Z.q.
2750: c9 94 43 82 b9 82 e9 0d 0a 09 75 69 6e 74 20 69 ..C.......uint i
2760: 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 = static_cast<u
2770: 69 6e 74 3e 28 20 73 69 7a 2d 31 20 29 3b 0d 0a int>( siz-1 );..
2780: 09 69 66 28 20 69 20 3e 3d 20 53 4d 41 4c 4c 5f .if( i >= SMALL_
2790: 4d 41 58 20 29 0d 0a 09 7b 0d 0a 09 09 3a 3a 6f MAX )...{....::o
27a0: 70 65 72 61 74 6f 72 20 64 65 6c 65 74 65 28 20 perator delete(
27b0: 70 74 72 20 29 3b 0d 0a 09 09 72 65 74 75 72 6e ptr );....return
27c0: 3b 20 2f 2f 20 56 43 82 c5 20 72 65 74 75 72 6e ; // VC.. return
27d0: 20 76 6f 69 64 20 82 aa 8f 6f 97 88 82 c8 82 a2 void ...o......
27e0: 82 c6 82 cd 81 63 0d 0a 09 7d 0d 0a 0d 0a 09 2f .....c...}...../
27f0: 2f 20 83 7d 83 8b 83 60 83 58 83 8c 83 62 83 68 / .}...`.X...b.h
2800: 91 ce 89 9e 0d 0a 09 41 75 74 6f 4c 6f 63 6b 20 .......AutoLock
2810: 61 6c 28 74 68 69 73 29 3b 0d 0a 0d 0a 09 2f 2f al(this);.....//
2820: 20 82 b1 82 b1 82 c5 89 f0 95 fa 0d 0a 09 70 6f .............po
2830: 6f 6c 73 5f 5b 69 5d 2e 44 65 41 6c 6c 6f 63 28 ols_[i].DeAlloc(
2840: 20 70 74 72 20 29 3b 0d 0a 7d 0d 0a 0d 0a 23 65 ptr );..}....#e
2850: 6c 73 65 20 2f 2f 20 55 53 45 5f 4f 52 49 47 4e lse // USE_ORIGN
2860: 41 4c 5f 4d 45 4d 4d 41 4e 0d 0a 0d 0a 4d 65 6d AL_MEMMAN....Mem
2870: 6f 72 79 4d 61 6e 61 67 65 72 2a 20 4d 65 6d 6f oryManager* Memo
2880: 72 79 4d 61 6e 61 67 65 72 3a 3a 70 55 6e 69 71 ryManager::pUniq
2890: 75 65 49 6e 73 74 61 6e 63 65 5f 3b 0d 0a 0d 0a ueInstance_;....
28a0: 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 72 3a 3a 4d MemoryManager::M
28b0: 65 6d 6f 72 79 4d 61 6e 61 67 65 72 28 29 0d 0a emoryManager()..
28c0: 7b 0d 0a 09 67 5f 68 65 61 70 20 3d 20 3a 3a 47 {...g_heap = ::G
28d0: 65 74 50 72 6f 63 65 73 73 48 65 61 70 28 29 3b etProcessHeap();
28e0: 0d 0a 0d 0a 09 2f 2f 20 97 42 88 ea 82 cc 83 43 .....// .B.....C
28f0: 83 93 83 58 83 5e 83 93 83 58 82 cd 8e 84 82 c5 ...X.^...X......
2900: 82 b7 0d 0a 09 70 55 6e 69 71 75 65 49 6e 73 74 .....pUniqueInst
2910: 61 6e 63 65 5f 20 3d 20 74 68 69 73 3b 0d 0a 7d ance_ = this;..}
2920: 0d 0a 0d 0a 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 ....MemoryManage
2930: 72 3a 3a 7e 4d 65 6d 6f 72 79 4d 61 6e 61 67 65 r::~MemoryManage
2940: 72 28 29 0d 0a 7b 0d 0a 23 69 66 20 64 65 66 69 r()..{..#if defi
2950: 6e 65 64 28 53 55 50 45 52 54 49 4e 59 29 20 26 ned(SUPERTINY) &
2960: 26 20 64 65 66 69 6e 65 64 28 5f 44 45 42 55 47 & defined(_DEBUG
2970: 29 0d 0a 09 2f 2f 20 83 8a 81 5b 83 4e 8c 9f 8f )...// ...[.N...
2980: 6f 97 70 0d 0a 09 69 66 28 20 61 6c 6c 6f 63 43 o.p...if( allocC
2990: 6f 75 6e 74 65 72 20 21 3d 20 30 20 29 0d 0a 09 ounter != 0 )...
29a0: 09 3a 3a 4d 65 73 73 61 67 65 42 6f 78 28 20 4e .::MessageBox( N
29b0: 55 4c 4c 2c 20 54 45 58 54 28 22 4d 65 6d 6f 72 ULL, TEXT("Memor
29c0: 79 4c 65 61 6b 21 22 29 2c 20 4e 55 4c 4c 2c 20 yLeak!"), NULL,
29d0: 4d 42 5f 4f 4b 20 29 3b 0d 0a 23 65 6e 64 69 66 MB_OK );..#endif
29e0: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 2a 20 4d 65 6d ..}....void* Mem
29f0: 6f 72 79 4d 61 6e 61 67 65 72 3a 3a 41 6c 6c 6f oryManager::Allo
2a00: 63 28 20 73 69 7a 65 5f 74 20 73 69 7a 20 29 0d c( size_t siz ).
2a10: 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 3a 3a 6f 70 .{...return ::op
2a20: 65 72 61 74 6f 72 20 6e 65 77 28 73 69 7a 29 3b erator new(siz);
2a30: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 4d 65 6d 6f ..}....void Memo
2a40: 72 79 4d 61 6e 61 67 65 72 3a 3a 44 65 41 6c 6c ryManager::DeAll
2a50: 6f 63 28 20 76 6f 69 64 2a 20 70 74 72 2c 20 73 oc( void* ptr, s
2a60: 69 7a 65 5f 74 20 73 69 7a 20 29 0d 0a 7b 0d 0a ize_t siz )..{..
2a70: 09 3a 3a 6f 70 65 72 61 74 6f 72 20 64 65 6c 65 .::operator dele
2a80: 74 65 28 70 74 72 29 3b 0d 0a 7d 0d 0a 0d 0a 23 te(ptr);..}....#
2a90: 65 6e 64 69 66 0d 0a endif..