Hex Artifact Content Вы: nobody
Вход

Artifact 8be52d1efb7126ccd3815644742062b31648f812:


0000: 2f 2f 20 66 69 78 61 6c 6c 6f 63 2e 68 20 2d 20  // fixalloc.h - 
0010: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  declarations for
0020: 20 66 69 78 65 64 20 62 6c 6f 63 6b 20 61 6c 6c   fixed block all
0030: 6f 63 61 74 6f 72 0d 0a 0d 0a 23 69 66 6e 64 65  ocator....#ifnde
0040: 66 20 5f 5f 46 49 58 41 4c 4c 4f 43 5f 48 5f 5f  f __FIXALLOC_H__
0050: 0d 0a 23 64 65 66 69 6e 65 20 5f 5f 46 49 58 41  ..#define __FIXA
0060: 4c 4c 4f 43 5f 48 5f 5f 0d 0a 0d 0a 23 69 6e 63  LLOC_H__....#inc
0070: 6c 75 64 65 20 22 61 66 78 70 6c 65 78 5f 2e 68  lude "afxplex_.h
0080: 22 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  "....///////////
0090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
00a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
00b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
00c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
00d0: 2f 2f 0d 0a 2f 2f 20 43 46 69 78 65 64 41 6c 6c  //..// CFixedAll
00e0: 6f 63 0d 0a 0d 0a 63 6c 61 73 73 20 43 46 69 78  oc....class CFix
00f0: 65 64 41 6c 6c 6f 63 0d 0a 7b 0d 0a 2f 2f 20 43  edAlloc..{..// C
0100: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 70 75 62  onstructors..pub
0110: 6c 69 63 3a 0d 0a 09 43 46 69 78 65 64 41 6c 6c  lic:...CFixedAll
0120: 6f 63 28 55 49 4e 54 20 6e 41 6c 6c 6f 63 53 69  oc(UINT nAllocSi
0130: 7a 65 2c 20 55 49 4e 54 20 6e 42 6c 6f 63 6b 53  ze, UINT nBlockS
0140: 69 7a 65 20 3d 20 36 34 29 3b 0d 0a 0d 0a 2f 2f  ize = 64);....//
0150: 20 41 74 74 72 69 62 75 74 65 73 0d 0a 09 55 49   Attributes...UI
0160: 4e 54 20 47 65 74 41 6c 6c 6f 63 53 69 7a 65 28  NT GetAllocSize(
0170: 29 20 7b 20 72 65 74 75 72 6e 20 6d 5f 6e 41 6c  ) { return m_nAl
0180: 6c 6f 63 53 69 7a 65 3b 20 7d 0d 0a 0d 0a 2f 2f  locSize; }....//
0190: 20 4f 70 65 72 61 74 69 6f 6e 73 0d 0a 70 75 62   Operations..pub
01a0: 6c 69 63 3a 0d 0a 09 76 6f 69 64 2a 20 41 6c 6c  lic:...void* All
01b0: 6f 63 28 29 3b 20 20 2f 2f 20 72 65 74 75 72 6e  oc();  // return
01c0: 20 61 20 63 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f   a chunk of memo
01d0: 72 79 20 6f 66 20 6e 41 6c 6c 6f 63 53 69 7a 65  ry of nAllocSize
01e0: 0d 0a 09 76 6f 69 64 20 46 72 65 65 28 76 6f 69  ...void Free(voi
01f0: 64 2a 20 70 29 3b 20 2f 2f 20 66 72 65 65 20 63  d* p); // free c
0200: 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72 79 20 72  hunk of memory r
0210: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 41 6c 6c  eturned from All
0220: 6f 63 0d 0a 09 76 6f 69 64 20 46 72 65 65 41 6c  oc...void FreeAl
0230: 6c 28 29 3b 20 2f 2f 20 66 72 65 65 20 65 76 65  l(); // free eve
0240: 72 79 74 68 69 6e 67 20 61 6c 6c 6f 63 61 74 65  rything allocate
0250: 64 20 66 72 6f 6d 20 74 68 69 73 20 61 6c 6c 6f  d from this allo
0260: 63 61 74 6f 72 0d 0a 0d 0a 2f 2f 20 49 6d 70 6c  cator....// Impl
0270: 65 6d 65 6e 74 61 74 69 6f 6e 0d 0a 70 75 62 6c  ementation..publ
0280: 69 63 3a 0d 0a 09 7e 43 46 69 78 65 64 41 6c 6c  ic:...~CFixedAll
0290: 6f 63 28 29 3b 0d 0a 0d 0a 70 72 6f 74 65 63 74  oc();....protect
02a0: 65 64 3a 0d 0a 09 73 74 72 75 63 74 20 43 4e 6f  ed:...struct CNo
02b0: 64 65 0d 0a 09 7b 0d 0a 09 09 43 4e 6f 64 65 2a  de...{....CNode*
02c0: 20 70 4e 65 78 74 3b 20 20 20 2f 2f 20 6f 6e 6c   pNext;   // onl
02d0: 79 20 76 61 6c 69 64 20 77 68 65 6e 20 69 6e 20  y valid when in 
02e0: 66 72 65 65 20 6c 69 73 74 0d 0a 09 7d 3b 0d 0a  free list...};..
02f0: 0d 0a 09 55 49 4e 54 20 6d 5f 6e 41 6c 6c 6f 63  ...UINT m_nAlloc
0300: 53 69 7a 65 3b 20 20 2f 2f 20 73 69 7a 65 20 6f  Size;  // size o
0310: 66 20 65 61 63 68 20 62 6c 6f 63 6b 20 66 72 6f  f each block fro
0320: 6d 20 41 6c 6c 6f 63 0d 0a 09 55 49 4e 54 20 6d  m Alloc...UINT m
0330: 5f 6e 42 6c 6f 63 6b 53 69 7a 65 3b 20 20 2f 2f  _nBlockSize;  //
0340: 20 6e 75 6d 62 65 72 20 6f 66 20 62 6c 6f 63 6b   number of block
0350: 73 20 74 6f 20 67 65 74 20 61 74 20 61 20 74 69  s to get at a ti
0360: 6d 65 0d 0a 09 43 50 6c 65 78 2a 20 6d 5f 70 42  me...CPlex* m_pB
0370: 6c 6f 63 6b 73 3b 20 20 20 2f 2f 20 6c 69 6e 6b  locks;   // link
0380: 65 64 20 6c 69 73 74 20 6f 66 20 62 6c 6f 63 6b  ed list of block
0390: 73 20 28 69 73 20 6e 42 6c 6f 63 6b 73 2a 6e 41  s (is nBlocks*nA
03a0: 6c 6c 6f 63 53 69 7a 65 29 0d 0a 09 43 4e 6f 64  llocSize)...CNod
03b0: 65 2a 20 6d 5f 70 4e 6f 64 65 46 72 65 65 3b 20  e* m_pNodeFree; 
03c0: 2f 2f 20 66 69 72 73 74 20 66 72 65 65 20 6e 6f  // first free no
03d0: 64 65 20 28 4e 55 4c 4c 20 69 66 20 6e 6f 20 66  de (NULL if no f
03e0: 72 65 65 20 6e 6f 64 65 73 29 0d 0a 09 43 52 49  ree nodes)...CRI
03f0: 54 49 43 41 4c 5f 53 45 43 54 49 4f 4e 20 6d 5f  TICAL_SECTION m_
0400: 70 72 6f 74 65 63 74 3b 0d 0a 7d 3b 0d 0a 0d 0a  protect;..};....
0410: 23 69 66 6e 64 65 66 20 5f 44 45 42 55 47 0d 0a  #ifndef _DEBUG..
0420: 0d 0a 2f 2f 20 44 45 43 4c 41 52 45 5f 46 49 58  ..// DECLARE_FIX
0430: 45 44 5f 41 4c 4c 4f 43 20 2d 2d 20 75 73 65 64  ED_ALLOC -- used
0440: 20 69 6e 20 63 6c 61 73 73 20 64 65 66 69 6e 69   in class defini
0450: 74 69 6f 6e 0d 0a 23 64 65 66 69 6e 65 20 44 45  tion..#define DE
0460: 43 4c 41 52 45 5f 46 49 58 45 44 5f 41 4c 4c 4f  CLARE_FIXED_ALLO
0470: 43 28 63 6c 61 73 73 5f 6e 61 6d 65 29 20 5c 0d  C(class_name) \.
0480: 0a 70 75 62 6c 69 63 3a 20 5c 0d 0a 09 76 6f 69  .public: \...voi
0490: 64 2a 20 6f 70 65 72 61 74 6f 72 20 6e 65 77 28  d* operator new(
04a0: 73 69 7a 65 5f 74 20 73 69 7a 65 29 20 5c 0d 0a  size_t size) \..
04b0: 09 7b 20 5c 0d 0a 09 09 41 53 53 45 52 54 28 73  .{ \....ASSERT(s
04c0: 69 7a 65 20 3d 3d 20 73 5f 61 6c 6c 6f 63 2e 47  ize == s_alloc.G
04d0: 65 74 41 6c 6c 6f 63 53 69 7a 65 28 29 29 3b 20  etAllocSize()); 
04e0: 5c 0d 0a 09 09 55 4e 55 53 45 44 28 73 69 7a 65  \....UNUSED(size
04f0: 29 3b 20 5c 0d 0a 09 09 72 65 74 75 72 6e 20 73  ); \....return s
0500: 5f 61 6c 6c 6f 63 2e 41 6c 6c 6f 63 28 29 3b 20  _alloc.Alloc(); 
0510: 5c 0d 0a 09 7d 20 5c 0d 0a 09 76 6f 69 64 2a 20  \...} \...void* 
0520: 6f 70 65 72 61 74 6f 72 20 6e 65 77 28 73 69 7a  operator new(siz
0530: 65 5f 74 2c 20 76 6f 69 64 2a 20 70 29 20 5c 0d  e_t, void* p) \.
0540: 0a 09 09 7b 20 72 65 74 75 72 6e 20 70 3b 20 7d  ...{ return p; }
0550: 20 5c 0d 0a 09 76 6f 69 64 20 6f 70 65 72 61 74   \...void operat
0560: 6f 72 20 64 65 6c 65 74 65 28 76 6f 69 64 2a 20  or delete(void* 
0570: 70 29 20 7b 20 73 5f 61 6c 6c 6f 63 2e 46 72 65  p) { s_alloc.Fre
0580: 65 28 70 29 3b 20 7d 20 5c 0d 0a 09 76 6f 69 64  e(p); } \...void
0590: 2a 20 6f 70 65 72 61 74 6f 72 20 6e 65 77 28 73  * operator new(s
05a0: 69 7a 65 5f 74 20 73 69 7a 65 2c 20 4c 50 43 53  ize_t size, LPCS
05b0: 54 52 2c 20 69 6e 74 29 20 5c 0d 0a 09 7b 20 5c  TR, int) \...{ \
05c0: 0d 0a 09 09 41 53 53 45 52 54 28 73 69 7a 65 20  ....ASSERT(size 
05d0: 3d 3d 20 73 5f 61 6c 6c 6f 63 2e 47 65 74 41 6c  == s_alloc.GetAl
05e0: 6c 6f 63 53 69 7a 65 28 29 29 3b 20 5c 0d 0a 09  locSize()); \...
05f0: 09 55 4e 55 53 45 44 28 73 69 7a 65 29 3b 20 5c  .UNUSED(size); \
0600: 0d 0a 09 09 72 65 74 75 72 6e 20 73 5f 61 6c 6c  ....return s_all
0610: 6f 63 2e 41 6c 6c 6f 63 28 29 3b 20 5c 0d 0a 09  oc.Alloc(); \...
0620: 7d 20 5c 0d 0a 70 72 6f 74 65 63 74 65 64 3a 20  } \..protected: 
0630: 5c 0d 0a 09 73 74 61 74 69 63 20 43 46 69 78 65  \...static CFixe
0640: 64 41 6c 6c 6f 63 20 73 5f 61 6c 6c 6f 63 20 5c  dAlloc s_alloc \
0650: 0d 0a 0d 0a 2f 2f 20 49 4d 50 4c 45 4d 45 4e 54  ....// IMPLEMENT
0660: 5f 46 49 58 45 44 5f 41 4c 4c 4f 43 20 2d 2d 20  _FIXED_ALLOC -- 
0670: 75 73 65 64 20 69 6e 20 63 6c 61 73 73 20 69 6d  used in class im
0680: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 69 6c  plementation fil
0690: 65 0d 0a 23 64 65 66 69 6e 65 20 49 4d 50 4c 45  e..#define IMPLE
06a0: 4d 45 4e 54 5f 46 49 58 45 44 5f 41 4c 4c 4f 43  MENT_FIXED_ALLOC
06b0: 28 63 6c 61 73 73 5f 6e 61 6d 65 2c 20 62 6c 6f  (class_name, blo
06c0: 63 6b 5f 73 69 7a 65 29 20 5c 0d 0a 43 46 69 78  ck_size) \..CFix
06d0: 65 64 41 6c 6c 6f 63 20 63 6c 61 73 73 5f 6e 61  edAlloc class_na
06e0: 6d 65 3a 3a 73 5f 61 6c 6c 6f 63 28 73 69 7a 65  me::s_alloc(size
06f0: 6f 66 28 63 6c 61 73 73 5f 6e 61 6d 65 29 2c 20  of(class_name), 
0700: 62 6c 6f 63 6b 5f 73 69 7a 65 29 20 5c 0d 0a 0d  block_size) \...
0710: 0a 23 65 6c 73 65 20 2f 2f 21 5f 44 45 42 55 47  .#else //!_DEBUG
0720: 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 44 45 43 4c  ....#define DECL
0730: 41 52 45 5f 46 49 58 45 44 5f 41 4c 4c 4f 43 28  ARE_FIXED_ALLOC(
0740: 63 6c 61 73 73 5f 6e 61 6d 65 29 20 20 20 20 20  class_name)     
0750: 2f 2f 20 6e 6f 74 68 69 6e 67 20 69 6e 20 64 65  // nothing in de
0760: 62 75 67 0d 0a 23 64 65 66 69 6e 65 20 49 4d 50  bug..#define IMP
0770: 4c 45 4d 45 4e 54 5f 46 49 58 45 44 5f 41 4c 4c  LEMENT_FIXED_ALL
0780: 4f 43 28 63 6c 61 73 73 5f 6e 61 6d 65 2c 20 62  OC(class_name, b
0790: 6c 6f 63 6b 5f 73 69 7a 65 29 20 20 20 2f 2f 20  lock_size)   // 
07a0: 6e 6f 74 68 69 6e 67 20 69 6e 20 64 65 62 75 67  nothing in debug
07b0: 0d 0a 0d 0a 23 65 6e 64 69 66 20 2f 2f 21 5f 44  ....#endif //!_D
07c0: 45 42 55 47 0d 0a 0d 0a 23 65 6e 64 69 66 0d 0a  EBUG....#endif..