Artifact
8be52d1efb7126ccd3815644742062b31648f812:
- File
sqlite1c/SQL_DBF/FIXALLOC.H
— part of check-in
[43f40f9ec5]
at
2009-04-09 06:17:08
on branch trunk
— Добавлены недостающие для сборки файлы
(user:
orefkov
size: 2000)
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..