Hex Artifact Content

Not logged in

Artifact 4b76ca1a670e139dd354bee27ec14cdabfac68cc:


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..