home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 …ember: Reference Library / Apple Developer Reference Library (December 1999) (Disk 1).iso / pc / technical documentation / develop / develop issue 24 / develop issue 24 code / scriptable database 1.0a15.sea / Scriptable Database 1.0a15 / Database / DatabaseDocument.cp < prev    next >
MacBinary  |  1996-04-29  |  38.5 KB  |  [TEXT/CWIE]

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: MacBinary (archive/macBinary).

ConfidenceProgramDetectionMatch TypeSupport
10% dexvert MacBinary (archive/macBinary) fallback Supported
1% dexvert MS-DOS Code Page Info (other/dosCodePage) ext Unsupported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Mon Apr 29 16:27:02 1996, modified Mon Apr 29 16:27:02 1996, creator 'CWIE', type ASCII, 38752 bytes "DatabaseDocument.cp" , at 0x97e0 410 bytes resource default (weak)
99% file data default
74% TrID Macintosh plain text (MacBinary) default
25% TrID MacBinary 2 default (weak)
100% siegfried fmt/1762 MacBinary (II) default
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[CWIE]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 13 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 |..Databa|seDocume|
|00000010| 6e 74 2e 63 70 00 00 00 | 00 00 00 00 00 00 00 00 |nt.cp...|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 43 57 49 | 45 01 00 00 00 00 00 00 |.TEXTCWI|E.......|
|00000050| 00 00 00 00 00 97 60 00 | 00 01 9a ad aa d6 96 ad |......`.|........|
|00000060| aa d6 96 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 0f 70 00 00 |........|.....p..|
|00000080| 2f 2f 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |//======|========|
|00000090| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|000000a0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|000000b0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|000000c0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|000000d0| 3d 3d 0d 2f 2f 20 47 72 | 65 67 20 41 6e 64 65 72 |==.// Gr|eg Ander|
|000000e0| 73 6f 6e 0d 2f 2f 20 64 | 62 2b 0d 2f 2f 0d 2f 2f |son.// d|b+.//.//|
|000000f0| 20 41 62 73 74 72 61 63 | 74 20 62 61 73 65 20 63 | Abstrac|t base c|
|00000100| 6c 61 73 73 20 66 6f 72 | 20 44 61 74 61 42 61 73 |lass for| DataBas|
|00000110| 65 20 64 6f 63 75 6d 65 | 6e 74 0d 2f 2f 20 31 37 |e docume|nt.// 17|
|00000120| 20 4d 61 79 20 31 39 39 | 34 0d 2f 2f 20 33 31 20 | May 199|4.// 31 |
|00000130| 44 65 63 20 31 39 39 34 | 0d 2f 2f 3d 3d 3d 3d 3d |Dec 1994|.//=====|
|00000140| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00000150| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00000160| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00000170| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00000180| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 0d 0d 23 69 6e |========|===..#in|
|00000190| 63 6c 75 64 65 20 22 44 | 61 74 61 62 61 73 65 44 |clude "D|atabaseD|
|000001a0| 6f 63 75 6d 65 6e 74 2e | 68 22 0d 0d 23 69 6e 63 |ocument.|h"..#inc|
|000001b0| 6c 75 64 65 20 22 47 72 | 6f 75 70 43 6f 6e 74 72 |lude "Gr|oupContr|
|000001c0| 6f 6c 4f 62 6a 65 63 74 | 2e 68 22 0d 23 69 6e 63 |olObject|.h".#inc|
|000001d0| 6c 75 64 65 20 22 41 62 | 73 74 72 61 63 74 52 65 |lude "Ab|stractRe|
|000001e0| 63 6f 72 64 2e 68 22 0d | 23 69 6e 63 6c 75 64 65 |cord.h".|#include|
|000001f0| 20 22 44 42 45 6c 65 6d | 65 6e 74 2e 68 22 0d 23 | "DBElem|ent.h".#|
|00000200| 69 6e 63 6c 75 64 65 20 | 22 44 42 50 72 6f 70 65 |include |"DBPrope|
|00000210| 72 74 79 2e 68 22 0d 23 | 69 6e 63 6c 75 64 65 20 |rty.h".#|include |
|00000220| 22 44 61 74 61 52 65 63 | 6f 72 64 2e 68 22 0d 23 |"DataRec|ord.h".#|
|00000230| 69 6e 63 6c 75 64 65 20 | 22 54 72 61 6e 73 61 63 |include |"Transac|
|00000240| 74 69 6f 6e 2e 68 22 0d | 23 69 6e 63 6c 75 64 65 |tion.h".|#include|
|00000250| 20 22 55 6e 69 71 75 65 | 49 44 2e 68 22 0d 0d 23 | "Unique|ID.h"..#|
|00000260| 69 6e 63 6c 75 64 65 20 | 22 45 78 63 65 70 74 69 |include |"Excepti|
|00000270| 6f 6e 73 2e 68 22 0d 0d | 23 64 65 66 69 6e 65 20 |ons.h"..|#define |
|00000280| 6b 46 72 65 65 52 65 63 | 6f 72 64 4c 69 73 74 49 |kFreeRec|ordListI|
|00000290| 6e 64 65 78 20 30 0d 23 | 64 65 66 69 6e 65 20 6b |ndex 0.#|define k|
|000002a0| 4c 61 73 74 44 61 74 61 | 42 6c 6f 63 6b 46 72 65 |LastData|BlockFre|
|000002b0| 65 4c 69 73 74 20 28 6b | 4e 75 6d 62 65 72 46 72 |eList (k|NumberFr|
|000002c0| 65 65 4c 69 73 74 73 20 | 2d 20 31 29 0d 0d 2f 2f |eeLists |- 1)..//|
|000002d0| 0d 2f 2f 20 46 6f 72 20 | 6d 65 6d 63 70 79 0d 2f |.// For |memcpy./|
|000002e0| 2f 20 46 6f 72 20 43 6f | 70 79 4d 65 6d 6f 72 79 |/ For Co|pyMemory|
|000002f0| 0d 2f 2f 0d 23 69 6e 63 | 6c 75 64 65 20 22 41 62 |.//.#inc|lude "Ab|
|00000300| 73 74 72 61 63 74 44 61 | 74 61 2e 68 22 0d 0d 2f |stractDa|ta.h"../|
|00000310| 2f 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/-------|--------|
|00000320| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000330| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000340| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000350| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000360| 2d 0d 2f 2f 20 54 44 6f | 63 75 6d 65 6e 74 46 69 |-.// TDo|cumentFi|
|00000370| 6c 65 49 6e 66 6f 72 6d | 61 74 69 6f 6e 3a 3a 41 |leInform|ation::A|
|00000380| 73 73 69 67 6e 49 6e 69 | 74 69 61 6c 49 44 0d 2f |ssignIni|tialID./|
|00000390| 2f 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/-------|--------|
|000003a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003e0| 2d 0d 76 6f 69 64 20 54 | 44 6f 63 75 6d 65 6e 74 |-.void T|Document|
|000003f0| 46 69 6c 65 49 6e 66 6f | 72 6d 61 74 69 6f 6e 3a |FileInfo|rmation:|
|00000400| 3a 41 73 73 69 67 6e 49 | 6e 69 74 69 61 6c 49 44 |:AssignI|nitialID|
|00000410| 28 29 0d 7b 0d 09 66 44 | 6f 63 75 6d 65 6e 74 49 |().{..fD|ocumentI|
|00000420| 44 20 3d 20 47 65 6e 65 | 72 61 74 65 55 6e 69 71 |D = Gene|rateUniq|
|00000430| 75 65 49 44 28 29 3b 0d | 7d 0d 0d 2f 2f 2d 2d 2d |ueID();.|}..//---|
|00000440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000450| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000460| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000470| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000480| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 2f 2f |--------|-----.//|
|00000490| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|000004a0| 6e 74 3a 3a 7e 54 44 61 | 74 61 62 61 73 65 44 6f |nt::~TDa|tabaseDo|
|000004b0| 63 75 6d 65 6e 74 0d 2f | 2f 2d 2d 2d 2d 2d 2d 2d |cument./|/-------|
|000004c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000004d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000004e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000004f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 54 44 61 74 61 62 |--------|-.TDatab|
|00000510| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 7e 54 44 |aseDocum|ent::~TD|
|00000520| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 28 |atabaseD|ocument(|
|00000530| 29 0d 7b 0d 09 2f 2f 0d | 09 2f 2f 20 53 61 76 65 |).{..//.|.// Save|
|00000540| 20 63 68 61 6e 67 65 73 | 20 62 61 63 6b 20 74 6f | changes| back to|
|00000550| 20 64 69 73 6b 20 62 65 | 66 6f 72 65 20 64 65 6c | disk be|fore del|
|00000560| 65 74 69 6e 67 20 6f 75 | 72 73 65 6c 76 65 73 0d |eting ou|rselves.|
|00000570| 09 2f 2f 0d 09 2f 2f 20 | 53 68 6f 75 6c 64 6e 27 |.//..// |Shouldn'|
|00000580| 74 20 64 6f 20 74 68 69 | 73 20 69 6e 20 74 68 65 |t do thi|s in the|
|00000590| 20 64 65 73 74 72 75 63 | 74 6f 72 3b 20 77 65 20 | destruc|tor; we |
|000005a0| 73 68 6f 75 6c 64 0d 09 | 2f 2f 20 6d 61 6b 65 20 |should..|// make |
|000005b0| 61 20 76 69 72 74 75 61 | 6c 20 27 44 69 73 70 6f |a virtua|l 'Dispo|
|000005c0| 73 65 27 20 6d 65 74 68 | 6f 64 2c 20 61 6e 64 20 |se' meth|od, and |
|000005d0| 6b 65 65 70 20 74 68 65 | 0d 09 2f 2f 20 64 65 73 |keep the|..// des|
|000005e0| 74 72 75 63 74 6f 72 20 | 70 72 6f 74 65 63 74 65 |tructor |protecte|
|000005f0| 64 2e 0d 09 2f 2f 0d 09 | 74 68 69 73 2d 3e 46 6c |d...//..|this->Fl|
|00000600| 75 73 68 43 68 61 6e 67 | 65 73 54 6f 44 69 73 6b |ushChang|esToDisk|
|00000610| 28 29 3b 0d 09 0d 09 2f | 2f 0d 09 2f 2f 20 54 68 |();..../|/..// Th|
|00000620| 65 20 64 61 74 61 62 61 | 73 65 20 64 6f 63 75 6d |e databa|se docum|
|00000630| 65 6e 74 20 6f 77 6e 73 | 20 74 68 65 20 62 61 63 |ent owns| the bac|
|00000640| 6b 69 6e 67 20 73 74 6f | 72 65 20 6f 62 6a 65 63 |king sto|re objec|
|00000650| 74 2c 0d 09 2f 2f 20 61 | 6e 64 20 64 65 6c 65 74 |t,..// a|nd delet|
|00000660| 65 73 20 69 74 20 61 74 | 20 64 65 73 74 72 75 63 |es it at| destruc|
|00000670| 74 6f 72 20 74 69 6d 65 | 2e 0d 09 2f 2f 0d 09 64 |tor time|...//..d|
|00000680| 65 6c 65 74 65 20 66 42 | 61 63 6b 69 6e 67 53 74 |elete fB|ackingSt|
|00000690| 6f 72 65 3b 0d 09 66 42 | 61 63 6b 69 6e 67 53 74 |ore;..fB|ackingSt|
|000006a0| 6f 72 65 20 3d 20 6e 69 | 6c 3b 0d 7d 20 2f 2f 20 |ore = ni|l;.} // |
|000006b0| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|000006c0| 74 3a 3a 7e 54 44 61 74 | 61 62 61 73 65 44 6f 63 |t::~TDat|abaseDoc|
|000006d0| 75 6d 65 6e 74 0d 0d 2f | 2f 2d 2d 2d 2d 2d 2d 2d |ument../|/-------|
|000006e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000006f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000700| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000710| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000720| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 2f 2f 20 54 44 61 |--------|-.// TDa|
|00000730| 74 61 62 61 73 65 44 6f | 63 75 6d 65 6e 74 3a 3a |tabaseDo|cument::|
|00000740| 4f 62 6a 65 63 74 73 4b | 65 79 53 70 61 63 65 0d |ObjectsK|eySpace.|
|00000750| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|00000760| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000770| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000780| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000790| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000007a0| 2d 2d 0d 49 6e 74 36 34 | 20 54 44 61 74 61 62 61 |--.Int64| TDataba|
|000007b0| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 4f 62 6a 65 |seDocume|nt::Obje|
|000007c0| 63 74 73 4b 65 79 53 70 | 61 63 65 28 29 20 63 6f |ctsKeySp|ace() co|
|000007d0| 6e 73 74 0d 7b 0d 09 72 | 65 74 75 72 6e 20 66 44 |nst.{..r|eturn fD|
|000007e0| 6f 63 75 6d 65 6e 74 49 | 6e 66 6f 72 6d 61 74 69 |ocumentI|nformati|
|000007f0| 6f 6e 2e 66 44 6f 63 75 | 6d 65 6e 74 49 44 3b 0d |on.fDocu|mentID;.|
|00000800| 7d 20 2f 2f 20 54 44 61 | 74 61 62 61 73 65 44 6f |} // TDa|tabaseDo|
|00000810| 63 75 6d 65 6e 74 3a 3a | 4f 62 6a 65 63 74 73 4b |cument::|ObjectsK|
|00000820| 65 79 53 70 61 63 65 0d | 09 0d 2f 2f 2d 2d 2d 2d |eySpace.|..//----|
|00000830| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000840| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000850| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 2f 2f 20 |--------|----.// |
|00000880| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|00000890| 74 3a 3a 52 65 61 64 52 | 65 63 6f 72 64 52 61 6e |t::ReadR|ecordRan|
|000008a0| 67 65 0d 2f 2f 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |ge.//---|--------|
|000008b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000008c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000008d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000008e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000008f0| 2d 2d 2d 2d 2d 0d 76 6f | 69 64 20 54 44 61 74 61 |-----.vo|id TData|
|00000900| 62 61 73 65 44 6f 63 75 | 6d 65 6e 74 3a 3a 52 65 |baseDocu|ment::Re|
|00000910| 61 64 52 65 63 6f 72 64 | 52 61 6e 67 65 28 76 6f |adRecord|Range(vo|
|00000920| 69 64 2a 20 62 75 66 66 | 65 72 53 74 61 72 74 2c |id* buff|erStart,|
|00000930| 20 6c 6f 6e 67 20 62 79 | 74 65 4f 66 66 73 65 74 | long by|teOffset|
|00000940| 54 6f 52 65 63 6f 72 64 | 2c 20 6c 6f 6e 67 20 6e |ToRecord|, long n|
|00000950| 75 6d 62 65 72 4f 66 42 | 79 74 65 73 2c 20 54 41 |umberOfB|ytes, TA|
|00000960| 62 73 74 72 61 63 74 42 | 61 63 6b 69 6e 67 53 74 |bstractB|ackingSt|
|00000970| 6f 72 65 2a 20 62 61 63 | 6b 69 6e 67 53 74 6f 72 |ore* bac|kingStor|
|00000980| 65 54 6f 55 73 65 20 2f | 2a 3d 20 6e 69 6c 2a 2f |eToUse /|*= nil*/|
|00000990| 29 0d 7b 0d 09 52 45 51 | 55 49 52 45 56 41 4c 49 |).{..REQ|UIREVALI|
|000009a0| 44 50 4f 49 4e 54 45 52 | 28 62 75 66 66 65 72 53 |DPOINTER|(bufferS|
|000009b0| 74 61 72 74 29 3b 0d 09 | 69 66 28 62 61 63 6b 69 |tart);..|if(backi|
|000009c0| 6e 67 53 74 6f 72 65 54 | 6f 55 73 65 20 3d 3d 20 |ngStoreT|oUse == |
|000009d0| 6e 69 6c 29 0d 09 09 62 | 61 63 6b 69 6e 67 53 74 |nil)...b|ackingSt|
|000009e0| 6f 72 65 54 6f 55 73 65 | 20 3d 20 66 42 61 63 6b |oreToUse| = fBack|
|000009f0| 69 6e 67 53 74 6f 72 65 | 3b 0d 09 0d 09 69 66 28 |ingStore|;....if(|
|00000a00| 62 61 63 6b 69 6e 67 53 | 74 6f 72 65 54 6f 55 73 |backingS|toreToUs|
|00000a10| 65 20 21 3d 20 6e 69 6c | 29 0d 09 09 62 61 63 6b |e != nil|)...back|
|00000a20| 69 6e 67 53 74 6f 72 65 | 54 6f 55 73 65 2d 3e 52 |ingStore|ToUse->R|
|00000a30| 65 61 64 28 62 75 66 66 | 65 72 53 74 61 72 74 2c |ead(buff|erStart,|
|00000a40| 20 62 79 74 65 4f 66 66 | 73 65 74 54 6f 52 65 63 | byteOff|setToRec|
|00000a50| 6f 72 64 20 2b 20 74 68 | 69 73 2d 3e 66 44 6f 63 |ord + th|is->fDoc|
|00000a60| 75 6d 65 6e 74 49 6e 66 | 6f 72 6d 61 74 69 6f 6e |umentInf|ormation|
|00000a70| 2e 66 53 74 61 72 74 4f | 66 52 65 63 6f 72 64 44 |.fStartO|fRecordD|
|00000a80| 61 74 61 2c 20 6e 75 6d | 62 65 72 4f 66 42 79 74 |ata, num|berOfByt|
|00000a90| 65 73 29 3b 0d 7d 20 2f | 2f 20 54 44 61 74 61 62 |es);.} /|/ TDatab|
|00000aa0| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 52 65 61 |aseDocum|ent::Rea|
|00000ab0| 64 52 65 63 6f 72 64 52 | 61 6e 67 65 0d 0d 2f 2f |dRecordR|ange..//|
|00000ac0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000ad0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000ae0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000af0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b10| 0d 2f 2f 20 54 44 61 74 | 61 62 61 73 65 44 6f 63 |.// TDat|abaseDoc|
|00000b20| 75 6d 65 6e 74 3a 3a 57 | 72 69 74 65 52 65 63 6f |ument::W|riteReco|
|00000b30| 72 64 52 61 6e 67 65 0d | 2f 2f 2d 2d 2d 2d 2d 2d |rdRange.|//------|
|00000b40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b50| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 76 6f 69 64 20 |--------|--.void |
|00000b90| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|00000ba0| 74 3a 3a 57 72 69 74 65 | 52 65 63 6f 72 64 52 61 |t::Write|RecordRa|
|00000bb0| 6e 67 65 28 76 6f 69 64 | 2a 20 62 75 66 66 65 72 |nge(void|* buffer|
|00000bc0| 53 74 61 72 74 2c 20 6c | 6f 6e 67 20 62 79 74 65 |Start, l|ong byte|
|00000bd0| 4f 66 66 73 65 74 54 6f | 52 65 63 6f 72 64 2c 20 |OffsetTo|Record, |
|00000be0| 6c 6f 6e 67 20 6e 75 6d | 62 65 72 4f 66 42 79 74 |long num|berOfByt|
|00000bf0| 65 73 2c 20 54 41 62 73 | 74 72 61 63 74 42 61 63 |es, TAbs|tractBac|
|00000c00| 6b 69 6e 67 53 74 6f 72 | 65 2a 20 62 61 63 6b 69 |kingStor|e* backi|
|00000c10| 6e 67 53 74 6f 72 65 54 | 6f 55 73 65 20 2f 2a 3d |ngStoreT|oUse /*=|
|00000c20| 20 6e 69 6c 2a 2f 29 0d | 7b 0d 09 52 45 51 55 49 | nil*/).|{..REQUI|
|00000c30| 52 45 56 41 4c 49 44 50 | 4f 49 4e 54 45 52 28 62 |REVALIDP|OINTER(b|
|00000c40| 75 66 66 65 72 53 74 61 | 72 74 29 3b 0d 09 69 66 |ufferSta|rt);..if|
|00000c50| 28 62 61 63 6b 69 6e 67 | 53 74 6f 72 65 54 6f 55 |(backing|StoreToU|
|00000c60| 73 65 20 3d 3d 20 6e 69 | 6c 29 0d 09 09 62 61 63 |se == ni|l)...bac|
|00000c70| 6b 69 6e 67 53 74 6f 72 | 65 54 6f 55 73 65 20 3d |kingStor|eToUse =|
|00000c80| 20 66 42 61 63 6b 69 6e | 67 53 74 6f 72 65 3b 0d | fBackin|gStore;.|
|00000c90| 0d 09 69 66 28 62 61 63 | 6b 69 6e 67 53 74 6f 72 |..if(bac|kingStor|
|00000ca0| 65 54 6f 55 73 65 20 21 | 3d 20 6e 69 6c 29 0d 09 |eToUse !|= nil)..|
|00000cb0| 09 62 61 63 6b 69 6e 67 | 53 74 6f 72 65 54 6f 55 |.backing|StoreToU|
|00000cc0| 73 65 2d 3e 57 72 69 74 | 65 28 62 75 66 66 65 72 |se->Writ|e(buffer|
|00000cd0| 53 74 61 72 74 2c 20 62 | 79 74 65 4f 66 66 73 65 |Start, b|yteOffse|
|00000ce0| 74 54 6f 52 65 63 6f 72 | 64 20 2b 20 74 68 69 73 |tToRecor|d + this|
|00000cf0| 2d 3e 66 44 6f 63 75 6d | 65 6e 74 49 6e 66 6f 72 |->fDocum|entInfor|
|00000d00| 6d 61 74 69 6f 6e 2e 66 | 53 74 61 72 74 4f 66 52 |mation.f|StartOfR|
|00000d10| 65 63 6f 72 64 44 61 74 | 61 2c 20 6e 75 6d 62 65 |ecordDat|a, numbe|
|00000d20| 72 4f 66 42 79 74 65 73 | 29 3b 0d 7d 20 2f 2f 20 |rOfBytes|);.} // |
|00000d30| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|00000d40| 74 3a 3a 57 72 69 74 65 | 52 65 63 6f 72 64 52 61 |t::Write|RecordRa|
|00000d50| 6e 67 65 0d 0d 2f 2f 2d | 2d 2d 2d 2d 2d 2d 2d 2d |nge..//-|--------|
|00000d60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000d70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000d80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000d90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000da0| 2d 2d 2d 2d 2d 2d 2d 0d | 2f 2f 20 54 44 61 74 61 |-------.|// TData|
|00000db0| 62 61 73 65 44 6f 63 75 | 6d 65 6e 74 3a 3a 47 65 |baseDocu|ment::Ge|
|00000dc0| 74 46 69 72 73 74 46 72 | 65 65 49 6e 64 65 78 0d |tFirstFr|eeIndex.|
|00000dd0| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|00000de0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000df0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000e00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000e10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000e20| 2d 2d 0d 6c 6f 6e 67 20 | 54 44 61 74 61 62 61 73 |--.long |TDatabas|
|00000e30| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 47 65 74 46 69 |eDocumen|t::GetFi|
|00000e40| 72 73 74 46 72 65 65 49 | 6e 64 65 78 28 6c 6f 6e |rstFreeI|ndex(lon|
|00000e50| 67 20 77 68 69 63 68 46 | 72 65 65 4c 69 73 74 29 |g whichF|reeList)|
|00000e60| 20 63 6f 6e 73 74 0d 7b | 0d 09 52 65 71 75 69 72 | const.{|..Requir|
|00000e70| 65 28 28 77 68 69 63 68 | 46 72 65 65 4c 69 73 74 |e((which|FreeList|
|00000e80| 20 3e 3d 20 30 29 20 26 | 26 20 28 77 68 69 63 68 | >= 0) &|& (which|
|00000e90| 46 72 65 65 4c 69 73 74 | 20 3c 20 6b 4e 75 6d 62 |FreeList| < kNumb|
|00000ea0| 65 72 46 72 65 65 4c 69 | 73 74 73 29 29 3b 0d 09 |erFreeLi|sts));..|
|00000eb0| 72 65 74 75 72 6e 20 66 | 46 72 65 65 4c 69 73 74 |return f|FreeList|
|00000ec0| 5b 77 68 69 63 68 46 72 | 65 65 4c 69 73 74 5d 3b |[whichFr|eeList];|
|00000ed0| 0d 7d 20 2f 2f 20 54 44 | 61 74 61 62 61 73 65 44 |.} // TD|atabaseD|
|00000ee0| 6f 63 75 6d 65 6e 74 3a | 3a 47 65 74 46 69 72 73 |ocument:|:GetFirs|
|00000ef0| 74 46 72 65 65 49 6e 64 | 65 78 0d 0d 2f 2f 2d 2d |tFreeInd|ex..//--|
|00000f00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000f10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000f20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000f30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000f40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 2f |--------|------./|
|00000f50| 2f 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |/ TDatab|aseDocum|
|00000f60| 65 6e 74 3a 3a 53 65 74 | 46 72 65 65 49 6e 64 65 |ent::Set|FreeInde|
|00000f70| 78 0d 2f 2f 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |x.//----|--------|
|00000f80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000fb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000fc0| 2d 2d 2d 2d 0d 76 6f 69 | 64 20 54 44 61 74 61 62 |----.voi|d TDatab|
|00000fd0| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 53 65 74 |aseDocum|ent::Set|
|00000fe0| 46 72 65 65 49 6e 64 65 | 78 28 6c 6f 6e 67 20 77 |FreeInde|x(long w|
|00000ff0| 68 69 63 68 46 72 65 65 | 4c 69 73 74 2c 20 6c 6f |hichFree|List, lo|
|00001000| 6e 67 20 66 69 72 73 74 | 46 72 65 65 29 0d 7b 0d |ng first|Free).{.|
|00001010| 09 52 65 71 75 69 72 65 | 28 28 77 68 69 63 68 46 |.Require|((whichF|
|00001020| 72 65 65 4c 69 73 74 20 | 3e 3d 20 30 29 20 26 26 |reeList |>= 0) &&|
|00001030| 20 28 77 68 69 63 68 46 | 72 65 65 4c 69 73 74 20 | (whichF|reeList |
|00001040| 3c 20 6b 4e 75 6d 62 65 | 72 46 72 65 65 4c 69 73 |< kNumbe|rFreeLis|
|00001050| 74 73 29 29 3b 0d 09 66 | 46 72 65 65 4c 69 73 74 |ts));..f|FreeList|
|00001060| 5b 77 68 69 63 68 46 72 | 65 65 4c 69 73 74 5d 20 |[whichFr|eeList] |
|00001070| 3d 20 66 69 72 73 74 46 | 72 65 65 3b 0d 7d 20 2f |= firstF|ree;.} /|
|00001080| 2f 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |/ TDatab|aseDocum|
|00001090| 65 6e 74 3a 3a 53 65 74 | 46 72 65 65 49 6e 64 65 |ent::Set|FreeInde|
|000010a0| 78 0d 0d 2f 2f 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |x..//---|--------|
|000010b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000010c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000010d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000010e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000010f0| 2d 2d 2d 2d 2d 0d 2f 2f | 20 54 44 61 74 61 62 61 |-----.//| TDataba|
|00001100| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 47 65 74 52 |seDocume|nt::GetR|
|00001110| 65 63 6f 72 64 43 75 72 | 73 6f 72 0d 2f 2f 2d 2d |ecordCur|sor.//--|
|00001120| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001130| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001140| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001150| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001160| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 41 |--------|------.A|
|00001170| 43 6f 6e 73 74 3c 54 41 | 62 73 74 72 61 63 74 52 |Const<TA|bstractR|
|00001180| 65 63 6f 72 64 3e 20 54 | 44 61 74 61 62 61 73 65 |ecord> T|Database|
|00001190| 44 6f 63 75 6d 65 6e 74 | 3a 3a 47 65 74 52 65 63 |Document|::GetRec|
|000011a0| 6f 72 64 43 75 72 73 6f | 72 28 6c 6f 6e 67 20 72 |ordCurso|r(long r|
|000011b0| 65 63 6f 72 64 49 6e 64 | 65 78 29 20 63 6f 6e 73 |ecordInd|ex) cons|
|000011c0| 74 0d 7b 0d 09 72 65 74 | 75 72 6e 20 41 43 6f 6e |t.{..ret|urn ACon|
|000011d0| 73 74 3c 54 41 62 73 74 | 72 61 63 74 52 65 63 6f |st<TAbst|ractReco|
|000011e0| 72 64 3e 28 74 68 69 73 | 2d 3e 47 65 74 52 65 63 |rd>(this|->GetRec|
|000011f0| 6f 72 64 28 72 65 63 6f | 72 64 49 6e 64 65 78 29 |ord(reco|rdIndex)|
|00001200| 29 3b 0d 7d 20 2f 2f 20 | 54 44 61 74 61 62 61 73 |);.} // |TDatabas|
|00001210| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 47 65 74 52 65 |eDocumen|t::GetRe|
|00001220| 63 6f 72 64 43 75 72 73 | 6f 72 0d 0d 2f 2f 2d 2d |cordCurs|or..//--|
|00001230| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001240| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001250| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001260| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001270| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 2f |--------|------./|
|00001280| 2f 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |/ TDatab|aseDocum|
|00001290| 65 6e 74 3a 3a 47 65 74 | 52 65 63 6f 72 64 0d 2f |ent::Get|Record./|
|000012a0| 2f 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/-------|--------|
|000012b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000012c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000012d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000012e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000012f0| 2d 0d 54 41 62 73 74 72 | 61 63 74 52 65 63 6f 72 |-.TAbstr|actRecor|
|00001300| 64 2a 20 54 44 61 74 61 | 62 61 73 65 44 6f 63 75 |d* TData|baseDocu|
|00001310| 6d 65 6e 74 3a 3a 47 65 | 74 52 65 63 6f 72 64 28 |ment::Ge|tRecord(|
|00001320| 6c 6f 6e 67 20 72 65 63 | 6f 72 64 49 6e 64 65 78 |long rec|ordIndex|
|00001330| 29 20 63 6f 6e 73 74 0d | 7b 0d 09 54 41 62 73 74 |) const.|{..TAbst|
|00001340| 72 61 63 74 52 65 63 6f | 72 64 2a 20 63 75 72 73 |ractReco|rd* curs|
|00001350| 6f 72 20 3d 20 6e 69 6c | 3b 0d 09 0d 09 69 66 28 |or = nil|;....if(|
|00001360| 72 65 63 6f 72 64 49 6e | 64 65 78 20 21 3d 20 6b |recordIn|dex != k|
|00001370| 4e 69 6c 49 6e 64 65 78 | 29 0d 09 7b 0d 09 09 54 |NilIndex|)..{...T|
|00001380| 47 72 6f 75 70 43 6f 6e | 74 72 6f 6c 4f 62 6a 65 |GroupCon|trolObje|
|00001390| 63 74 2a 20 67 72 6f 75 | 70 20 3d 20 74 68 69 73 |ct* grou|p = this|
|000013a0| 2d 3e 47 65 74 47 72 6f | 75 70 43 6f 6e 74 72 6f |->GetGro|upContro|
|000013b0| 6c 4f 62 6a 65 63 74 28 | 72 65 63 6f 72 64 49 6e |lObject(|recordIn|
|000013c0| 64 65 78 29 3b 0d 09 09 | 63 75 72 73 6f 72 20 3d |dex);...|cursor =|
|000013d0| 20 67 72 6f 75 70 2d 3e | 47 65 74 52 65 63 6f 72 | group->|GetRecor|
|000013e0| 64 28 72 65 63 6f 72 64 | 49 6e 64 65 78 29 3b 0d |d(record|Index);.|
|000013f0| 09 7d 0d 09 0d 09 72 65 | 74 75 72 6e 20 63 75 72 |.}....re|turn cur|
|00001400| 73 6f 72 3b 0d 7d 20 2f | 2f 20 54 44 61 74 61 62 |sor;.} /|/ TDatab|
|00001410| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 47 65 74 |aseDocum|ent::Get|
|00001420| 52 65 63 6f 72 64 0d 0d | 2f 2f 2d 2d 2d 2d 2d 2d |Record..|//------|
|00001430| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001450| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001460| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001470| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 2f 2f 20 54 44 |--------|--.// TD|
|00001480| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|00001490| 3a 46 6c 75 73 68 43 68 | 61 6e 67 65 73 54 6f 44 |:FlushCh|angesToD|
|000014a0| 69 73 6b 0d 2f 2f 0d 2f | 2f 20 57 72 69 74 65 20 |isk.//./|/ Write |
|000014b0| 65 76 65 72 79 74 68 69 | 6e 67 20 69 6e 20 74 68 |everythi|ng in th|
|000014c0| 65 20 64 61 74 61 62 61 | 73 65 20 62 61 63 6b 20 |e databa|se back |
|000014d0| 74 6f 20 64 69 73 6b 0d | 2f 2f 2d 2d 2d 2d 2d 2d |to disk.|//------|
|000014e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000014f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001510| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001520| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 76 6f 69 64 20 |--------|--.void |
|00001530| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|00001540| 74 3a 3a 46 6c 75 73 68 | 43 68 61 6e 67 65 73 54 |t::Flush|ChangesT|
|00001550| 6f 44 69 73 6b 28 29 0d | 7b 0d 09 2f 2f 0d 09 2f |oDisk().|{..//../|
|00001560| 2f 20 57 72 69 74 65 20 | 6f 75 72 20 64 6f 63 75 |/ Write |our docu|
|00001570| 6d 65 6e 74 20 69 6e 66 | 6f 72 6d 61 74 69 6f 6e |ment inf|ormation|
|00001580| 20 62 61 63 6b 20 74 6f | 20 64 69 73 6b 0d 09 2f | back to| disk../|
|00001590| 2f 0d 09 74 68 69 73 2d | 3e 57 72 69 74 65 44 6f |/..this-|>WriteDo|
|000015a0| 63 75 6d 65 6e 74 49 6e | 66 6f 72 6d 61 74 69 6f |cumentIn|formatio|
|000015b0| 6e 28 29 3b 0d 09 0d 09 | 2f 2f 0d 09 2f 2f 20 46 |n();....|//..// F|
|000015c0| 6f 72 20 65 76 65 72 79 | 20 63 61 63 68 65 64 20 |or every| cached |
|000015d0| 67 72 6f 75 70 20 63 6f | 6e 74 72 6f 6c 20 6f 62 |group co|ntrol ob|
|000015e0| 6a 65 63 74 20 77 65 20 | 68 61 76 65 0d 09 2f 2f |ject we |have..//|
|000015f0| 20 69 6e 20 6d 65 6d 6f | 72 79 2c 20 63 61 6c 6c | in memo|ry, call|
|00001600| 20 69 74 73 20 66 6c 75 | 73 68 20 63 68 61 6e 67 | its flu|sh chang|
|00001610| 65 73 20 6d 65 74 68 6f | 64 2e 0d 09 2f 2f 0d 09 |es metho|d...//..|
|00001620| 69 66 28 66 52 65 63 6f | 72 64 47 72 6f 75 70 4c |if(fReco|rdGroupL|
|00001630| 69 73 74 20 21 3d 20 6e | 69 6c 29 0d 09 09 66 6f |ist != n|il)...fo|
|00001640| 72 28 6c 6f 6e 67 20 69 | 3d 30 3b 20 69 3c 66 4e |r(long i|=0; i<fN|
|00001650| 75 6d 62 65 72 4f 66 47 | 72 6f 75 70 73 3b 20 2b |umberOfG|roups; +|
|00001660| 2b 69 29 0d 09 09 09 69 | 66 28 66 52 65 63 6f 72 |+i)....i|f(fRecor|
|00001670| 64 47 72 6f 75 70 4c 69 | 73 74 5b 69 5d 20 21 3d |dGroupLi|st[i] !=|
|00001680| 20 6e 69 6c 29 0d 09 09 | 09 09 66 52 65 63 6f 72 | nil)...|..fRecor|
|00001690| 64 47 72 6f 75 70 4c 69 | 73 74 5b 69 5d 2d 3e 46 |dGroupLi|st[i]->F|
|000016a0| 6c 75 73 68 43 68 61 6e | 67 65 73 54 6f 44 69 73 |lushChan|gesToDis|
|000016b0| 6b 28 29 3b 0d 7d 0d 0d | 2f 2f 2d 2d 2d 2d 2d 2d |k();.}..|//------|
|000016c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001700| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 2f 2f 20 54 44 |--------|--.// TD|
|00001710| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|00001720| 3a 53 65 74 42 61 63 6b | 69 6e 67 53 74 6f 72 65 |:SetBack|ingStore|
|00001730| 0d 2f 2f 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.//-----|--------|
|00001740| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001750| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001760| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001770| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001780| 2d 2d 2d 0d 76 6f 69 64 | 20 54 44 61 74 61 62 61 |---.void| TDataba|
|00001790| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 53 65 74 42 |seDocume|nt::SetB|
|000017a0| 61 63 6b 69 6e 67 53 74 | 6f 72 65 28 54 41 62 73 |ackingSt|ore(TAbs|
|000017b0| 74 72 61 63 74 42 61 63 | 6b 69 6e 67 53 74 6f 72 |tractBac|kingStor|
|000017c0| 65 2a 20 62 61 63 6b 69 | 6e 67 53 74 6f 72 65 29 |e* backi|ngStore)|
|000017d0| 0d 7b 0d 09 54 41 62 73 | 74 72 61 63 74 42 61 63 |.{..TAbs|tractBac|
|000017e0| 6b 69 6e 67 53 74 6f 72 | 65 2a 20 70 72 65 76 69 |kingStor|e* previ|
|000017f0| 6f 75 73 42 61 63 6b 69 | 6e 67 53 74 6f 72 65 20 |ousBacki|ngStore |
|00001800| 3d 20 66 42 61 63 6b 69 | 6e 67 53 74 6f 72 65 3b |= fBacki|ngStore;|
|00001810| 0d 09 0d 09 2f 2f 0d 09 | 2f 2f 20 49 66 20 77 65 |....//..|// If we|
|00001820| 20 61 6c 72 65 61 64 79 | 20 68 61 76 65 20 61 20 | already| have a |
|00001830| 62 61 63 6b 69 6e 67 20 | 73 74 6f 72 65 2c 20 6d |backing |store, m|
|00001840| 61 6b 65 20 73 75 72 65 | 20 74 68 61 74 0d 09 2f |ake sure| that../|
|00001850| 2f 20 74 68 65 20 66 69 | 6c 65 20 69 74 20 69 73 |/ the fi|le it is|
|00001860| 20 61 74 74 61 63 68 65 | 64 20 74 6f 20 69 73 20 | attache|d to is |
|00001870| 73 61 76 65 64 20 62 65 | 66 6f 72 65 20 74 68 65 |saved be|fore the|
|00001880| 20 62 61 63 6b 69 6e 67 | 0d 09 2f 2f 20 73 74 6f | backing|..// sto|
|00001890| 72 65 20 6f 62 6a 65 63 | 74 20 69 73 20 64 65 6c |re objec|t is del|
|000018a0| 65 74 65 64 0d 09 2f 2f | 0d 09 74 68 69 73 2d 3e |eted..//|..this->|
|000018b0| 46 6c 75 73 68 43 68 61 | 6e 67 65 73 54 6f 44 69 |FlushCha|ngesToDi|
|000018c0| 73 6b 28 29 3b 0d 09 0d | 09 2f 2f 0d 09 2f 2f 20 |sk();...|.//..// |
|000018d0| 53 65 74 20 74 68 65 20 | 6e 65 77 20 62 61 63 6b |Set the |new back|
|000018e0| 69 6e 67 20 73 74 6f 72 | 65 20 6f 62 6a 65 63 74 |ing stor|e object|
|000018f0| 0d 09 2f 2f 0d 09 66 42 | 61 63 6b 69 6e 67 53 74 |..//..fB|ackingSt|
|00001900| 6f 72 65 20 3d 20 62 61 | 63 6b 69 6e 67 53 74 6f |ore = ba|ckingSto|
|00001910| 72 65 3b 0d 0d 09 2f 2f | 0d 09 2f 2f 20 42 65 67 |re;...//|..// Beg|
|00001920| 69 6e 20 62 79 20 77 72 | 69 74 69 6e 67 20 6f 75 |in by wr|iting ou|
|00001930| 74 20 74 68 65 20 64 6f | 63 75 6d 65 6e 74 20 69 |t the do|cument i|
|00001940| 6e 66 6f 72 6d 61 74 69 | 6f 6e 20 69 6e 74 6f 20 |nformati|on into |
|00001950| 74 68 65 20 6e 65 77 0d | 09 2f 2f 20 62 61 63 6b |the new.|.// back|
|00001960| 69 6e 67 20 73 74 6f 72 | 65 20 6f 62 6a 65 63 74 |ing stor|e object|
|00001970| 2e 0d 09 2f 2f 0d 09 74 | 68 69 73 2d 3e 57 72 69 |...//..t|his->Wri|
|00001980| 74 65 44 6f 63 75 6d 65 | 6e 74 49 6e 66 6f 72 6d |teDocume|ntInform|
|00001990| 61 74 69 6f 6e 28 29 3b | 0d 09 0d 09 2f 2f 0d 09 |ation();|....//..|
|000019a0| 2f 2f 20 54 68 65 72 65 | 20 6d 61 79 20 62 65 20 |// There| may be |
|000019b0| 63 68 75 6e 6b 73 20 6f | 66 20 74 68 65 20 64 61 |chunks o|f the da|
|000019c0| 74 61 62 61 73 65 20 73 | 74 69 6c 6c 20 6f 6e 20 |tabase s|till on |
|000019d0| 64 69 73 6b 20 69 6e 0d | 09 2f 2f 20 74 68 65 20 |disk in.|.// the |
|000019e0| 70 72 65 76 69 6f 75 73 | 20 62 61 63 6b 69 6e 67 |previous| backing|
|000019f0| 20 73 74 6f 72 65 20 6f | 62 6a 65 63 74 2e 20 20 | store o|bject. |
|00001a00| 57 65 20 6d 75 73 74 20 | 6c 6f 61 64 20 74 68 65 |We must |load the|
|00001a10| 6d 20 69 6e 74 6f 0d 09 | 2f 2f 20 6d 65 6d 6f 72 |m into..|// memor|
|00001a20| 79 20 61 6e 64 20 73 61 | 76 65 20 74 68 65 6d 20 |y and sa|ve them |
|00001a30| 62 61 63 6b 20 74 6f 20 | 74 68 65 20 6e 65 77 20 |back to |the new |
|00001a40| 62 61 63 6b 69 6e 67 20 | 73 74 6f 72 65 20 6f 62 |backing |store ob|
|00001a50| 6a 65 63 74 2e 0d 09 2f | 2f 0d 09 69 66 28 66 52 |ject.../|/..if(fR|
|00001a60| 65 63 6f 72 64 47 72 6f | 75 70 4c 69 73 74 20 21 |ecordGro|upList !|
|00001a70| 3d 20 6e 69 6c 29 0d 09 | 7b 0d 09 09 66 6f 72 28 |= nil)..|{...for(|
|00001a80| 6c 6f 6e 67 20 69 3d 30 | 3b 20 69 3c 66 4e 75 6d |long i=0|; i<fNum|
|00001a90| 62 65 72 4f 66 47 72 6f | 75 70 73 3b 20 2b 2b 69 |berOfGro|ups; ++i|
|00001aa0| 29 0d 09 09 7b 0d 09 09 | 09 2f 2f 0d 09 09 09 2f |)...{...|.//..../|
|00001ab0| 2f 20 49 66 20 74 68 65 | 20 72 65 63 6f 72 64 20 |/ If the| record |
|00001ac0| 67 72 6f 75 70 20 69 73 | 20 6e 6f 74 20 69 6e 20 |group is| not in |
|00001ad0| 6d 65 6d 6f 72 79 2c 20 | 74 68 65 6e 20 77 65 0d |memory, |then we.|
|00001ae0| 09 09 09 2f 2f 20 6d 75 | 73 74 20 72 65 61 64 20 |...// mu|st read |
|00001af0| 69 74 20 69 6e 20 66 72 | 6f 6d 20 74 68 65 20 70 |it in fr|om the p|
|00001b00| 72 65 76 69 6f 75 73 20 | 62 61 63 6b 69 6e 67 20 |revious |backing |
|00001b10| 73 74 6f 72 65 0d 09 09 | 09 2f 2f 20 6f 62 6a 65 |store...|.// obje|
|00001b20| 63 74 2e 0d 09 09 09 2f | 2f 0d 09 09 09 69 66 28 |ct...../|/....if(|
|00001b30| 28 66 52 65 63 6f 72 64 | 47 72 6f 75 70 4c 69 73 |(fRecord|GroupLis|
|00001b40| 74 5b 69 5d 20 3d 3d 20 | 6e 69 6c 29 20 26 26 20 |t[i] == |nil) && |
|00001b50| 28 70 72 65 76 69 6f 75 | 73 42 61 63 6b 69 6e 67 |(previou|sBacking|
|00001b60| 53 74 6f 72 65 20 21 3d | 20 6e 69 6c 29 29 0d 09 |Store !=| nil))..|
|00001b70| 09 09 7b 0d 09 09 09 09 | 54 47 72 6f 75 70 43 6f |..{.....|TGroupCo|
|00001b80| 6e 74 72 6f 6c 4f 62 6a | 65 63 74 2a 20 67 72 6f |ntrolObj|ect* gro|
|00001b90| 75 70 20 3d 20 43 72 65 | 61 74 65 47 72 6f 75 70 |up = Cre|ateGroup|
|00001ba0| 43 6f 6e 74 72 6f 6c 4f | 62 6a 65 63 74 28 69 20 |ControlO|bject(i |
|00001bb0| 2a 20 6b 52 65 63 6f 72 | 64 73 50 65 72 47 72 6f |* kRecor|dsPerGro|
|00001bc0| 75 70 29 3b 0d 09 09 09 | 09 41 53 53 45 52 54 28 |up);....|.ASSERT(|
|00001bd0| 67 72 6f 75 70 20 3d 3d | 20 66 52 65 63 6f 72 64 |group ==| fRecord|
|00001be0| 47 72 6f 75 70 4c 69 73 | 74 5b 69 5d 29 3b 0d 09 |GroupLis|t[i]);..|
|00001bf0| 09 09 09 67 72 6f 75 70 | 2d 3e 52 65 61 64 52 65 |...group|->ReadRe|
|00001c00| 63 6f 72 64 47 72 6f 75 | 70 46 72 6f 6d 44 69 73 |cordGrou|pFromDis|
|00001c10| 6b 28 70 72 65 76 69 6f | 75 73 42 61 63 6b 69 6e |k(previo|usBackin|
|00001c20| 67 53 74 6f 72 65 29 3b | 0d 09 09 09 7d 0d 09 09 |gStore);|....}...|
|00001c30| 09 2f 2f 0d 09 09 09 2f | 2f 20 49 66 20 77 65 20 |.//..../|/ If we |
|00001c40| 68 61 76 65 20 74 68 65 | 20 72 65 63 6f 72 64 20 |have the| record |
|00001c50| 67 72 6f 75 70 20 69 6e | 20 6d 65 6d 6f 72 79 2c |group in| memory,|
|00001c60| 20 74 68 65 6e 20 77 72 | 69 74 65 0d 09 09 09 2f | then wr|ite..../|
|00001c70| 2f 20 69 74 20 6f 75 74 | 20 74 6f 20 74 68 65 20 |/ it out| to the |
|00001c80| 6e 65 77 20 62 61 63 6b | 69 6e 67 20 73 74 6f 72 |new back|ing stor|
|00001c90| 65 20 6f 62 6a 65 63 74 | 2e 0d 09 09 09 2f 2f 0d |e object|.....//.|
|00001ca0| 09 09 09 69 66 28 66 52 | 65 63 6f 72 64 47 72 6f |...if(fR|ecordGro|
|00001cb0| 75 70 4c 69 73 74 5b 69 | 5d 20 21 3d 20 6e 69 6c |upList[i|] != nil|
|00001cc0| 29 0d 09 09 09 7b 0d 09 | 09 09 09 66 52 65 63 6f |)....{..|...fReco|
|00001cd0| 72 64 47 72 6f 75 70 4c | 69 73 74 5b 69 5d 2d 3e |rdGroupL|ist[i]->|
|00001ce0| 52 65 63 6f 72 64 47 72 | 6f 75 70 48 61 73 43 68 |RecordGr|oupHasCh|
|00001cf0| 61 6e 67 65 64 28 29 3b | 0d 09 09 09 09 66 52 65 |anged();|.....fRe|
|00001d00| 63 6f 72 64 47 72 6f 75 | 70 4c 69 73 74 5b 69 5d |cordGrou|pList[i]|
|00001d10| 2d 3e 46 6c 75 73 68 43 | 68 61 6e 67 65 73 54 6f |->FlushC|hangesTo|
|00001d20| 44 69 73 6b 28 29 3b 0d | 09 09 09 7d 0d 09 09 7d |Disk();.|...}...}|
|00001d30| 0d 09 7d 0d 09 0d 09 2f | 2f 0d 09 2f 2f 20 47 65 |..}..../|/..// Ge|
|00001d40| 74 20 72 69 64 20 6f 66 | 20 74 68 65 20 6f 6c 64 |t rid of| the old|
|00001d50| 20 62 61 63 6b 69 6e 67 | 20 73 74 6f 72 65 20 6f | backing| store o|
|00001d60| 62 6a 65 63 74 20 6e 6f | 77 20 74 68 61 74 20 69 |bject no|w that i|
|00001d70| 74 20 69 73 20 6e 6f 0d | 09 2f 2f 20 6c 6f 6e 67 |t is no.|.// long|
|00001d80| 65 72 20 6e 65 65 64 65 | 64 20 66 6f 72 20 61 6e |er neede|d for an|
|00001d90| 79 74 68 69 6e 67 0d 09 | 2f 2f 0d 09 64 65 6c 65 |ything..|//..dele|
|00001da0| 74 65 20 70 72 65 76 69 | 6f 75 73 42 61 63 6b 69 |te previ|ousBacki|
|00001db0| 6e 67 53 74 6f 72 65 3b | 0d 7d 20 2f 2f 20 54 44 |ngStore;|.} // TD|
|00001dc0| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|00001dd0| 3a 53 65 74 42 61 63 6b | 69 6e 67 53 74 6f 72 65 |:SetBack|ingStore|
|00001de0| 0d 0d 2f 2f 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |..//----|--------|
|00001df0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e30| 2d 2d 2d 2d 0d 2f 2f 20 | 54 44 61 74 61 62 61 73 |----.// |TDatabas|
|00001e40| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 53 61 76 65 41 |eDocumen|t::SaveA|
|00001e50| 43 6f 70 79 0d 2f 2f 2d | 2d 2d 2d 2d 2d 2d 2d 2d |Copy.//-|--------|
|00001e60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001e90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001ea0| 2d 2d 2d 2d 2d 2d 2d 0d | 76 6f 69 64 20 54 44 61 |-------.|void TDa|
|00001eb0| 74 61 62 61 73 65 44 6f | 63 75 6d 65 6e 74 3a 3a |tabaseDo|cument::|
|00001ec0| 53 61 76 65 41 43 6f 70 | 79 28 54 41 62 73 74 72 |SaveACop|y(TAbstr|
|00001ed0| 61 63 74 42 61 63 6b 69 | 6e 67 53 74 6f 72 65 2a |actBacki|ngStore*|
|00001ee0| 20 62 61 63 6b 69 6e 67 | 53 74 6f 72 65 29 0d 7b | backing|Store).{|
|00001ef0| 0d 09 2f 2f 0d 09 2f 2f | 20 49 66 20 77 65 20 61 |..//..//| If we a|
|00001f00| 6c 72 65 61 64 79 20 68 | 61 76 65 20 61 20 62 61 |lready h|ave a ba|
|00001f10| 63 6b 69 6e 67 20 73 74 | 6f 72 65 2c 20 6d 61 6b |cking st|ore, mak|
|00001f20| 65 20 73 75 72 65 20 74 | 68 61 74 0d 09 2f 2f 20 |e sure t|hat..// |
|00001f30| 74 68 65 20 66 69 6c 65 | 20 69 74 20 69 73 20 61 |the file| it is a|
|00001f40| 74 74 61 63 68 65 64 20 | 74 6f 20 69 73 20 73 61 |ttached |to is sa|
|00001f50| 76 65 64 20 62 65 66 6f | 72 65 20 77 65 0d 09 2f |ved befo|re we../|
|00001f60| 2f 20 73 61 76 65 20 61 | 20 63 6f 70 79 20 6f 66 |/ save a| copy of|
|00001f70| 20 69 74 2e 0d 09 2f 2f | 0d 09 74 68 69 73 2d 3e | it...//|..this->|
|00001f80| 46 6c 75 73 68 43 68 61 | 6e 67 65 73 54 6f 44 69 |FlushCha|ngesToDi|
|00001f90| 73 6b 28 29 3b 0d 09 09 | 0d 09 2f 2f 0d 09 2f 2f |sk();...|..//..//|
|00001fa0| 20 42 65 67 69 6e 20 62 | 79 20 77 72 69 74 69 6e | Begin b|y writin|
|00001fb0| 67 20 6f 75 74 20 74 68 | 65 20 64 6f 63 75 6d 65 |g out th|e docume|
|00001fc0| 6e 74 20 69 6e 66 6f 72 | 6d 61 74 69 6f 6e 20 69 |nt infor|mation i|
|00001fd0| 6e 74 6f 20 74 68 65 20 | 6e 65 77 0d 09 2f 2f 20 |nto the |new..// |
|00001fe0| 62 61 63 6b 69 6e 67 20 | 73 74 6f 72 65 20 6f 62 |backing |store ob|
|00001ff0| 6a 65 63 74 2e 0d 09 2f | 2f 0d 09 74 68 69 73 2d |ject.../|/..this-|
|00002000| 3e 57 72 69 74 65 44 6f | 63 75 6d 65 6e 74 49 6e |>WriteDo|cumentIn|
|00002010| 66 6f 72 6d 61 74 69 6f | 6e 28 62 61 63 6b 69 6e |formatio|n(backin|
|00002020| 67 53 74 6f 72 65 29 3b | 0d 09 0d 09 2f 2f 0d 09 |gStore);|....//..|
|00002030| 2f 2f 20 54 68 65 72 65 | 20 6d 61 79 20 62 65 20 |// There| may be |
|00002040| 63 68 75 6e 6b 73 20 6f | 66 20 74 68 65 20 64 61 |chunks o|f the da|
|00002050| 74 61 62 61 73 65 20 70 | 61 67 65 64 20 6f 75 74 |tabase p|aged out|
|00002060| 20 74 6f 20 64 69 73 6b | 3b 0d 09 2f 2f 20 57 65 | to disk|;..// We|
|00002070| 20 6d 75 73 74 20 6c 6f | 61 64 20 74 68 65 6d 20 | must lo|ad them |
|00002080| 69 6e 74 6f 20 6d 65 6d | 6f 72 79 20 61 6e 64 20 |into mem|ory and |
|00002090| 73 61 76 65 20 74 68 65 | 6d 20 62 61 63 6b 20 74 |save the|m back t|
|000020a0| 6f 20 74 68 65 0d 09 2f | 2f 20 6e 65 77 20 62 61 |o the../|/ new ba|
|000020b0| 63 6b 69 6e 67 20 73 74 | 6f 72 65 2e 0d 09 2f 2f |cking st|ore...//|
|000020c0| 0d 09 69 66 28 66 52 65 | 63 6f 72 64 47 72 6f 75 |..if(fRe|cordGrou|
|000020d0| 70 4c 69 73 74 20 21 3d | 20 6e 69 6c 29 0d 09 7b |pList !=| nil)..{|
|000020e0| 0d 09 09 66 6f 72 28 6c | 6f 6e 67 20 69 3d 30 3b |...for(l|ong i=0;|
|000020f0| 20 69 3c 66 4e 75 6d 62 | 65 72 4f 66 47 72 6f 75 | i<fNumb|erOfGrou|
|00002100| 70 73 3b 20 2b 2b 69 29 | 0d 09 09 7b 0d 09 09 09 |ps; ++i)|...{....|
|00002110| 2f 2f 0d 09 09 09 2f 2f | 20 49 66 20 74 68 65 20 |//....//| If the |
|00002120| 72 65 63 6f 72 64 20 67 | 72 6f 75 70 20 69 73 20 |record g|roup is |
|00002130| 6e 6f 74 20 69 6e 20 6d | 65 6d 6f 72 79 2c 20 74 |not in m|emory, t|
|00002140| 68 65 6e 20 77 65 0d 09 | 09 09 2f 2f 20 6d 75 73 |hen we..|..// mus|
|00002150| 74 20 72 65 61 64 20 69 | 74 20 69 6e 20 66 72 6f |t read i|t in fro|
|00002160| 6d 20 74 68 65 20 70 72 | 65 76 69 6f 75 73 20 62 |m the pr|evious b|
|00002170| 61 63 6b 69 6e 67 20 73 | 74 6f 72 65 0d 09 09 09 |acking s|tore....|
|00002180| 2f 2f 20 6f 62 6a 65 63 | 74 2e 0d 09 09 09 2f 2f |// objec|t.....//|
|00002190| 0d 09 09 09 69 66 28 66 | 52 65 63 6f 72 64 47 72 |....if(f|RecordGr|
|000021a0| 6f 75 70 4c 69 73 74 5b | 69 5d 20 3d 3d 20 6e 69 |oupList[|i] == ni|
|000021b0| 6c 29 0d 09 09 09 7b 0d | 09 09 09 09 54 47 72 6f |l)....{.|....TGro|
|000021c0| 75 70 43 6f 6e 74 72 6f | 6c 4f 62 6a 65 63 74 2a |upContro|lObject*|
|000021d0| 20 67 72 6f 75 70 20 3d | 20 43 72 65 61 74 65 47 | group =| CreateG|
|000021e0| 72 6f 75 70 43 6f 6e 74 | 72 6f 6c 4f 62 6a 65 63 |roupCont|rolObjec|
|000021f0| 74 28 69 20 2a 20 6b 52 | 65 63 6f 72 64 73 50 65 |t(i * kR|ecordsPe|
|00002200| 72 47 72 6f 75 70 29 3b | 0d 09 09 09 09 41 53 53 |rGroup);|.....ASS|
|00002210| 45 52 54 28 67 72 6f 75 | 70 20 3d 3d 20 66 52 65 |ERT(grou|p == fRe|
|00002220| 63 6f 72 64 47 72 6f 75 | 70 4c 69 73 74 5b 69 5d |cordGrou|pList[i]|
|00002230| 29 3b 0d 09 09 09 09 67 | 72 6f 75 70 2d 3e 52 65 |);.....g|roup->Re|
|00002240| 61 64 52 65 63 6f 72 64 | 47 72 6f 75 70 46 72 6f |adRecord|GroupFro|
|00002250| 6d 44 69 73 6b 28 29 3b | 0d 09 09 09 7d 0d 09 09 |mDisk();|....}...|
|00002260| 09 2f 2f 0d 09 09 09 2f | 2f 20 49 66 20 77 65 20 |.//..../|/ If we |
|00002270| 68 61 76 65 20 74 68 65 | 20 72 65 63 6f 72 64 20 |have the| record |
|00002280| 67 72 6f 75 70 20 69 6e | 20 6d 65 6d 6f 72 79 2c |group in| memory,|
|00002290| 20 74 68 65 6e 20 77 72 | 69 74 65 0d 09 09 09 2f | then wr|ite..../|
|000022a0| 2f 20 69 74 20 6f 75 74 | 20 74 6f 20 74 68 65 20 |/ it out| to the |
|000022b0| 6e 65 77 20 62 61 63 6b | 69 6e 67 20 73 74 6f 72 |new back|ing stor|
|000022c0| 65 20 6f 62 6a 65 63 74 | 2e 0d 09 09 09 2f 2f 0d |e object|.....//.|
|000022d0| 09 09 09 69 66 28 66 52 | 65 63 6f 72 64 47 72 6f |...if(fR|ecordGro|
|000022e0| 75 70 4c 69 73 74 5b 69 | 5d 20 21 3d 20 6e 69 6c |upList[i|] != nil|
|000022f0| 29 0d 09 09 09 7b 0d 09 | 09 09 09 66 52 65 63 6f |)....{..|...fReco|
|00002300| 72 64 47 72 6f 75 70 4c | 69 73 74 5b 69 5d 2d 3e |rdGroupL|ist[i]->|
|00002310| 52 65 63 6f 72 64 47 72 | 6f 75 70 48 61 73 43 68 |RecordGr|oupHasCh|
|00002320| 61 6e 67 65 64 28 29 3b | 0d 09 09 09 09 66 52 65 |anged();|.....fRe|
|00002330| 63 6f 72 64 47 72 6f 75 | 70 4c 69 73 74 5b 69 5d |cordGrou|pList[i]|
|00002340| 2d 3e 46 6c 75 73 68 43 | 68 61 6e 67 65 73 54 6f |->FlushC|hangesTo|
|00002350| 44 69 73 6b 28 62 61 63 | 6b 69 6e 67 53 74 6f 72 |Disk(bac|kingStor|
|00002360| 65 29 3b 0d 09 09 09 7d | 0d 09 09 7d 0d 09 7d 0d |e);....}|...}..}.|
|00002370| 7d 20 2f 2f 20 54 44 61 | 74 61 62 61 73 65 44 6f |} // TDa|tabaseDo|
|00002380| 63 75 6d 65 6e 74 3a 3a | 53 61 76 65 41 43 6f 70 |cument::|SaveACop|
|00002390| 79 0d 0d 2f 2f 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |y..//---|--------|
|000023a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000023b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000023c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000023d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000023e0| 2d 2d 2d 2d 2d 0d 2f 2f | 20 54 44 61 74 61 62 61 |-----.//| TDataba|
|000023f0| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 43 61 6e 53 |seDocume|nt::CanS|
|00002400| 61 76 65 44 6f 63 75 6d | 65 6e 74 0d 2f 2f 2d 2d |aveDocum|ent.//--|
|00002410| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002420| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002430| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002450| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 42 |--------|------.B|
|00002460| 6f 6f 6c 65 61 6e 20 54 | 44 61 74 61 62 61 73 65 |oolean T|Database|
|00002470| 44 6f 63 75 6d 65 6e 74 | 3a 3a 43 61 6e 53 61 76 |Document|::CanSav|
|00002480| 65 44 6f 63 75 6d 65 6e | 74 28 29 0d 7b 0d 09 42 |eDocumen|t().{..B|
|00002490| 6f 6f 6c 65 61 6e 20 63 | 61 6e 53 61 76 65 20 3d |oolean c|anSave =|
|000024a0| 20 66 61 6c 73 65 3b 0d | 09 0d 09 69 66 28 66 42 | false;.|...if(fB|
|000024b0| 61 63 6b 69 6e 67 53 74 | 6f 72 65 20 21 3d 20 6e |ackingSt|ore != n|
|000024c0| 69 6c 29 0d 09 09 63 61 | 6e 53 61 76 65 20 3d 20 |il)...ca|nSave = |
|000024d0| 66 42 61 63 6b 69 6e 67 | 53 74 6f 72 65 2d 3e 43 |fBacking|Store->C|
|000024e0| 61 6e 53 61 76 65 44 6f | 63 75 6d 65 6e 74 28 29 |anSaveDo|cument()|
|000024f0| 3b 0d 09 09 0d 09 72 65 | 74 75 72 6e 20 63 61 6e |;.....re|turn can|
|00002500| 53 61 76 65 3b 0d 7d 20 | 2f 2f 20 54 44 61 74 61 |Save;.} |// TData|
|00002510| 62 61 73 65 44 6f 63 75 | 6d 65 6e 74 3a 3a 43 61 |baseDocu|ment::Ca|
|00002520| 6e 53 61 76 65 44 6f 63 | 75 6d 65 6e 74 0d 0d 2f |nSaveDoc|ument../|
|00002530| 2f 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/-------|--------|
|00002540| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002550| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002560| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002570| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002580| 2d 0d 2f 2f 20 54 44 61 | 74 61 62 61 73 65 44 6f |-.// TDa|tabaseDo|
|00002590| 63 75 6d 65 6e 74 3a 3a | 44 6f 63 75 6d 65 6e 74 |cument::|Document|
|000025a0| 4e 61 6d 65 0d 2f 2f 2d | 2d 2d 2d 2d 2d 2d 2d 2d |Name.//-|--------|
|000025b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000025c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000025d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000025e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000025f0| 2d 2d 2d 2d 2d 2d 2d 0d | 76 6f 69 64 20 54 44 61 |-------.|void TDa|
|00002600| 74 61 62 61 73 65 44 6f | 63 75 6d 65 6e 74 3a 3a |tabaseDo|cument::|
|00002610| 44 6f 63 75 6d 65 6e 74 | 4e 61 6d 65 28 54 55 70 |Document|Name(TUp|
|00002620| 64 61 74 61 44 61 74 61 | 52 65 66 65 72 65 6e 63 |dataData|Referenc|
|00002630| 65 26 20 6e 61 6d 65 29 | 0d 7b 0d 09 69 66 28 66 |e& name)|.{..if(f|
|00002640| 42 61 63 6b 69 6e 67 53 | 74 6f 72 65 20 21 3d 20 |BackingS|tore != |
|00002650| 6e 69 6c 29 0d 09 09 66 | 42 61 63 6b 69 6e 67 53 |nil)...f|BackingS|
|00002660| 74 6f 72 65 2d 3e 44 6f | 63 75 6d 65 6e 74 4e 61 |tore->Do|cumentNa|
|00002670| 6d 65 28 6e 61 6d 65 29 | 3b 0d 09 65 6c 73 65 0d |me(name)|;..else.|
|00002680| 09 09 6e 61 6d 65 2e 53 | 65 74 44 61 74 61 4c 65 |..name.S|etDataLe|
|00002690| 6e 67 74 68 28 30 29 3b | 0d 7d 0d 0d 2f 2f 2d 2d |ngth(0);|.}..//--|
|000026a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 2f |--------|------./|
|000026f0| 2f 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |/ TDatab|aseDocum|
|00002700| 65 6e 74 3a 3a 44 6f 63 | 75 6d 65 6e 74 4e 65 65 |ent::Doc|umentNee|
|00002710| 64 73 53 61 76 65 0d 2f | 2f 2d 2d 2d 2d 2d 2d 2d |dsSave./|/-------|
|00002720| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002730| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002740| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002750| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002760| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 42 6f 6f 6c 65 61 |--------|-.Boolea|
|00002770| 6e 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |n TDatab|aseDocum|
|00002780| 65 6e 74 3a 3a 44 6f 63 | 75 6d 65 6e 74 4e 65 65 |ent::Doc|umentNee|
|00002790| 64 73 53 61 76 65 28 29 | 0d 7b 0d 09 42 6f 6f 6c |dsSave()|.{..Bool|
|000027a0| 65 61 6e 20 64 6f 63 75 | 6d 65 6e 74 49 73 44 69 |ean docu|mentIsDi|
|000027b0| 72 74 79 20 3d 20 66 61 | 6c 73 65 3b 0d 09 0d 09 |rty = fa|lse;....|
|000027c0| 2f 2f 0d 09 2f 2f 20 54 | 65 73 74 20 74 6f 20 73 |//..// T|est to s|
|000027d0| 65 65 20 69 66 20 61 6e | 79 20 6f 66 20 74 68 65 |ee if an|y of the|
|000027e0| 20 72 65 63 6f 72 64 20 | 67 72 6f 75 70 73 20 6e | record |groups n|
|000027f0| 65 65 64 0d 09 2f 2f 20 | 74 6f 20 62 65 20 73 61 |eed..// |to be sa|
|00002800| 76 65 64 2e 0d 09 2f 2f | 0d 09 69 66 28 66 52 65 |ved...//|..if(fRe|
|00002810| 63 6f 72 64 47 72 6f 75 | 70 4c 69 73 74 20 21 3d |cordGrou|pList !=|
|00002820| 20 6e 69 6c 29 0d 09 09 | 66 6f 72 28 6c 6f 6e 67 | nil)...|for(long|
|00002830| 20 69 3d 30 3b 20 69 3c | 66 4e 75 6d 62 65 72 4f | i=0; i<|fNumberO|
|00002840| 66 47 72 6f 75 70 73 3b | 20 2b 2b 69 29 0d 09 09 |fGroups;| ++i)...|
|00002850| 09 69 66 28 66 52 65 63 | 6f 72 64 47 72 6f 75 70 |.if(fRec|ordGroup|
|00002860| 4c 69 73 74 5b 69 5d 20 | 21 3d 20 6e 69 6c 29 0d |List[i] |!= nil).|
|00002870| 09 09 09 7b 0d 09 09 09 | 09 69 66 28 66 52 65 63 |...{....|.if(fRec|
|00002880| 6f 72 64 47 72 6f 75 70 | 4c 69 73 74 5b 69 5d 2d |ordGroup|List[i]-|
|00002890| 3e 52 65 63 6f 72 64 47 | 72 6f 75 70 4e 65 65 64 |>RecordG|roupNeed|
|000028a0| 73 53 61 76 65 28 29 29 | 0d 09 09 09 09 7b 0d 09 |sSave())|.....{..|
|000028b0| 09 09 09 09 64 6f 63 75 | 6d 65 6e 74 49 73 44 69 |....docu|mentIsDi|
|000028c0| 72 74 79 20 3d 20 74 72 | 75 65 3b 0d 09 09 09 09 |rty = tr|ue;.....|
|000028d0| 09 62 72 65 61 6b 3b 0d | 09 09 09 09 7d 0d 09 09 |.break;.|....}...|
|000028e0| 09 7d 0d 09 0d 09 72 65 | 74 75 72 6e 20 64 6f 63 |.}....re|turn doc|
|000028f0| 75 6d 65 6e 74 49 73 44 | 69 72 74 79 3b 0d 7d 20 |umentIsD|irty;.} |
|00002900| 2f 2f 20 54 44 61 74 61 | 62 61 73 65 44 6f 63 75 |// TData|baseDocu|
|00002910| 6d 65 6e 74 3a 3a 44 6f | 63 75 6d 65 6e 74 4e 65 |ment::Do|cumentNe|
|00002920| 65 64 73 53 61 76 65 0d | 0d 2f 2f 2d 2d 2d 2d 2d |edsSave.|.//-----|
|00002930| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002940| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002950| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002960| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002970| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 0d 2f 2f 20 54 |--------|---.// T|
|00002980| 44 61 74 61 62 61 73 65 | 44 6f 63 75 6d 65 6e 74 |Database|Document|
|00002990| 3a 3a 4d 61 6b 65 52 65 | 63 6f 72 64 0d 2f 2f 0d |::MakeRe|cord.//.|
|000029a0| 2f 2f 20 54 68 69 73 20 | 72 6f 75 74 69 6e 65 20 |// This |routine |
|000029b0| 73 68 6f 75 6c 64 20 62 | 65 20 63 61 6c 6c 65 64 |should b|e called|
|000029c0| 20 64 69 72 65 63 74 6c | 79 20 28 61 66 74 65 72 | directl|y (after|
|000029d0| 20 47 65 74 46 72 65 65 | 52 65 63 6f 72 64 20 72 | GetFree|Record r|
|000029e0| 65 74 75 72 6e 73 20 74 | 68 65 20 69 6e 64 65 78 |eturns t|he index|
|000029f0| 0d 2f 2f 20 6f 66 20 61 | 20 72 65 63 6f 72 64 20 |.// of a| record |
|00002a00| 74 6f 20 75 73 65 29 20 | 74 6f 20 63 72 65 61 74 |to use) |to creat|
|00002a10| 65 20 61 20 6e 65 77 20 | 64 61 74 61 62 61 73 65 |e a new |database|
|00002a20| 20 72 65 63 6f 72 64 2e | 20 20 41 66 74 65 72 20 | record.| After |
|00002a30| 74 68 65 20 6e 65 77 20 | 72 65 63 6f 72 64 0d 2f |the new |record./|
|00002a40| 2f 20 69 73 20 63 72 65 | 61 74 65 64 2c 20 74 68 |/ is cre|ated, th|
|00002a50| 65 20 63 72 65 61 74 6f | 72 20 73 68 6f 75 6c 64 |e creato|r should|
|00002a60| 20 69 6d 6d 65 64 69 61 | 74 65 6c 79 20 73 65 74 | immedia|tely set|
|00002a70| 20 75 70 20 74 68 65 20 | 66 6c 61 67 73 20 6c 6f | up the |flags lo|
|00002a80| 6e 67 77 6f 72 64 20 6f | 66 20 74 68 65 0d 2f 2f |ngword o|f the.//|
|00002a90| 20 6e 65 77 20 72 65 63 | 6f 72 64 2e 0d 2f 2f 0d | new rec|ord..//.|
|00002aa0| 2f 2f 20 54 68 69 73 20 | 72 6f 75 74 69 6e 65 20 |// This |routine |
|00002ab0| 69 73 20 61 6c 73 6f 20 | 63 61 6c 6c 65 64 20 66 |is also |called f|
|00002ac0| 72 6f 6d 20 54 47 72 6f | 75 70 43 6f 6e 74 72 6f |rom TGro|upContro|
|00002ad0| 6c 4f 62 6a 65 63 74 3a | 3a 47 65 74 52 65 63 6f |lObject:|:GetReco|
|00002ae0| 72 64 43 75 72 73 6f 72 | 2e 0d 2f 2f 2d 2d 2d 2d |rdCursor|..//----|
|00002af0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002b00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002b10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002b20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002b30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 54 41 62 |--------|----.TAb|
|00002b40| 73 74 72 61 63 74 52 65 | 63 6f 72 64 2a 20 54 44 |stractRe|cord* TD|
|00002b50| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|00002b60| 3a 4d 61 6b 65 52 65 63 | 6f 72 64 28 6c 6f 6e 67 |:MakeRec|ord(long|
|00002b70| 20 72 65 63 6f 72 64 49 | 6e 64 65 78 2c 20 6c 6f | recordI|ndex, lo|
|00002b80| 6e 67 20 72 65 63 6f 72 | 64 49 44 57 6f 72 64 29 |ng recor|dIDWord)|
|00002b90| 0d 7b 0d 09 54 47 72 6f | 75 70 43 6f 6e 74 72 6f |.{..TGro|upContro|
|00002ba0| 6c 4f 62 6a 65 63 74 2a | 20 67 72 6f 75 70 4f 62 |lObject*| groupOb|
|00002bb0| 6a 65 63 74 20 3d 20 74 | 68 69 73 2d 3e 47 65 74 |ject = t|his->Get|
|00002bc0| 47 72 6f 75 70 43 6f 6e | 74 72 6f 6c 4f 62 6a 65 |GroupCon|trolObje|
|00002bd0| 63 74 28 72 65 63 6f 72 | 64 49 6e 64 65 78 29 3b |ct(recor|dIndex);|
|00002be0| 0d 09 54 41 62 73 74 72 | 61 63 74 52 65 63 6f 72 |..TAbstr|actRecor|
|00002bf0| 64 2a 20 63 75 72 73 6f | 72 20 3d 20 6e 69 6c 3b |d* curso|r = nil;|
|00002c00| 0d 09 0d 09 2f 2f 0d 09 | 2f 2f 20 46 69 72 73 74 |....//..|// First|
|00002c10| 20 74 65 73 74 3a 20 20 | 69 66 20 74 68 65 20 68 | test: |if the h|
|00002c20| 69 67 68 20 74 77 6f 20 | 62 69 74 73 20 61 72 65 |igh two |bits are|
|00002c30| 20 63 6c 65 61 72 2c 20 | 74 68 69 73 20 69 73 20 | clear, |this is |
|00002c40| 61 0d 09 2f 2f 20 62 6c | 6f 63 6b 2d 64 61 74 61 |a..// bl|ock-data|
|00002c50| 20 72 65 63 6f 72 64 0d | 09 2f 2f 0d 09 69 66 28 | record.|.//..if(|
|00002c60| 28 72 65 63 6f 72 64 49 | 44 57 6f 72 64 20 26 20 |(recordI|DWord & |
|00002c70| 6b 42 61 6c 61 6e 63 65 | 46 61 63 74 6f 72 42 69 |kBalance|FactorBi|
|00002c80| 74 73 29 20 3d 3d 20 30 | 29 0d 09 7b 0d 09 09 63 |ts) == 0|)..{...c|
|00002c90| 75 72 73 6f 72 20 3d 20 | 6e 65 77 20 54 44 61 74 |ursor = |new TDat|
|00002ca0| 61 52 65 63 6f 72 64 28 | 74 68 69 73 2c 20 72 65 |aRecord(|this, re|
|00002cb0| 63 6f 72 64 49 6e 64 65 | 78 29 3b 0d 09 7d 0d 09 |cordInde|x);..}..|
|00002cc0| 65 6c 73 65 0d 09 7b 0d | 09 09 2f 2f 0d 09 09 2f |else..{.|..//.../|
|00002cd0| 2f 20 49 66 20 74 68 65 | 20 6f 62 6a 65 63 74 20 |/ If the| object |
|00002ce0| 72 65 63 6f 72 64 20 62 | 69 74 20 69 73 20 63 6c |record b|it is cl|
|00002cf0| 65 61 72 2c 20 74 68 65 | 6e 20 74 68 69 73 20 69 |ear, the|n this i|
|00002d00| 73 20 61 6e 20 6f 62 6a | 65 63 74 20 72 65 63 6f |s an obj|ect reco|
|00002d10| 72 64 0d 09 09 2f 2f 0d | 09 09 69 66 28 28 72 65 |rd...//.|..if((re|
|00002d20| 63 6f 72 64 49 44 57 6f | 72 64 20 26 20 6b 4f 62 |cordIDWo|rd & kOb|
|00002d30| 6a 65 63 74 52 65 63 6f | 72 64 44 65 66 69 6e 69 |jectReco|rdDefini|
|00002d40| 74 69 6f 6e 42 69 74 29 | 20 3d 3d 20 30 29 0d 09 |tionBit)| == 0)..|
|00002d50| 09 7b 0d 09 09 09 63 75 | 72 73 6f 72 20 3d 20 6e |.{....cu|rsor = n|
|00002d60| 65 77 20 54 44 42 45 6c | 65 6d 65 6e 74 28 74 68 |ew TDBEl|ement(th|
|00002d70| 69 73 2c 20 72 65 63 6f | 72 64 49 6e 64 65 78 29 |is, reco|rdIndex)|
|00002d80| 3b 0d 09 09 7d 0d 09 09 | 2f 2f 0d 09 09 2f 2f 20 |;...}...|//...// |
|00002d90| 49 66 20 74 68 65 20 70 | 72 6f 70 65 72 74 79 20 |If the p|roperty |
|00002da0| 72 65 63 6f 72 64 20 62 | 69 74 20 69 73 20 63 6c |record b|it is cl|
|00002db0| 65 61 72 2c 20 74 68 65 | 6e 20 74 68 69 73 20 69 |ear, the|n this i|
|00002dc0| 73 20 61 20 70 72 6f 70 | 65 72 74 79 20 72 65 63 |s a prop|erty rec|
|00002dd0| 6f 72 64 0d 09 09 2f 2f | 0d 09 09 65 6c 73 65 20 |ord...//|...else |
|00002de0| 69 66 28 28 72 65 63 6f | 72 64 49 44 57 6f 72 64 |if((reco|rdIDWord|
|00002df0| 20 26 20 6b 44 61 74 61 | 52 65 63 6f 72 64 44 65 | & kData|RecordDe|
|00002e00| 66 69 6e 69 74 69 6f 6e | 42 69 74 29 20 3d 3d 20 |finition|Bit) == |
|00002e10| 30 29 0d 09 09 7b 0d 09 | 09 09 63 75 72 73 6f 72 |0)...{..|..cursor|
|00002e20| 20 3d 20 6e 65 77 20 54 | 44 42 50 72 6f 70 65 72 | = new T|DBProper|
|00002e30| 74 79 28 74 68 69 73 2c | 20 72 65 63 6f 72 64 49 |ty(this,| recordI|
|00002e40| 6e 64 65 78 29 3b 0d 09 | 09 7d 0d 09 09 2f 2f 0d |ndex);..|.}...//.|
|00002e50| 09 09 2f 2f 20 52 65 73 | 65 72 76 65 64 20 66 6f |..// Res|erved fo|
|00002e60| 72 20 66 75 74 75 72 65 | 20 65 78 70 61 6e 73 69 |r future| expansi|
|00002e70| 6f 6e 0d 09 09 2f 2f 0d | 09 09 65 6c 73 65 0d 09 |on...//.|..else..|
|00002e80| 09 7b 0d 09 09 09 46 61 | 69 6c 45 72 72 28 65 44 |.{....Fa|ilErr(eD|
|00002e90| 61 74 61 43 6f 72 72 75 | 70 74 29 3b 0d 09 09 7d |ataCorru|pt);...}|
|00002ea0| 0d 09 7d 0d 09 0d 09 2f | 2f 0d 09 2f 2f 20 43 61 |..}..../|/..// Ca|
|00002eb0| 63 68 65 20 74 68 65 20 | 63 75 72 73 6f 72 20 69 |che the |cursor i|
|00002ec0| 66 20 69 74 20 77 61 73 | 20 63 72 65 61 74 65 64 |f it was| created|
|00002ed0| 0d 09 2f 2f 0d 09 69 66 | 28 63 75 72 73 6f 72 20 |..//..if|(cursor |
|00002ee0| 21 3d 20 6e 69 6c 29 0d | 09 09 67 72 6f 75 70 4f |!= nil).|..groupO|
|00002ef0| 62 6a 65 63 74 2d 3e 43 | 61 63 68 65 43 72 65 61 |bject->C|acheCrea|
|00002f00| 74 65 64 43 75 72 73 6f | 72 28 72 65 63 6f 72 64 |tedCurso|r(record|
|00002f10| 49 6e 64 65 78 2c 20 63 | 75 72 73 6f 72 29 3b 0d |Index, c|ursor);.|
|00002f20| 09 0d 09 72 65 74 75 72 | 6e 20 63 75 72 73 6f 72 |...retur|n cursor|
|00002f30| 3b 0d 7d 20 2f 2f 20 54 | 44 61 74 61 62 61 73 65 |;.} // T|Database|
|00002f40| 44 6f 63 75 6d 65 6e 74 | 3a 3a 4d 61 6b 65 52 65 |Document|::MakeRe|
|00002f50| 63 6f 72 64 0d 0d 2f 2f | 2d 2d 2d 2d 2d 2d 2d 2d |cord..//|--------|
|00002f60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002f70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002f80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 2f 2f 20 54 44 61 74 |--------|.// TDat|
|00002fb0| 61 62 61 73 65 44 6f 63 | 75 6d 65 6e 74 3a 3a 47 |abaseDoc|ument::G|
|00002fc0| 65 74 4e 65 78 74 46 72 | 65 65 49 6e 64 65 78 0d |etNextFr|eeIndex.|
|00002fd0| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|00002fe0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002ff0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003000| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003010| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003020| 2d 2d 0d 6c 6f 6e 67 20 | 54 44 61 74 61 62 61 73 |--.long |TDatabas|
|00003030| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 47 65 74 4e 65 |eDocumen|t::GetNe|
|00003040| 78 74 46 72 65 65 49 6e | 64 65 78 28 6c 6f 6e 67 |xtFreeIn|dex(long|
|00003050| 20 61 66 74 65 72 57 68 | 69 63 68 46 72 65 65 49 | afterWh|ichFreeI|
|00003060| 6e 64 65 78 29 20 63 6f | 6e 73 74 0d 7b 0d 09 54 |ndex) co|nst.{..T|
|00003070| 47 72 6f 75 70 43 6f 6e | 74 72 6f 6c 4f 62 6a 65 |GroupCon|trolObje|
|00003080| 63 74 2a 20 67 72 6f 75 | 70 20 3d 20 74 68 69 73 |ct* grou|p = this|
|00003090| 2d 3e 47 65 74 47 72 6f | 75 70 43 6f 6e 74 72 6f |->GetGro|upContro|
|000030a0| 6c 4f 62 6a 65 63 74 28 | 61 66 74 65 72 57 68 69 |lObject(|afterWhi|
|000030b0| 63 68 46 72 65 65 49 6e | 64 65 78 29 3b 0d 09 72 |chFreeIn|dex);..r|
|000030c0| 65 74 75 72 6e 20 67 72 | 6f 75 70 2d 3e 4e 65 78 |eturn gr|oup->Nex|
|000030d0| 74 46 72 65 65 49 6e 64 | 65 78 28 61 66 74 65 72 |tFreeInd|ex(after|
|000030e0| 57 68 69 63 68 46 72 65 | 65 49 6e 64 65 78 29 3b |WhichFre|eIndex);|
|000030f0| 0d 7d 20 2f 2f 20 54 44 | 61 74 61 62 61 73 65 44 |.} // TD|atabaseD|
|00003100| 6f 63 75 6d 65 6e 74 3a | 3a 47 65 74 4e 65 78 74 |ocument:|:GetNext|
|00003110| 46 72 65 65 49 6e 64 65 | 78 0d 0d 2f 2f 2d 2d 2d |FreeInde|x..//---|
|00003120| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003130| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003140| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003150| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003160| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 2f 2f |--------|-----.//|
|00003170| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|00003180| 6e 74 3a 3a 47 65 74 50 | 72 65 76 69 6f 75 73 46 |nt::GetP|reviousF|
|00003190| 72 65 65 49 6e 64 65 78 | 0d 2f 2f 2d 2d 2d 2d 2d |reeIndex|.//-----|
|000031a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 0d 6c 6f 6e 67 |--------|---.long|
|000031f0| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|00003200| 6e 74 3a 3a 47 65 74 50 | 72 65 76 69 6f 75 73 46 |nt::GetP|reviousF|
|00003210| 72 65 65 49 6e 64 65 78 | 28 6c 6f 6e 67 20 62 65 |reeIndex|(long be|
|00003220| 66 6f 72 65 57 68 69 63 | 68 49 6e 64 65 78 29 20 |foreWhic|hIndex) |
|00003230| 63 6f 6e 73 74 0d 7b 0d | 09 54 47 72 6f 75 70 43 |const.{.|.TGroupC|
|00003240| 6f 6e 74 72 6f 6c 4f 62 | 6a 65 63 74 2a 20 67 72 |ontrolOb|ject* gr|
|00003250| 6f 75 70 20 3d 20 74 68 | 69 73 2d 3e 47 65 74 47 |oup = th|is->GetG|
|00003260| 72 6f 75 70 43 6f 6e 74 | 72 6f 6c 4f 62 6a 65 63 |roupCont|rolObjec|
|00003270| 74 28 62 65 66 6f 72 65 | 57 68 69 63 68 49 6e 64 |t(before|WhichInd|
|00003280| 65 78 29 3b 0d 09 6c 6f | 6e 67 20 66 72 65 65 4c |ex);..lo|ng freeL|
|00003290| 69 73 74 20 3d 20 67 72 | 6f 75 70 2d 3e 46 72 65 |ist = gr|oup->Fre|
|000032a0| 65 4c 69 73 74 54 6f 55 | 73 65 28 62 65 66 6f 72 |eListToU|se(befor|
|000032b0| 65 57 68 69 63 68 49 6e | 64 65 78 29 3b 0d 09 2f |eWhichIn|dex);../|
|000032c0| 2f 0d 09 2f 2f 20 54 68 | 65 20 66 69 72 73 74 20 |/..// Th|e first |
|000032d0| 66 72 65 65 20 6c 69 73 | 74 20 64 6f 65 73 20 6e |free lis|t does n|
|000032e0| 6f 74 20 6d 61 69 6e 74 | 61 69 6e 20 61 20 70 72 |ot maint|ain a pr|
|000032f0| 65 76 69 6f 75 73 20 6c | 69 6e 6b 2e 0d 09 2f 2f |evious l|ink...//|
|00003300| 20 54 68 65 20 70 72 65 | 76 69 6f 75 73 20 6c 69 | The pre|vious li|
|00003310| 6e 6b 20 6f 66 20 74 68 | 65 20 66 69 72 73 74 20 |nk of th|e first |
|00003320| 69 74 65 6d 20 69 6e 20 | 61 6e 79 20 6c 69 73 74 |item in |any list|
|00003330| 20 6d 61 79 20 62 65 20 | 69 6e 76 61 6c 69 64 2e | may be |invalid.|
|00003340| 0d 09 2f 2f 0d 09 69 66 | 28 28 66 72 65 65 4c 69 |..//..if|((freeLi|
|00003350| 73 74 20 3d 3d 20 30 29 | 20 7c 7c 20 28 74 68 69 |st == 0)| || (thi|
|00003360| 73 2d 3e 47 65 74 46 69 | 72 73 74 46 72 65 65 49 |s->GetFi|rstFreeI|
|00003370| 6e 64 65 78 28 66 72 65 | 65 4c 69 73 74 29 20 3d |ndex(fre|eList) =|
|00003380| 3d 20 62 65 66 6f 72 65 | 57 68 69 63 68 49 6e 64 |= before|WhichInd|
|00003390| 65 78 29 29 0d 09 09 72 | 65 74 75 72 6e 20 6b 4e |ex))...r|eturn kN|
|000033a0| 69 6c 49 6e 64 65 78 3b | 0d 09 65 6c 73 65 0d 09 |ilIndex;|..else..|
|000033b0| 09 72 65 74 75 72 6e 20 | 67 72 6f 75 70 2d 3e 50 |.return |group->P|
|000033c0| 72 65 76 69 6f 75 73 46 | 72 65 65 49 6e 64 65 78 |reviousF|reeIndex|
|000033d0| 28 62 65 66 6f 72 65 57 | 68 69 63 68 49 6e 64 65 |(beforeW|hichInde|
|000033e0| 78 29 3b 0d 7d 20 2f 2f | 20 54 44 61 74 61 62 61 |x);.} //| TDataba|
|000033f0| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 47 65 74 50 |seDocume|nt::GetP|
|00003400| 72 65 76 69 6f 75 73 46 | 72 65 65 49 6e 64 65 78 |reviousF|reeIndex|
|00003410| 0d 0d 2f 2f 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |..//----|--------|
|00003420| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003430| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003450| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003460| 2d 2d 2d 2d 0d 2f 2f 20 | 54 44 61 74 61 62 61 73 |----.// |TDatabas|
|00003470| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 50 6f 70 49 6e |eDocumen|t::PopIn|
|00003480| 64 65 78 46 72 6f 6d 46 | 72 65 65 4c 69 73 74 0d |dexFromF|reeList.|
|00003490| 2f 2f 0d 2f 2f 20 54 6f | 20 6d 61 6b 65 20 61 20 |//.// To| make a |
|000034a0| 6e 65 77 20 72 65 63 6f | 72 64 2c 20 63 61 6c 6c |new reco|rd, call|
|000034b0| 20 74 68 69 73 20 72 6f | 75 74 69 6e 65 20 74 6f | this ro|utine to|
|000034c0| 20 67 65 74 20 61 6e 20 | 69 6e 64 65 78 20 6f 66 | get an |index of|
|000034d0| 20 61 20 72 65 63 6f 72 | 64 20 74 68 61 74 0d 2f | a recor|d that./|
|000034e0| 2f 20 69 73 6e 27 74 20 | 75 73 65 64 2c 20 74 68 |/ isn't |used, th|
|000034f0| 65 6e 20 63 61 6c 6c 20 | 4d 61 6b 65 52 65 63 6f |en call |MakeReco|
|00003500| 72 64 43 75 72 73 6f 72 | 20 64 69 72 65 63 74 6c |rdCursor| directl|
|00003510| 79 2c 20 70 61 73 73 69 | 6e 67 20 69 6e 20 74 68 |y, passi|ng in th|
|00003520| 65 20 69 6e 64 65 78 20 | 61 6e 64 0d 2f 2f 20 74 |e index |and.// t|
|00003530| 68 65 20 6c 6f 6e 67 77 | 6f 72 64 20 74 68 61 74 |he longw|ord that|
|00003540| 20 69 64 65 6e 74 69 66 | 69 65 73 20 74 68 65 20 | identif|ies the |
|00003550| 74 79 70 65 20 6f 66 20 | 72 65 63 6f 72 64 20 74 |type of |record t|
|00003560| 6f 20 63 72 65 61 74 65 | 2e 0d 2f 2f 2d 2d 2d 2d |o create|..//----|
|00003570| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003580| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003590| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000035a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000035b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 6c 6f 6e |--------|----.lon|
|000035c0| 67 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |g TDatab|aseDocum|
|000035d0| 65 6e 74 3a 3a 50 6f 70 | 49 6e 64 65 78 46 72 6f |ent::Pop|IndexFro|
|000035e0| 6d 46 72 65 65 4c 69 73 | 74 28 6c 6f 6e 67 20 77 |mFreeLis|t(long w|
|000035f0| 68 69 63 68 46 72 65 65 | 4c 69 73 74 29 0d 7b 0d |hichFree|List).{.|
|00003600| 09 2f 2f 0d 09 2f 2f 20 | 47 65 74 20 74 68 65 20 |.//..// |Get the |
|00003610| 66 69 72 73 74 20 66 72 | 65 65 20 69 6e 64 65 78 |first fr|ee index|
|00003620| 3b 20 69 66 20 74 68 65 | 72 65 20 61 72 65 20 6e |; if the|re are n|
|00003630| 6f 20 66 72 65 65 20 72 | 65 63 6f 72 64 73 0d 09 |o free r|ecords..|
|00003640| 2f 2f 20 6c 65 66 74 2c | 20 74 68 65 6e 20 6d 61 |// left,| then ma|
|00003650| 6b 65 20 73 6f 6d 65 20 | 6d 6f 72 65 2e 0d 09 2f |ke some |more.../|
|00003660| 2f 0d 09 6c 6f 6e 67 20 | 74 68 65 46 72 65 65 49 |/..long |theFreeI|
|00003670| 6e 64 65 78 20 3d 20 74 | 68 69 73 2d 3e 47 65 74 |ndex = t|his->Get|
|00003680| 46 69 72 73 74 46 72 65 | 65 49 6e 64 65 78 28 77 |FirstFre|eIndex(w|
|00003690| 68 69 63 68 46 72 65 65 | 4c 69 73 74 29 3b 0d 09 |hichFree|List);..|
|000036a0| 69 66 28 74 68 65 46 72 | 65 65 49 6e 64 65 78 20 |if(theFr|eeIndex |
|000036b0| 21 3d 20 6b 4e 69 6c 49 | 6e 64 65 78 29 0d 09 7b |!= kNilI|ndex)..{|
|000036c0| 0d 09 09 2f 2f 0d 09 09 | 2f 2f 20 47 65 74 20 74 |...//...|// Get t|
|000036d0| 68 65 20 6e 65 78 74 20 | 66 72 65 65 20 69 6e 64 |he next |free ind|
|000036e0| 65 78 20 69 6e 20 74 68 | 65 20 6c 69 6e 6b 65 64 |ex in th|e linked|
|000036f0| 20 6c 69 73 74 0d 09 09 | 2f 2f 0d 09 09 6c 6f 6e | list...|//...lon|
|00003700| 67 20 6e 65 78 74 46 72 | 65 65 49 6e 64 65 78 20 |g nextFr|eeIndex |
|00003710| 3d 20 74 68 69 73 2d 3e | 47 65 74 4e 65 78 74 46 |= this->|GetNextF|
|00003720| 72 65 65 49 6e 64 65 78 | 28 74 68 65 46 72 65 65 |reeIndex|(theFree|
|00003730| 49 6e 64 65 78 29 3b 0d | 09 09 74 68 69 73 2d 3e |Index);.|..this->|
|00003740| 53 65 74 46 72 65 65 49 | 6e 64 65 78 28 77 68 69 |SetFreeI|ndex(whi|
|00003750| 63 68 46 72 65 65 4c 69 | 73 74 2c 20 6e 65 78 74 |chFreeLi|st, next|
|00003760| 46 72 65 65 49 6e 64 65 | 78 29 3b 0d 0d 09 09 2f |FreeInde|x);..../|
|00003770| 2f 0d 09 09 2f 2f 20 4d | 61 72 6b 20 74 68 65 20 |/...// M|ark the |
|00003780| 66 72 65 65 20 6e 6f 64 | 65 20 61 73 20 62 65 69 |free nod|e as bei|
|00003790| 6e 67 20 75 6e 6c 69 6e | 6b 65 64 20 66 72 6f 6d |ng unlin|ked from|
|000037a0| 20 74 68 65 20 66 72 65 | 65 20 6c 69 73 74 0d 09 | the fre|e list..|
|000037b0| 09 2f 2f 0d 09 09 54 47 | 72 6f 75 70 43 6f 6e 74 |.//...TG|roupCont|
|000037c0| 72 6f 6c 4f 62 6a 65 63 | 74 2a 20 67 72 6f 75 70 |rolObjec|t* group|
|000037d0| 20 3d 20 74 68 69 73 2d | 3e 47 65 74 47 72 6f 75 | = this-|>GetGrou|
|000037e0| 70 43 6f 6e 74 72 6f 6c | 4f 62 6a 65 63 74 28 74 |pControl|Object(t|
|000037f0| 68 65 46 72 65 65 49 6e | 64 65 78 29 3b 0d 09 09 |heFreeIn|dex);...|
|00003800| 67 72 6f 75 70 2d 3e 57 | 72 69 74 65 52 65 63 6f |group->W|riteReco|
|00003810| 72 64 57 6f 72 64 28 74 | 68 65 46 72 65 65 49 6e |rdWord(t|heFreeIn|
|00003820| 64 65 78 2c 20 6b 46 72 | 65 65 4e 6f 64 65 4c 69 |dex, kFr|eeNodeLi|
|00003830| 6e 6b 42 79 74 65 2c 20 | 6b 46 72 65 65 52 65 63 |nkByte, |kFreeRec|
|00003840| 6f 72 64 4e 6f 74 4c 69 | 6e 6b 65 64 54 6f 54 72 |ordNotLi|nkedToTr|
|00003850| 65 65 29 3b 0d 09 7d 0d | 09 65 6c 73 65 0d 09 7b |ee);..}.|.else..{|
|00003860| 0d 09 09 2f 2f 0d 09 09 | 2f 2f 20 49 66 20 77 65 |...//...|// If we|
|00003870| 20 6d 61 6b 65 20 6d 6f | 72 65 20 66 72 65 65 20 | make mo|re free |
|00003880| 72 65 63 6f 72 64 73 2c | 20 61 74 20 6c 65 61 73 |records,| at leas|
|00003890| 74 20 6f 6e 65 20 6f 66 | 20 74 68 65 0d 09 09 2f |t one of| the.../|
|000038a0| 2f 20 6e 65 77 20 72 65 | 63 6f 72 64 73 20 69 73 |/ new re|cords is|
|000038b0| 20 6e 65 76 65 72 20 70 | 75 73 68 65 64 20 6f 6e | never p|ushed on|
|000038c0| 74 6f 20 74 68 65 20 66 | 72 65 65 20 6c 69 73 74 |to the f|ree list|
|000038d0| 0d 09 09 2f 2f 0d 09 09 | 74 68 65 46 72 65 65 49 |...//...|theFreeI|
|000038e0| 6e 64 65 78 20 3d 20 74 | 68 69 73 2d 3e 4d 61 6b |ndex = t|his->Mak|
|000038f0| 65 4d 6f 72 65 46 72 65 | 65 52 65 63 6f 72 64 73 |eMoreFre|eRecords|
|00003900| 28 77 68 69 63 68 46 72 | 65 65 4c 69 73 74 29 3b |(whichFr|eeList);|
|00003910| 0d 09 7d 0d 0d 09 74 68 | 69 73 2d 3e 56 65 72 69 |..}...th|is->Veri|
|00003920| 66 79 46 72 65 65 4c 69 | 73 74 73 28 29 3b 0d 09 |fyFreeLi|sts();..|
|00003930| 0d 09 72 65 74 75 72 6e | 20 74 68 65 46 72 65 65 |..return| theFree|
|00003940| 49 6e 64 65 78 3b 0d 7d | 20 2f 2f 20 54 44 61 74 |Index;.}| // TDat|
|00003950| 61 62 61 73 65 44 6f 63 | 75 6d 65 6e 74 3a 3a 50 |abaseDoc|ument::P|
|00003960| 6f 70 49 6e 64 65 78 46 | 72 6f 6d 46 72 65 65 4c |opIndexF|romFreeL|
|00003970| 69 73 74 0d 0d 2f 2f 2d | 2d 2d 2d 2d 2d 2d 2d 2d |ist..//-|--------|
|00003980| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003990| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000039a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000039b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000039c0| 2d 2d 2d 2d 2d 2d 2d 0d | 2f 2f 20 54 44 61 74 61 |-------.|// TData|
|000039d0| 62 61 73 65 44 6f 63 75 | 6d 65 6e 74 3a 3a 50 75 |baseDocu|ment::Pu|
|000039e0| 73 68 46 72 65 65 52 65 | 63 6f 72 64 4f 6e 74 6f |shFreeRe|cordOnto|
|000039f0| 46 72 65 65 4c 69 73 74 | 0d 2f 2f 2d 2d 2d 2d 2d |FreeList|.//-----|
|00003a00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003a10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003a20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003a30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003a40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 0d 76 6f 69 64 |--------|---.void|
|00003a50| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|00003a60| 6e 74 3a 3a 50 75 73 68 | 46 72 65 65 52 65 63 6f |nt::Push|FreeReco|
|00003a70| 72 64 4f 6e 74 6f 46 72 | 65 65 4c 69 73 74 28 6c |rdOntoFr|eeList(l|
|00003a80| 6f 6e 67 20 72 65 63 6f | 72 64 54 6f 46 72 65 65 |ong reco|rdToFree|
|00003a90| 29 0d 7b 0d 09 54 47 72 | 6f 75 70 43 6f 6e 74 72 |).{..TGr|oupContr|
|00003aa0| 6f 6c 4f 62 6a 65 63 74 | 2a 20 67 72 6f 75 70 20 |olObject|* group |
|00003ab0| 3d 20 74 68 69 73 2d 3e | 47 65 74 47 72 6f 75 70 |= this->|GetGroup|
|00003ac0| 43 6f 6e 74 72 6f 6c 4f | 62 6a 65 63 74 28 72 65 |ControlO|bject(re|
|00003ad0| 63 6f 72 64 54 6f 46 72 | 65 65 29 3b 0d 09 6c 6f |cordToFr|ee);..lo|
|00003ae0| 6e 67 20 77 68 69 63 68 | 46 72 65 65 4c 69 73 74 |ng which|FreeList|
|00003af0| 20 3d 20 67 72 6f 75 70 | 2d 3e 46 72 65 65 4c 69 | = group|->FreeLi|
|00003b00| 73 74 54 6f 55 73 65 28 | 72 65 63 6f 72 64 54 6f |stToUse(|recordTo|
|00003b10| 46 72 65 65 29 3b 0d 09 | 6c 6f 6e 67 20 72 65 63 |Free);..|long rec|
|00003b20| 6f 72 64 54 6f 46 72 65 | 65 41 66 74 65 72 4d 65 |ordToFre|eAfterMe|
|00003b30| 72 67 65 20 3d 20 72 65 | 63 6f 72 64 54 6f 46 72 |rge = re|cordToFr|
|00003b40| 65 65 3b 0d 09 0d 09 2f | 2f 0d 09 2f 2f 20 54 65 |ee;..../|/..// Te|
|00003b50| 73 74 20 74 6f 20 73 65 | 65 20 69 66 20 27 72 65 |st to se|e if 're|
|00003b60| 63 6f 72 64 54 6f 46 72 | 65 65 27 20 72 65 61 6c |cordToFr|ee' real|
|00003b70| 6c 79 20 69 73 20 61 20 | 66 72 65 65 20 6e 6f 64 |ly is a |free nod|
|00003b80| 65 2e 0d 09 2f 2f 20 57 | 65 20 64 6f 6e 27 74 20 |e...// W|e don't |
|00003b90| 65 6e 66 6f 72 63 65 20 | 74 68 65 20 6c 61 63 6b |enforce |the lack|
|00003ba0| 20 6f 66 20 61 20 63 75 | 72 73 6f 72 2c 20 74 68 | of a cu|rsor, th|
|00003bb0| 6f 75 67 68 2c 20 61 73 | 20 69 74 20 6d 61 79 0d |ough, as| it may.|
|00003bc0| 09 2f 2f 20 62 65 20 74 | 68 61 74 20 61 20 63 75 |.// be t|hat a cu|
|00003bd0| 72 73 6f 72 20 74 68 61 | 74 20 69 73 20 63 6f 6d |rsor tha|t is com|
|00003be0| 6d 69 74 69 6e 67 20 6f | 72 20 64 69 73 63 61 72 |miting o|r discar|
|00003bf0| 64 69 6e 67 20 63 68 61 | 6e 67 65 73 0d 09 2f 2f |ding cha|nges..//|
|00003c00| 20 68 61 73 20 63 61 6c | 6c 65 64 20 74 68 69 73 | has cal|led this|
|00003c10| 20 6d 65 74 68 6f 64 20 | 74 6f 20 70 75 73 68 20 | method |to push |
|00003c20| 74 68 65 20 72 65 63 6f | 72 64 20 62 61 63 6b 20 |the reco|rd back |
|00003c30| 6f 6e 74 6f 20 61 20 66 | 72 65 65 20 6c 69 73 74 |onto a f|ree list|
|00003c40| 2e 0d 09 2f 2f 0d 09 52 | 65 71 75 69 72 65 28 67 |...//..R|equire(g|
|00003c50| 72 6f 75 70 2d 3e 49 6e | 64 65 78 49 73 46 72 65 |roup->In|dexIsFre|
|00003c60| 65 28 72 65 63 6f 72 64 | 54 6f 46 72 65 65 29 29 |e(record|ToFree))|
|00003c70| 3b 0d 09 0d 09 2f 2f 0d | 09 2f 2f 20 54 72 79 20 |;....//.|.// Try |
|00003c80| 74 6f 20 6d 65 72 67 65 | 20 66 72 65 65 20 62 6c |to merge| free bl|
|00003c90| 6f 63 6b 73 20 74 6f 67 | 65 74 68 65 72 0d 09 2f |ocks tog|ether../|
|00003ca0| 2f 0d 09 2f 2f 20 57 65 | 20 6d 75 73 74 20 69 67 |/..// We| must ig|
|00003cb0| 6e 6f 72 65 20 66 72 65 | 65 20 62 6c 6f 63 6b 73 |nore fre|e blocks|
|00003cc0| 20 77 68 6f 73 65 20 6c | 69 6e 6b 20 77 6f 72 64 | whose l|ink word|
|00003cd0| 20 69 73 20 6b 46 72 65 | 65 52 65 63 6f 72 64 4e | is kFre|eRecordN|
|00003ce0| 6f 74 4c 69 6e 6b 65 64 | 54 6f 54 72 65 65 2c 0d |otLinked|ToTree,.|
|00003cf0| 09 2f 2f 20 62 65 63 61 | 75 73 65 20 74 68 65 73 |.// beca|use thes|
|00003d00| 65 20 62 6c 6f 63 6b 73 | 20 61 72 65 20 61 6c 72 |e blocks| are alr|
|00003d10| 65 61 64 79 20 63 6c 61 | 69 6d 65 64 20 62 79 20 |eady cla|imed by |
|00003d20| 61 20 74 72 61 6e 73 61 | 63 74 69 6f 6e 2e 20 20 |a transa|ction. |
|00003d30| 41 6c 73 6f 2c 20 6e 6f | 74 65 0d 09 2f 2f 20 74 |Also, no|te..// t|
|00003d40| 68 61 74 20 77 65 20 61 | 64 6a 75 73 74 20 27 72 |hat we a|djust 'r|
|00003d50| 65 63 6f 72 64 54 6f 46 | 72 65 65 27 20 61 6e 64 |ecordToF|ree' and|
|00003d60| 20 27 77 68 69 63 68 46 | 72 65 65 4c 69 73 74 27 | 'whichF|reeList'|
|00003d70| 20 69 66 20 61 6e 79 20 | 62 6c 6f 63 6b 73 20 61 | if any |blocks a|
|00003d80| 72 65 20 6d 65 72 67 65 | 64 2e 0d 09 2f 2f 0d 09 |re merge|d...//..|
|00003d90| 69 66 28 77 68 69 63 68 | 46 72 65 65 4c 69 73 74 |if(which|FreeList|
|00003da0| 20 3e 20 30 29 0d 09 7b | 0d 09 09 6c 6f 6e 67 20 | > 0)..{|...long |
|00003db0| 70 72 65 76 69 6f 75 73 | 52 65 63 6f 72 64 20 3d |previous|Record =|
|00003dc0| 20 67 72 6f 75 70 2d 3e | 50 72 65 76 69 6f 75 73 | group->|Previous|
|00003dd0| 52 65 63 6f 72 64 49 6e | 64 65 78 28 72 65 63 6f |RecordIn|dex(reco|
|00003de0| 72 64 54 6f 46 72 65 65 | 29 3b 0d 09 09 6c 6f 6e |rdToFree|);...lon|
|00003df0| 67 20 6e 65 78 74 52 65 | 63 6f 72 64 20 3d 20 67 |g nextRe|cord = g|
|00003e00| 72 6f 75 70 2d 3e 4e 65 | 78 74 52 65 63 6f 72 64 |roup->Ne|xtRecord|
|00003e10| 49 6e 64 65 78 28 72 65 | 63 6f 72 64 54 6f 46 72 |Index(re|cordToFr|
|00003e20| 65 65 29 3b 0d 09 09 0d | 09 09 2f 2f 0d 09 09 2f |ee);....|..//.../|
|00003e30| 2f 20 49 66 20 74 68 65 | 20 70 72 65 76 69 6f 75 |/ If the| previou|
|00003e40| 73 20 72 65 63 6f 72 64 | 20 69 73 20 66 72 65 65 |s record| is free|
|00003e50| 2c 20 6d 65 72 67 65 20 | 69 74 0d 09 09 2f 2f 0d |, merge |it...//.|
|00003e60| 09 09 69 66 28 28 70 72 | 65 76 69 6f 75 73 52 65 |..if((pr|eviousRe|
|00003e70| 63 6f 72 64 20 21 3d 20 | 6b 4e 69 6c 49 6e 64 65 |cord != |kNilInde|
|00003e80| 78 29 20 26 26 20 67 72 | 6f 75 70 2d 3e 49 6e 64 |x) && gr|oup->Ind|
|00003e90| 65 78 49 73 46 72 65 65 | 41 6e 64 4f 6e 46 72 65 |exIsFree|AndOnFre|
|00003ea0| 65 4c 69 73 74 28 70 72 | 65 76 69 6f 75 73 52 65 |eList(pr|eviousRe|
|00003eb0| 63 6f 72 64 29 29 0d 09 | 09 7b 0d 09 09 09 77 68 |cord))..|.{....wh|
|00003ec0| 69 63 68 46 72 65 65 4c | 69 73 74 20 3d 20 67 72 |ichFreeL|ist = gr|
|00003ed0| 6f 75 70 2d 3e 4d 65 72 | 67 65 46 72 65 65 42 6c |oup->Mer|geFreeBl|
|00003ee0| 6f 63 6b 73 28 70 72 65 | 76 69 6f 75 73 52 65 63 |ocks(pre|viousRec|
|00003ef0| 6f 72 64 2c 20 72 65 63 | 6f 72 64 54 6f 46 72 65 |ord, rec|ordToFre|
|00003f00| 65 29 3b 09 0d 09 09 09 | 72 65 63 6f 72 64 54 6f |e);.....|recordTo|
|00003f10| 46 72 65 65 41 66 74 65 | 72 4d 65 72 67 65 20 3d |FreeAfte|rMerge =|
|00003f20| 20 70 72 65 76 69 6f 75 | 73 52 65 63 6f 72 64 3b | previou|sRecord;|
|00003f30| 09 09 0d 09 09 09 41 53 | 53 45 52 54 28 6e 65 78 |......AS|SERT(nex|
|00003f40| 74 52 65 63 6f 72 64 20 | 3d 3d 20 67 72 6f 75 70 |tRecord |== group|
|00003f50| 2d 3e 4e 65 78 74 52 65 | 63 6f 72 64 49 6e 64 65 |->NextRe|cordInde|
|00003f60| 78 28 72 65 63 6f 72 64 | 54 6f 46 72 65 65 41 66 |x(record|ToFreeAf|
|00003f70| 74 65 72 4d 65 72 67 65 | 29 29 3b 0d 09 09 7d 0d |terMerge|));...}.|
|00003f80| 09 09 0d 09 09 2f 2f 0d | 09 09 2f 2f 20 49 66 20 |.....//.|..// If |
|00003f90| 74 68 65 20 6e 65 78 74 | 20 72 65 63 6f 72 64 20 |the next| record |
|00003fa0| 69 73 20 66 72 65 65 2c | 20 6d 65 72 67 65 20 69 |is free,| merge i|
|00003fb0| 74 0d 09 09 2f 2f 0d 09 | 09 69 66 28 28 6e 65 78 |t...//..|.if((nex|
|00003fc0| 74 52 65 63 6f 72 64 20 | 21 3d 20 6b 4e 69 6c 49 |tRecord |!= kNilI|
|00003fd0| 6e 64 65 78 29 20 26 26 | 20 67 72 6f 75 70 2d 3e |ndex) &&| group->|
|00003fe0| 49 6e 64 65 78 49 73 46 | 72 65 65 41 6e 64 4f 6e |IndexIsF|reeAndOn|
|00003ff0| 46 72 65 65 4c 69 73 74 | 28 6e 65 78 74 52 65 63 |FreeList|(nextRec|
|00004000| 6f 72 64 29 29 0d 09 09 | 7b 0d 09 09 09 77 68 69 |ord))...|{....whi|
|00004010| 63 68 46 72 65 65 4c 69 | 73 74 20 3d 20 67 72 6f |chFreeLi|st = gro|
|00004020| 75 70 2d 3e 4d 65 72 67 | 65 46 72 65 65 42 6c 6f |up->Merg|eFreeBlo|
|00004030| 63 6b 73 28 72 65 63 6f | 72 64 54 6f 46 72 65 65 |cks(reco|rdToFree|
|00004040| 41 66 74 65 72 4d 65 72 | 67 65 2c 20 6e 65 78 74 |AfterMer|ge, next|
|00004050| 52 65 63 6f 72 64 29 3b | 09 0d 09 09 7d 0d 09 7d |Record);|....}..}|
|00004060| 0d 0d 09 6c 6f 6e 67 20 | 6e 65 78 74 46 72 65 65 |...long |nextFree|
|00004070| 4e 6f 64 65 20 3d 20 74 | 68 69 73 2d 3e 47 65 74 |Node = t|his->Get|
|00004080| 46 69 72 73 74 46 72 65 | 65 49 6e 64 65 78 28 77 |FirstFre|eIndex(w|
|00004090| 68 69 63 68 46 72 65 65 | 4c 69 73 74 29 3b 0d 09 |hichFree|List);..|
|000040a0| 67 72 6f 75 70 2d 3e 57 | 72 69 74 65 52 65 63 6f |group->W|riteReco|
|000040b0| 72 64 57 6f 72 64 28 72 | 65 63 6f 72 64 54 6f 46 |rdWord(r|ecordToF|
|000040c0| 72 65 65 41 66 74 65 72 | 4d 65 72 67 65 2c 20 6b |reeAfter|Merge, k|
|000040d0| 46 72 65 65 4e 6f 64 65 | 4c 69 6e 6b 42 79 74 65 |FreeNode|LinkByte|
|000040e0| 2c 20 6e 65 78 74 46 72 | 65 65 4e 6f 64 65 29 3b |, nextFr|eeNode);|
|000040f0| 0d 09 74 68 69 73 2d 3e | 53 65 74 46 72 65 65 49 |..this->|SetFreeI|
|00004100| 6e 64 65 78 28 77 68 69 | 63 68 46 72 65 65 4c 69 |ndex(whi|chFreeLi|
|00004110| 73 74 2c 20 72 65 63 6f | 72 64 54 6f 46 72 65 65 |st, reco|rdToFree|
|00004120| 41 66 74 65 72 4d 65 72 | 67 65 29 3b 0d 0d 09 2f |AfterMer|ge);.../|
|00004130| 2f 0d 09 2f 2f 20 44 61 | 74 61 20 72 65 63 6f 72 |/..// Da|ta recor|
|00004140| 64 73 20 61 72 65 20 73 | 74 6f 72 65 64 20 69 6e |ds are s|tored in|
|00004150| 20 64 6f 75 62 6c 79 2d | 6c 69 6e 6b 65 64 20 6c | doubly-|linked l|
|00004160| 69 73 74 73 20 73 6f 20 | 74 68 65 79 20 6d 61 79 |ists so |they may|
|00004170| 0d 09 2f 2f 20 62 65 20 | 72 65 6d 6f 76 65 64 20 |..// be |removed |
|00004180| 66 72 6f 6d 20 74 68 65 | 69 72 20 66 72 65 65 20 |from the|ir free |
|00004190| 6c 69 73 74 20 77 68 65 | 6e 20 74 68 65 79 20 61 |list whe|n they a|
|000041a0| 72 65 20 6d 65 72 67 65 | 64 20 77 69 74 68 0d 09 |re merge|d with..|
|000041b0| 2f 2f 20 61 64 6a 61 63 | 65 6e 74 20 66 72 65 65 |// adjac|ent free|
|000041c0| 20 62 6c 6f 63 6b 73 20 | 28 44 42 20 72 65 63 6f | blocks |(DB reco|
|000041d0| 72 64 73 20 61 72 65 20 | 6e 65 76 65 72 20 6d 65 |rds are |never me|
|000041e0| 72 67 65 64 20 77 69 74 | 68 0d 09 2f 2f 20 61 6e |rged wit|h..// an|
|000041f0| 79 20 6f 74 68 65 72 20 | 72 65 63 6f 72 64 29 2e |y other |record).|
|00004200| 0d 09 2f 2f 0d 09 69 66 | 28 77 68 69 63 68 46 72 |..//..if|(whichFr|
|00004210| 65 65 4c 69 73 74 20 3e | 20 30 29 0d 09 7b 0d 09 |eeList >| 0)..{..|
|00004220| 09 2f 2f 0d 09 09 2f 2f | 20 4e 6f 74 65 20 74 68 |.//...//| Note th|
|00004230| 61 74 20 61 6c 74 68 6f | 75 67 68 20 77 65 20 63 |at altho|ugh we c|
|00004240| 6c 65 61 72 20 74 68 65 | 20 70 72 65 76 69 6f 75 |lear the| previou|
|00004250| 73 20 66 72 65 65 20 6e | 6f 64 65 20 6c 69 6e 6b |s free n|ode link|
|00004260| 0d 09 09 2f 2f 20 6f 66 | 20 61 20 72 65 63 6f 72 |...// of| a recor|
|00004270| 64 20 77 68 65 6e 20 77 | 65 20 70 75 73 68 20 69 |d when w|e push i|
|00004280| 74 20 6f 6e 20 74 68 65 | 20 73 74 61 63 6b 2c 20 |t on the| stack, |
|00004290| 77 65 20 64 6f 20 6e 6f | 74 20 62 6f 74 68 65 72 |we do no|t bother|
|000042a0| 0d 09 09 2f 2f 20 74 6f | 20 63 6c 65 61 6e 20 75 |...// to| clean u|
|000042b0| 70 20 74 68 65 20 70 72 | 65 76 69 6f 75 73 20 66 |p the pr|evious f|
|000042c0| 72 65 65 20 6e 6f 64 65 | 20 6c 69 6e 6b 20 77 68 |ree node| link wh|
|000042d0| 65 6e 20 6f 62 6a 65 63 | 74 73 20 61 72 65 0d 09 |en objec|ts are..|
|000042e0| 09 2f 2f 20 70 6f 70 70 | 65 64 20 6f 66 66 20 74 |.// popp|ed off t|
|000042f0| 68 65 20 73 74 61 63 6b | 20 0d 09 09 2f 2f 0d 09 |he stack| ...//..|
|00004300| 09 67 72 6f 75 70 2d 3e | 57 72 69 74 65 52 65 63 |.group->|WriteRec|
|00004310| 6f 72 64 57 6f 72 64 28 | 72 65 63 6f 72 64 54 6f |ordWord(|recordTo|
|00004320| 46 72 65 65 41 66 74 65 | 72 4d 65 72 67 65 2c 20 |FreeAfte|rMerge, |
|00004330| 6b 50 72 65 76 69 6f 75 | 73 46 72 65 65 4e 6f 64 |kPreviou|sFreeNod|
|00004340| 65 4c 69 6e 6b 42 79 74 | 65 2c 20 6b 4e 69 6c 49 |eLinkByt|e, kNilI|
|00004350| 6e 64 65 78 29 3b 0d 09 | 09 69 66 28 6e 65 78 74 |ndex);..|.if(next|
|00004360| 46 72 65 65 4e 6f 64 65 | 20 3e 20 6b 4e 69 6c 49 |FreeNode| > kNilI|
|00004370| 6e 64 65 78 29 0d 09 09 | 7b 0d 09 09 09 2f 2f 0d |ndex)...|{....//.|
|00004380| 09 09 09 2f 2f 20 57 65 | 20 6b 6e 6f 77 20 74 68 |...// We| know th|
|00004390| 61 74 20 61 6e 79 20 72 | 65 63 6f 72 64 20 69 6e |at any r|ecord in|
|000043a0| 20 61 20 66 72 65 65 20 | 6c 69 73 74 20 64 6f 65 | a free |list doe|
|000043b0| 73 20 6e 6f 74 20 62 65 | 6c 6f 6e 67 0d 09 09 09 |s not be|long....|
|000043c0| 2f 2f 20 74 6f 20 61 6e | 79 20 74 72 61 6e 73 61 |// to an|y transa|
|000043d0| 63 74 69 6f 6e 2c 20 73 | 6f 20 77 65 20 62 6c 79 |ction, s|o we bly|
|000043e0| 74 68 6c 79 20 77 72 69 | 74 65 20 74 6f 20 69 74 |thly wri|te to it|
|000043f0| 0d 09 09 09 2f 2f 0d 09 | 09 09 54 47 72 6f 75 70 |....//..|..TGroup|
|00004400| 43 6f 6e 74 72 6f 6c 4f | 62 6a 65 63 74 2a 20 67 |ControlO|bject* g|
|00004410| 72 6f 75 70 4f 66 4e 65 | 78 74 46 72 65 65 4e 6f |roupOfNe|xtFreeNo|
|00004420| 64 65 20 3d 20 74 68 69 | 73 2d 3e 47 65 74 47 72 |de = thi|s->GetGr|
|00004430| 6f 75 70 43 6f 6e 74 72 | 6f 6c 4f 62 6a 65 63 74 |oupContr|olObject|
|00004440| 28 6e 65 78 74 46 72 65 | 65 4e 6f 64 65 29 3b 0d |(nextFre|eNode);.|
|00004450| 09 09 09 67 72 6f 75 70 | 4f 66 4e 65 78 74 46 72 |...group|OfNextFr|
|00004460| 65 65 4e 6f 64 65 2d 3e | 57 72 69 74 65 52 65 63 |eeNode->|WriteRec|
|00004470| 6f 72 64 57 6f 72 64 28 | 6e 65 78 74 46 72 65 65 |ordWord(|nextFree|
|00004480| 4e 6f 64 65 2c 20 6b 50 | 72 65 76 69 6f 75 73 46 |Node, kP|reviousF|
|00004490| 72 65 65 4e 6f 64 65 4c | 69 6e 6b 42 79 74 65 2c |reeNodeL|inkByte,|
|000044a0| 20 72 65 63 6f 72 64 54 | 6f 46 72 65 65 41 66 74 | recordT|oFreeAft|
|000044b0| 65 72 4d 65 72 67 65 29 | 3b 0d 09 09 7d 0d 09 7d |erMerge)|;...}..}|
|000044c0| 0d 09 0d 09 2f 2f 0d 09 | 2f 2f 20 41 6e 79 20 63 |....//..|// Any c|
|000044d0| 61 63 68 65 64 20 63 75 | 72 73 6f 72 20 74 6f 20 |ached cu|rsor to |
|000044e0| 74 68 69 73 20 6e 6f 64 | 65 20 69 73 20 6e 6f 77 |this nod|e is now|
|000044f0| 20 75 73 65 6c 65 73 73 | 0d 09 2f 2f 0d 09 67 72 | useless|..//..gr|
|00004500| 6f 75 70 2d 3e 52 65 63 | 6f 72 64 43 75 72 73 6f |oup->Rec|ordCurso|
|00004510| 72 53 74 61 6c 65 28 72 | 65 63 6f 72 64 54 6f 46 |rStale(r|ecordToF|
|00004520| 72 65 65 29 3b 0d 09 74 | 68 69 73 2d 3e 56 65 72 |ree);..t|his->Ver|
|00004530| 69 66 79 46 72 65 65 4c | 69 73 74 73 28 29 3b 0d |ifyFreeL|ists();.|
|00004540| 7d 20 2f 2f 20 54 44 61 | 74 61 62 61 73 65 44 6f |} // TDa|tabaseDo|
|00004550| 63 75 6d 65 6e 74 3a 3a | 50 75 73 68 46 72 65 65 |cument::|PushFree|
|00004560| 52 65 63 6f 72 64 4f 6e | 74 6f 46 72 65 65 4c 69 |RecordOn|toFreeLi|
|00004570| 73 74 0d 0d 2f 2f 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |st..//--|--------|
|00004580| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004590| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000045a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000045b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000045c0| 2d 2d 2d 2d 2d 2d 0d 2f | 2f 20 54 44 61 74 61 62 |------./|/ TDatab|
|000045d0| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 52 65 6d |aseDocum|ent::Rem|
|000045e0| 6f 76 65 46 72 6f 6d 46 | 72 65 65 4c 69 73 74 0d |oveFromF|reeList.|
|000045f0| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|00004600| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004610| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004620| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004630| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004640| 2d 2d 0d 76 6f 69 64 20 | 54 44 61 74 61 62 61 73 |--.void |TDatabas|
|00004650| 65 44 6f 63 75 6d 65 6e | 74 3a 3a 52 65 6d 6f 76 |eDocumen|t::Remov|
|00004660| 65 46 72 6f 6d 46 72 65 | 65 4c 69 73 74 28 6c 6f |eFromFre|eList(lo|
|00004670| 6e 67 20 72 65 63 6f 72 | 64 54 6f 52 65 6d 6f 76 |ng recor|dToRemov|
|00004680| 65 29 0d 7b 0d 09 54 47 | 72 6f 75 70 43 6f 6e 74 |e).{..TG|roupCont|
|00004690| 72 6f 6c 4f 62 6a 65 63 | 74 2a 20 67 72 6f 75 70 |rolObjec|t* group|
|000046a0| 20 3d 20 74 68 69 73 2d | 3e 47 65 74 47 72 6f 75 | = this-|>GetGrou|
|000046b0| 70 43 6f 6e 74 72 6f 6c | 4f 62 6a 65 63 74 28 72 |pControl|Object(r|
|000046c0| 65 63 6f 72 64 54 6f 52 | 65 6d 6f 76 65 29 3b 0d |ecordToR|emove);.|
|000046d0| 0d 09 2f 2f 0d 09 2f 2f | 20 49 66 20 74 68 65 20 |..//..//| If the |
|000046e0| 72 65 63 6f 72 64 20 69 | 73 6e 27 74 20 63 75 72 |record i|sn't cur|
|000046f0| 72 65 6e 74 6c 79 20 6f | 6e 20 61 20 66 72 65 65 |rently o|n a free|
|00004700| 20 6c 69 73 74 2c 20 64 | 6f 6e 27 74 20 74 72 79 | list, d|on't try|
|00004710| 20 74 6f 20 72 65 6d 6f | 76 65 20 69 74 20 61 67 | to remo|ve it ag|
|00004720| 61 69 6e 21 0d 09 2f 2f | 0d 09 69 66 28 67 72 6f |ain!..//|..if(gro|
|00004730| 75 70 2d 3e 49 6e 64 65 | 78 49 73 46 72 65 65 41 |up->Inde|xIsFreeA|
|00004740| 6e 64 4f 6e 46 72 65 65 | 4c 69 73 74 28 72 65 63 |ndOnFree|List(rec|
|00004750| 6f 72 64 54 6f 52 65 6d | 6f 76 65 29 20 3d 3d 20 |ordToRem|ove) == |
|00004760| 74 72 75 65 29 0d 09 7b | 0d 09 09 6c 6f 6e 67 20 |true)..{|...long |
|00004770| 66 72 65 65 4c 69 73 74 | 20 3d 20 67 72 6f 75 70 |freeList| = group|
|00004780| 2d 3e 46 72 65 65 4c 69 | 73 74 54 6f 55 73 65 28 |->FreeLi|stToUse(|
|00004790| 72 65 63 6f 72 64 54 6f | 52 65 6d 6f 76 65 29 3b |recordTo|Remove);|
|000047a0| 0d 09 09 0d 09 09 2f 2f | 0d 09 09 2f 2f 20 54 68 |......//|...// Th|
|000047b0| 65 20 66 69 72 73 74 20 | 66 72 65 65 20 6c 69 73 |e first |free lis|
|000047c0| 74 20 69 73 20 73 69 6e | 67 6c 79 2d 6c 69 6e 6b |t is sin|gly-link|
|000047d0| 65 64 3b 20 77 65 20 64 | 6f 20 6e 6f 74 20 73 75 |ed; we d|o not su|
|000047e0| 70 70 6f 72 74 0d 09 09 | 2f 2f 20 72 65 6d 6f 76 |pport...|// remov|
|000047f0| 69 6e 67 20 69 74 65 6d | 73 20 66 72 6f 6d 20 69 |ing item|s from i|
|00004800| 74 2e 0d 09 09 2f 2f 0d | 09 09 52 65 71 75 69 72 |t....//.|..Requir|
|00004810| 65 28 66 72 65 65 4c 69 | 73 74 20 3e 20 30 29 3b |e(freeLi|st > 0);|
|00004820| 0d 09 0d 09 09 6c 6f 6e | 67 20 70 72 65 76 69 6f |.....lon|g previo|
|00004830| 75 73 46 72 65 65 49 6e | 64 65 78 20 3d 20 74 68 |usFreeIn|dex = th|
|00004840| 69 73 2d 3e 47 65 74 50 | 72 65 76 69 6f 75 73 46 |is->GetP|reviousF|
|00004850| 72 65 65 49 6e 64 65 78 | 28 72 65 63 6f 72 64 54 |reeIndex|(recordT|
|00004860| 6f 52 65 6d 6f 76 65 29 | 3b 0d 09 09 6c 6f 6e 67 |oRemove)|;...long|
|00004870| 20 6e 65 78 74 46 72 65 | 65 49 6e 64 65 78 20 3d | nextFre|eIndex =|
|00004880| 20 74 68 69 73 2d 3e 47 | 65 74 4e 65 78 74 46 72 | this->G|etNextFr|
|00004890| 65 65 49 6e 64 65 78 28 | 72 65 63 6f 72 64 54 6f |eeIndex(|recordTo|
|000048a0| 52 65 6d 6f 76 65 29 3b | 0d 09 09 0d 09 09 2f 2f |Remove);|......//|
|000048b0| 0d 09 09 2f 2f 20 49 66 | 20 74 68 65 72 65 20 69 |...// If| there i|
|000048c0| 73 20 61 20 6e 65 78 74 | 20 66 72 65 65 20 69 6e |s a next| free in|
|000048d0| 64 65 78 20 41 4e 44 20 | 74 68 65 72 65 20 69 73 |dex AND |there is|
|000048e0| 20 61 20 70 72 65 76 69 | 6f 75 73 20 66 72 65 65 | a previ|ous free|
|000048f0| 20 69 6e 64 65 78 2c 0d | 09 09 2f 2f 20 74 68 65 | index,.|..// the|
|00004900| 6e 20 66 69 78 20 75 70 | 20 74 68 65 20 70 72 65 |n fix up| the pre|
|00004910| 76 69 6f 75 73 20 6c 69 | 6e 6b 20 6f 66 20 74 68 |vious li|nk of th|
|00004920| 65 20 6e 65 78 74 20 69 | 6e 64 65 78 2e 20 20 57 |e next i|ndex. W|
|00004930| 65 20 64 6f 6e 27 74 20 | 62 6f 74 68 65 72 0d 09 |e don't |bother..|
|00004940| 09 2f 2f 20 74 6f 20 64 | 6f 20 74 68 69 73 20 69 |.// to d|o this i|
|00004950| 66 20 74 68 65 72 65 20 | 69 73 20 6e 6f 20 70 72 |f there |is no pr|
|00004960| 65 76 69 6f 75 73 20 69 | 6e 64 65 78 20 62 65 63 |evious i|ndex bec|
|00004970| 61 75 73 65 20 77 65 20 | 61 6c 77 61 79 73 20 61 |ause we |always a|
|00004980| 6c 6c 6f 77 0d 09 09 2f | 2f 20 74 68 65 20 70 72 |llow.../|/ the pr|
|00004990| 65 76 69 6f 75 73 20 6c | 69 6e 6b 20 6f 66 20 74 |evious l|ink of t|
|000049a0| 68 65 20 66 69 72 73 74 | 20 69 74 65 6d 20 69 6e |he first| item in|
|000049b0| 20 74 68 65 20 66 72 65 | 65 20 6c 69 73 74 20 74 | the fre|e list t|
|000049c0| 6f 20 62 65 20 67 61 72 | 62 61 67 65 2e 0d 09 09 |o be gar|bage....|
|000049d0| 2f 2f 09 0d 09 09 69 66 | 28 28 6e 65 78 74 46 72 |//....if|((nextFr|
|000049e0| 65 65 49 6e 64 65 78 20 | 21 3d 20 6b 4e 69 6c 49 |eeIndex |!= kNilI|
|000049f0| 6e 64 65 78 29 20 26 26 | 20 28 70 72 65 76 69 6f |ndex) &&| (previo|
|00004a00| 75 73 46 72 65 65 49 6e | 64 65 78 20 21 3d 20 6b |usFreeIn|dex != k|
|00004a10| 4e 69 6c 49 6e 64 65 78 | 29 29 0d 09 09 7b 0d 09 |NilIndex|))...{..|
|00004a20| 09 09 54 47 72 6f 75 70 | 43 6f 6e 74 72 6f 6c 4f |..TGroup|ControlO|
|00004a30| 62 6a 65 63 74 2a 20 67 | 72 6f 75 70 4f 66 4e 65 |bject* g|roupOfNe|
|00004a40| 78 74 46 72 65 65 4e 6f | 64 65 20 3d 20 74 68 69 |xtFreeNo|de = thi|
|00004a50| 73 2d 3e 47 65 74 47 72 | 6f 75 70 43 6f 6e 74 72 |s->GetGr|oupContr|
|00004a60| 6f 6c 4f 62 6a 65 63 74 | 28 6e 65 78 74 46 72 65 |olObject|(nextFre|
|00004a70| 65 49 6e 64 65 78 29 3b | 0d 09 09 09 67 72 6f 75 |eIndex);|....grou|
|00004a80| 70 4f 66 4e 65 78 74 46 | 72 65 65 4e 6f 64 65 2d |pOfNextF|reeNode-|
|00004a90| 3e 57 72 69 74 65 52 65 | 63 6f 72 64 57 6f 72 64 |>WriteRe|cordWord|
|00004aa0| 28 6e 65 78 74 46 72 65 | 65 49 6e 64 65 78 2c 20 |(nextFre|eIndex, |
|00004ab0| 6b 50 72 65 76 69 6f 75 | 73 46 72 65 65 4e 6f 64 |kPreviou|sFreeNod|
|00004ac0| 65 4c 69 6e 6b 42 79 74 | 65 2c 20 70 72 65 76 69 |eLinkByt|e, previ|
|00004ad0| 6f 75 73 46 72 65 65 49 | 6e 64 65 78 29 3b 0d 09 |ousFreeI|ndex);..|
|00004ae0| 09 7d 0d 09 09 0d 09 09 | 2f 2f 0d 09 09 2f 2f 20 |.}......|//...// |
|00004af0| 49 66 20 74 68 65 72 65 | 20 69 73 20 6e 6f 20 70 |If there| is no p|
|00004b00| 72 65 76 69 6f 75 73 20 | 6c 69 6e 6b 2c 20 74 68 |revious |link, th|
|00004b10| 65 6e 20 77 65 20 6e 65 | 65 64 20 74 6f 20 66 69 |en we ne|ed to fi|
|00004b20| 78 20 75 70 0d 09 09 2f | 2f 20 74 68 65 20 68 65 |x up.../|/ the he|
|00004b30| 61 64 20 6f 66 20 74 68 | 65 20 6c 69 73 74 20 70 |ad of th|e list p|
|00004b40| 6f 69 6e 74 65 72 0d 09 | 09 2f 2f 0d 09 09 69 66 |ointer..|.//...if|
|00004b50| 28 70 72 65 76 69 6f 75 | 73 46 72 65 65 49 6e 64 |(previou|sFreeInd|
|00004b60| 65 78 20 3d 3d 20 6b 4e | 69 6c 49 6e 64 65 78 29 |ex == kN|ilIndex)|
|00004b70| 0d 09 09 7b 0d 09 09 09 | 2f 2f 0d 09 09 09 2f 2f |...{....|//....//|
|00004b80| 20 57 65 20 68 61 76 65 | 20 62 6c 69 6e 64 20 66 | We have| blind f|
|00004b90| 61 69 74 68 20 74 68 61 | 74 20 70 6f 70 70 69 6e |aith tha|t poppin|
|00004ba0| 67 20 61 6e 20 69 74 65 | 6d 20 66 72 6f 6d 20 74 |g an ite|m from t|
|00004bb0| 68 65 0d 09 09 09 2f 2f | 20 66 72 65 65 20 6c 69 |he....//| free li|
|00004bc0| 73 74 20 77 69 6c 6c 20 | 64 6f 20 65 78 61 63 74 |st will |do exact|
|00004bd0| 6c 79 20 77 68 61 74 20 | 77 65 20 77 61 6e 74 20 |ly what |we want |
|00004be0| 69 74 20 74 6f 20 69 66 | 0d 09 09 09 2f 2f 20 74 |it to if|....// t|
|00004bf0| 68 65 20 66 69 72 73 74 | 20 69 74 65 6d 20 69 6e |he first| item in|
|00004c00| 20 74 68 65 20 66 72 65 | 65 20 6c 69 73 74 20 70 | the fre|e list p|
|00004c10| 6f 69 6e 74 73 20 74 6f | 20 74 68 65 0d 09 09 09 |oints to| the....|
|00004c20| 2f 2f 20 72 65 63 6f 72 | 64 20 77 65 27 64 20 6c |// recor|d we'd l|
|00004c30| 69 6b 65 20 74 6f 20 72 | 65 6d 6f 76 65 0d 09 09 |ike to r|emove...|
|00004c40| 09 2f 2f 0d 09 09 09 69 | 66 28 74 68 69 73 2d 3e |.//....i|f(this->|
|00004c50| 47 65 74 46 69 72 73 74 | 46 72 65 65 49 6e 64 65 |GetFirst|FreeInde|
|00004c60| 78 28 66 72 65 65 4c 69 | 73 74 29 20 3d 3d 20 72 |x(freeLi|st) == r|
|00004c70| 65 63 6f 72 64 54 6f 52 | 65 6d 6f 76 65 29 0d 09 |ecordToR|emove)..|
|00004c80| 09 09 7b 0d 09 09 09 09 | 74 68 69 73 2d 3e 50 6f |..{.....|this->Po|
|00004c90| 70 49 6e 64 65 78 46 72 | 6f 6d 46 72 65 65 4c 69 |pIndexFr|omFreeLi|
|00004ca0| 73 74 28 66 72 65 65 4c | 69 73 74 29 3b 0d 09 09 |st(freeL|ist);...|
|00004cb0| 09 09 41 53 53 45 52 54 | 28 74 68 69 73 2d 3e 47 |..ASSERT|(this->G|
|00004cc0| 65 74 46 69 72 73 74 46 | 72 65 65 49 6e 64 65 78 |etFirstF|reeIndex|
|00004cd0| 28 66 72 65 65 4c 69 73 | 74 29 20 3d 3d 20 6e 65 |(freeLis|t) == ne|
|00004ce0| 78 74 46 72 65 65 49 6e | 64 65 78 29 3b 0d 09 09 |xtFreeIn|dex);...|
|00004cf0| 09 7d 0d 09 09 09 65 6c | 73 65 0d 09 09 09 09 41 |.}....el|se.....A|
|00004d00| 53 53 45 52 54 28 66 61 | 6c 73 65 29 3b 0d 09 09 |SSERT(fa|lse);...|
|00004d10| 7d 0d 09 09 65 6c 73 65 | 0d 09 09 7b 0d 09 09 09 |}...else|...{....|
|00004d20| 54 47 72 6f 75 70 43 6f | 6e 74 72 6f 6c 4f 62 6a |TGroupCo|ntrolObj|
|00004d30| 65 63 74 2a 20 67 72 6f | 75 70 4f 66 50 72 65 76 |ect* gro|upOfPrev|
|00004d40| 69 6f 75 73 46 72 65 65 | 4e 6f 64 65 20 3d 20 74 |iousFree|Node = t|
|00004d50| 68 69 73 2d 3e 47 65 74 | 47 72 6f 75 70 43 6f 6e |his->Get|GroupCon|
|00004d60| 74 72 6f 6c 4f 62 6a 65 | 63 74 28 70 72 65 76 69 |trolObje|ct(previ|
|00004d70| 6f 75 73 46 72 65 65 49 | 6e 64 65 78 29 3b 0d 09 |ousFreeI|ndex);..|
|00004d80| 09 09 67 72 6f 75 70 4f | 66 50 72 65 76 69 6f 75 |..groupO|fPreviou|
|00004d90| 73 46 72 65 65 4e 6f 64 | 65 2d 3e 57 72 69 74 65 |sFreeNod|e->Write|
|00004da0| 52 65 63 6f 72 64 57 6f | 72 64 28 70 72 65 76 69 |RecordWo|rd(previ|
|00004db0| 6f 75 73 46 72 65 65 49 | 6e 64 65 78 2c 20 6b 46 |ousFreeI|ndex, kF|
|00004dc0| 72 65 65 4e 6f 64 65 4c | 69 6e 6b 42 79 74 65 2c |reeNodeL|inkByte,|
|00004dd0| 20 6e 65 78 74 46 72 65 | 65 49 6e 64 65 78 29 3b | nextFre|eIndex);|
|00004de0| 0d 09 09 7d 0d 09 7d 0d | 09 0d 09 2f 2f 0d 09 2f |...}..}.|...//../|
|00004df0| 2f 20 46 69 6e 61 6c 6c | 79 2c 20 6d 61 72 6b 20 |/ Finall|y, mark |
|00004e00| 74 68 69 73 20 6e 6f 64 | 65 20 61 73 20 62 65 69 |this nod|e as bei|
|00004e10| 6e 67 20 66 72 65 65 2c | 20 62 75 74 20 6e 6f 74 |ng free,| but not|
|00004e20| 20 6c 69 6e 6b 65 64 20 | 74 6f 0d 09 2f 2f 20 74 | linked |to..// t|
|00004e30| 68 65 20 74 72 65 65 0d | 09 2f 2f 0d 09 67 72 6f |he tree.|.//..gro|
|00004e40| 75 70 2d 3e 57 72 69 74 | 65 52 65 63 6f 72 64 57 |up->Writ|eRecordW|
|00004e50| 6f 72 64 28 72 65 63 6f | 72 64 54 6f 52 65 6d 6f |ord(reco|rdToRemo|
|00004e60| 76 65 2c 20 6b 46 72 65 | 65 4e 6f 64 65 4c 69 6e |ve, kFre|eNodeLin|
|00004e70| 6b 42 79 74 65 2c 20 6b | 46 72 65 65 52 65 63 6f |kByte, k|FreeReco|
|00004e80| 72 64 4e 6f 74 4c 69 6e | 6b 65 64 54 6f 54 72 65 |rdNotLin|kedToTre|
|00004e90| 65 29 3b 0d 7d 20 2f 2f | 20 54 44 61 74 61 62 61 |e);.} //| TDataba|
|00004ea0| 73 65 44 6f 63 75 6d 65 | 6e 74 3a 3a 52 65 6d 6f |seDocume|nt::Remo|
|00004eb0| 76 65 46 72 6f 6d 46 72 | 65 65 4c 69 73 74 0d 0d |veFromFr|eeList..|
|00004ec0| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|00004ed0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004ee0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004ef0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f10| 2d 2d 0d 2f 2f 20 54 44 | 61 74 61 62 61 73 65 44 |--.// TD|atabaseD|
|00004f20| 6f 63 75 6d 65 6e 74 3a | 3a 56 65 72 69 66 79 46 |ocument:|:VerifyF|
|00004f30| 72 65 65 4c 69 73 74 73 | 0d 2f 2f 2d 2d 2d 2d 2d |reeLists|.//-----|
|00004f40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f50| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004f80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 0d 76 6f 69 64 |--------|---.void|
|00004f90| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|00004fa0| 6e 74 3a 3a 56 65 72 69 | 66 79 46 72 65 65 4c 69 |nt::Veri|fyFreeLi|
|00004fb0| 73 74 73 28 29 20 63 6f | 6e 73 74 0d 7b 0d 09 66 |sts() co|nst.{..f|
|00004fc0| 6f 72 28 6c 6f 6e 67 20 | 77 68 69 63 68 46 72 65 |or(long |whichFre|
|00004fd0| 65 4c 69 73 74 3d 30 3b | 20 77 68 69 63 68 46 72 |eList=0;| whichFr|
|00004fe0| 65 65 4c 69 73 74 3c 3d | 6b 4c 61 73 74 44 61 74 |eeList<=|kLastDat|
|00004ff0| 61 42 6c 6f 63 6b 46 72 | 65 65 4c 69 73 74 3b 20 |aBlockFr|eeList; |
|00005000| 2b 2b 77 68 69 63 68 46 | 72 65 65 4c 69 73 74 29 |++whichF|reeList)|
|00005010| 0d 09 7b 0d 09 09 6c 6f | 6e 67 20 66 72 65 65 49 |..{...lo|ng freeI|
|00005020| 6e 64 65 78 20 3d 20 74 | 68 69 73 2d 3e 47 65 74 |ndex = t|his->Get|
|00005030| 46 69 72 73 74 46 72 65 | 65 49 6e 64 65 78 28 77 |FirstFre|eIndex(w|
|00005040| 68 69 63 68 46 72 65 65 | 4c 69 73 74 29 3b 0d 09 |hichFree|List);..|
|00005050| 09 6c 6f 6e 67 20 70 72 | 65 76 69 6f 75 73 46 72 |.long pr|eviousFr|
|00005060| 65 65 49 6e 64 65 78 20 | 3d 20 6b 4e 69 6c 49 6e |eeIndex |= kNilIn|
|00005070| 64 65 78 3b 0d 09 09 77 | 68 69 6c 65 28 66 72 65 |dex;...w|hile(fre|
|00005080| 65 49 6e 64 65 78 20 21 | 3d 20 6b 4e 69 6c 49 6e |eIndex !|= kNilIn|
|00005090| 64 65 78 29 0d 09 09 7b | 0d 09 09 09 6c 6f 6e 67 |dex)...{|....long|
|000050a0| 20 6e 65 78 74 46 72 65 | 65 49 6e 64 65 78 20 3d | nextFre|eIndex =|
|000050b0| 20 6b 4e 69 6c 49 6e 64 | 65 78 3b 0d 09 09 09 0d | kNilInd|ex;.....|
|000050c0| 09 09 09 54 47 72 6f 75 | 70 43 6f 6e 74 72 6f 6c |...TGrou|pControl|
|000050d0| 4f 62 6a 65 63 74 2a 20 | 67 72 6f 75 70 20 3d 20 |Object* |group = |
|000050e0| 74 68 69 73 2d 3e 47 65 | 74 47 72 6f 75 70 43 6f |this->Ge|tGroupCo|
|000050f0| 6e 74 72 6f 6c 4f 62 6a | 65 63 74 28 66 72 65 65 |ntrolObj|ect(free|
|00005100| 49 6e 64 65 78 29 3b 0d | 09 09 09 69 66 28 67 72 |Index);.|...if(gr|
|00005110| 6f 75 70 2d 3e 49 6e 64 | 65 78 49 73 46 72 65 65 |oup->Ind|exIsFree|
|00005120| 28 66 72 65 65 49 6e 64 | 65 78 29 20 3d 3d 20 66 |(freeInd|ex) == f|
|00005130| 61 6c 73 65 29 0d 09 09 | 09 09 44 65 62 75 67 53 |alse)...|..DebugS|
|00005140| 74 72 28 22 5c 70 4e 6f | 6e 2d 66 72 65 65 20 72 |tr("\pNo|n-free r|
|00005150| 65 63 6f 72 64 20 6f 6e | 20 74 68 65 20 66 72 65 |ecord on| the fre|
|00005160| 65 20 6c 69 73 74 21 22 | 29 3b 0d 09 09 09 69 66 |e list!"|);....if|
|00005170| 28 67 72 6f 75 70 2d 3e | 46 72 65 65 4c 69 73 74 |(group->|FreeList|
|00005180| 54 6f 55 73 65 28 66 72 | 65 65 49 6e 64 65 78 29 |ToUse(fr|eeIndex)|
|00005190| 20 21 3d 20 77 68 69 63 | 68 46 72 65 65 4c 69 73 | != whic|hFreeLis|
|000051a0| 74 29 0d 09 09 09 09 44 | 65 62 75 67 53 74 72 28 |t).....D|ebugStr(|
|000051b0| 22 5c 70 46 72 65 65 20 | 72 65 63 6f 72 64 20 69 |"\pFree |record i|
|000051c0| 73 20 77 72 6f 6e 67 20 | 73 69 7a 65 20 66 6f 72 |s wrong |size for|
|000051d0| 20 69 74 73 20 66 72 65 | 65 20 6c 69 73 74 21 22 | its fre|e list!"|
|000051e0| 29 3b 0d 09 09 09 65 6c | 73 65 0d 09 09 09 7b 0d |);....el|se....{.|
|000051f0| 09 09 09 09 2f 2f 0d 09 | 09 09 09 2f 2f 20 41 6c |....//..|...// Al|
|00005200| 6c 20 66 72 65 65 20 6c | 69 73 74 73 20 62 75 74 |l free l|ists but|
|00005210| 20 74 68 65 20 66 69 72 | 73 74 20 6d 61 69 6e 74 | the fir|st maint|
|00005220| 61 69 6e 20 70 72 65 76 | 69 6f 75 73 0d 09 09 09 |ain prev|ious....|
|00005230| 09 2f 2f 20 70 6f 69 6e | 74 65 72 73 20 66 6f 72 |.// poin|ters for|
|00005240| 20 61 20 64 6f 75 62 6c | 79 2d 6c 69 6e 6b 65 64 | a doubl|y-linked|
|00005250| 20 6c 69 73 74 2e 20 20 | 54 68 65 20 66 69 72 73 | list. |The firs|
|00005260| 74 0d 09 09 09 09 2f 2f | 20 69 74 65 6d 20 69 6e |t.....//| item in|
|00005270| 20 74 68 65 20 6c 69 73 | 74 20 6d 61 79 20 68 61 | the lis|t may ha|
|00005280| 76 65 20 61 20 62 6f 67 | 75 73 20 70 72 65 76 69 |ve a bog|us previ|
|00005290| 6f 75 73 20 6c 69 6e 6b | 2c 0d 09 09 09 09 2f 2f |ous link|,.....//|
|000052a0| 20 62 65 63 61 75 73 65 | 20 77 65 20 64 6f 20 6e | because| we do n|
|000052b0| 6f 74 20 66 69 78 20 69 | 74 20 75 70 20 77 68 65 |ot fix i|t up whe|
|000052c0| 6e 20 77 65 20 70 6f 70 | 20 69 74 65 6d 73 2e 0d |n we pop| items..|
|000052d0| 09 09 09 09 2f 2f 0d 09 | 09 09 09 69 66 28 28 77 |....//..|...if((w|
|000052e0| 68 69 63 68 46 72 65 65 | 4c 69 73 74 20 3e 20 30 |hichFree|List > 0|
|000052f0| 29 20 26 26 20 28 70 72 | 65 76 69 6f 75 73 46 72 |) && (pr|eviousFr|
|00005300| 65 65 49 6e 64 65 78 20 | 21 3d 20 6b 4e 69 6c 49 |eeIndex |!= kNilI|
|00005310| 6e 64 65 78 29 29 0d 09 | 09 09 09 7b 0d 09 09 09 |ndex))..|...{....|
|00005320| 09 09 69 66 28 74 68 69 | 73 2d 3e 47 65 74 50 72 |..if(thi|s->GetPr|
|00005330| 65 76 69 6f 75 73 46 72 | 65 65 49 6e 64 65 78 28 |eviousFr|eeIndex(|
|00005340| 66 72 65 65 49 6e 64 65 | 78 29 20 21 3d 20 70 72 |freeInde|x) != pr|
|00005350| 65 76 69 6f 75 73 46 72 | 65 65 49 6e 64 65 78 29 |eviousFr|eeIndex)|
|00005360| 0d 09 09 09 09 09 09 44 | 65 62 75 67 53 74 72 28 |.......D|ebugStr(|
|00005370| 22 5c 70 50 72 65 76 69 | 6f 75 73 20 66 72 65 65 |"\pPrevi|ous free|
|00005380| 20 69 6e 64 65 78 20 6c | 69 6e 6b 20 69 6e 20 66 | index l|ink in f|
|00005390| 72 65 65 20 6c 69 73 74 | 20 64 6f 65 73 6e 27 74 |ree list| doesn't|
|000053a0| 20 70 6f 69 6e 74 20 62 | 61 63 6b 22 29 3b 0d 09 | point b|ack");..|
|000053b0| 09 09 09 7d 0d 09 09 09 | 09 0d 09 09 09 09 6e 65 |...}....|......ne|
|000053c0| 78 74 46 72 65 65 49 6e | 64 65 78 20 3d 20 74 68 |xtFreeIn|dex = th|
|000053d0| 69 73 2d 3e 47 65 74 4e | 65 78 74 46 72 65 65 49 |is->GetN|extFreeI|
|000053e0| 6e 64 65 78 28 66 72 65 | 65 49 6e 64 65 78 29 3b |ndex(fre|eIndex);|
|000053f0| 0d 09 09 09 7d 0d 0d 09 | 09 09 70 72 65 76 69 6f |....}...|..previo|
|00005400| 75 73 46 72 65 65 49 6e | 64 65 78 20 3d 20 66 72 |usFreeIn|dex = fr|
|00005410| 65 65 49 6e 64 65 78 3b | 0d 09 09 09 66 72 65 65 |eeIndex;|....free|
|00005420| 49 6e 64 65 78 20 3d 20 | 6e 65 78 74 46 72 65 65 |Index = |nextFree|
|00005430| 49 6e 64 65 78 3b 09 09 | 09 0d 09 09 7d 0d 09 7d |Index;..|....}..}|
|00005440| 0d 7d 20 2f 2f 20 54 44 | 61 74 61 62 61 73 65 44 |.} // TD|atabaseD|
|00005450| 6f 63 75 6d 65 6e 74 3a | 3a 56 65 72 69 66 79 46 |ocument:|:VerifyF|
|00005460| 72 65 65 4c 69 73 74 73 | 0d 0d 2f 2f 2d 2d 2d 2d |reeLists|..//----|
|00005470| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005480| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005490| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000054a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000054b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 2f 2f 20 |--------|----.// |
|000054c0| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|000054d0| 74 3a 3a 4e 65 77 44 42 | 50 72 6f 70 65 72 74 79 |t::NewDB|Property|
|000054e0| 0d 2f 2f 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.//-----|--------|
|000054f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005510| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005520| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005530| 2d 2d 2d 0d 41 6e 55 70 | 64 61 74 65 3c 54 44 42 |---.AnUp|date<TDB|
|00005540| 50 72 6f 70 65 72 74 79 | 3e 20 54 44 61 74 61 62 |Property|> TDatab|
|00005550| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 4e 65 77 |aseDocum|ent::New|
|00005560| 44 42 50 72 6f 70 65 72 | 74 79 28 54 54 72 61 6e |DBProper|ty(TTran|
|00005570| 73 61 63 74 69 6f 6e 2a | 20 74 72 61 6e 73 61 63 |saction*| transac|
|00005580| 74 69 6f 6e 29 0d 7b 0d | 09 41 6e 55 70 64 61 74 |tion).{.|.AnUpdat|
|00005590| 65 3c 54 44 42 50 72 6f | 70 65 72 74 79 3e 20 64 |e<TDBPro|perty> d|
|000055a0| 61 74 61 55 70 64 61 74 | 65 50 6f 69 6e 74 65 72 |ataUpdat|ePointer|
|000055b0| 3b 0d 09 52 45 51 55 49 | 52 45 56 41 4c 49 44 50 |;..REQUI|REVALIDP|
|000055c0| 4f 49 4e 54 45 52 28 74 | 72 61 6e 73 61 63 74 69 |OINTER(t|ransacti|
|000055d0| 6f 6e 29 3b 0d 09 4f 53 | 45 72 72 20 65 72 72 20 |on);..OS|Err err |
|000055e0| 3d 20 6e 6f 45 72 72 3b | 0d 09 0d 09 6c 6f 6e 67 |= noErr;|....long|
|000055f0| 20 66 72 65 65 49 6e 64 | 65 78 20 3d 20 74 68 69 | freeInd|ex = thi|
|00005600| 73 2d 3e 50 6f 70 49 6e | 64 65 78 46 72 6f 6d 46 |s->PopIn|dexFromF|
|00005610| 72 65 65 4c 69 73 74 28 | 6b 46 72 65 65 52 65 63 |reeList(|kFreeRec|
|00005620| 6f 72 64 4c 69 73 74 49 | 6e 64 65 78 29 3b 0d 09 |ordListI|ndex);..|
|00005630| 54 72 79 0d 09 7b 0d 09 | 09 41 43 6f 6e 73 74 3c |Try..{..|.AConst<|
|00005640| 54 44 42 50 72 6f 70 65 | 72 74 79 3e 20 64 61 74 |TDBPrope|rty> dat|
|00005650| 61 43 75 72 73 6f 72 28 | 74 68 69 73 2d 3e 4d 61 |aCursor(|this->Ma|
|00005660| 6b 65 52 65 63 6f 72 64 | 28 66 72 65 65 49 6e 64 |keRecord|(freeInd|
|00005670| 65 78 2c 20 6b 49 6e 69 | 74 69 61 6c 44 61 74 61 |ex, kIni|tialData|
|00005680| 52 65 63 6f 72 64 46 6c | 61 67 73 29 2d 3e 44 42 |RecordFl|ags)->DB|
|00005690| 50 72 6f 70 65 72 74 79 | 43 75 72 73 6f 72 28 29 |Property|Cursor()|
|000056a0| 29 3b 0d 09 09 64 61 74 | 61 55 70 64 61 74 65 50 |);...dat|aUpdateP|
|000056b0| 6f 69 6e 74 65 72 20 3d | 20 74 72 61 6e 73 61 63 |ointer =| transac|
|000056c0| 74 69 6f 6e 2d 3e 47 65 | 74 44 42 50 72 6f 70 65 |tion->Ge|tDBPrope|
|000056d0| 72 74 79 55 70 64 61 74 | 65 50 6f 69 6e 74 65 72 |rtyUpdat|ePointer|
|000056e0| 28 64 61 74 61 43 75 72 | 73 6f 72 29 3b 0d 09 09 |(dataCur|sor);...|
|000056f0| 64 61 74 61 55 70 64 61 | 74 65 50 6f 69 6e 74 65 |dataUpda|tePointe|
|00005700| 72 2d 3e 49 6e 69 74 69 | 61 6c 69 7a 65 4e 65 77 |r->Initi|alizeNew|
|00005710| 52 65 63 6f 72 64 28 74 | 72 61 6e 73 61 63 74 69 |Record(t|ransacti|
|00005720| 6f 6e 29 3b 0d 09 7d 0d | 09 43 61 74 63 68 28 65 |on);..}.|.Catch(e|
|00005730| 72 72 29 0d 09 7b 0d 09 | 09 2f 2f 0d 09 09 2f 2f |rr)..{..|.//...//|
|00005740| 20 50 75 73 68 20 66 72 | 65 65 20 69 6e 64 65 78 | Push fr|ee index|
|00005750| 20 62 61 63 6b 20 6f 6e | 74 6f 20 61 20 66 72 65 | back on|to a fre|
|00005760| 65 20 6c 69 73 74 0d 09 | 09 2f 2f 0d 09 09 54 68 |e list..|.//...Th|
|00005770| 72 6f 77 28 65 72 72 29 | 3b 0d 09 7d 0d 0d 09 72 |row(err)|;..}...r|
|00005780| 65 74 75 72 6e 20 64 61 | 74 61 55 70 64 61 74 65 |eturn da|taUpdate|
|00005790| 50 6f 69 6e 74 65 72 3b | 0d 7d 20 2f 2f 20 54 44 |Pointer;|.} // TD|
|000057a0| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|000057b0| 3a 4e 65 77 44 42 50 72 | 6f 70 65 72 74 79 0d 0d |:NewDBPr|operty..|
|000057c0| 2f 2f 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |//------|--------|
|000057d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000057e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000057f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005800| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005810| 2d 2d 0d 2f 2f 20 54 44 | 61 74 61 62 61 73 65 44 |--.// TD|atabaseD|
|00005820| 6f 63 75 6d 65 6e 74 3a | 3a 4e 65 77 44 42 45 6c |ocument:|:NewDBEl|
|00005830| 65 6d 65 6e 74 0d 2f 2f | 2d 2d 2d 2d 2d 2d 2d 2d |ement.//|--------|
|00005840| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005850| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005880| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 41 6e 55 70 64 61 74 |--------|.AnUpdat|
|00005890| 65 3c 54 44 42 45 6c 65 | 6d 65 6e 74 3e 20 54 44 |e<TDBEle|ment> TD|
|000058a0| 61 74 61 62 61 73 65 44 | 6f 63 75 6d 65 6e 74 3a |atabaseD|ocument:|
|000058b0| 3a 4e 65 77 44 42 45 6c | 65 6d 65 6e 74 28 54 54 |:NewDBEl|ement(TT|
|000058c0| 72 61 6e 73 61 63 74 69 | 6f 6e 2a 20 74 72 61 6e |ransacti|on* tran|
|000058d0| 73 61 63 74 69 6f 6e 29 | 0d 7b 0d 09 41 6e 55 70 |saction)|.{..AnUp|
|000058e0| 64 61 74 65 3c 54 44 42 | 45 6c 65 6d 65 6e 74 3e |date<TDB|Element>|
|000058f0| 20 65 6c 65 6d 65 6e 74 | 55 70 64 61 74 65 50 74 | element|UpdatePt|
|00005900| 72 3b 0d 09 52 45 51 55 | 49 52 45 56 41 4c 49 44 |r;..REQU|IREVALID|
|00005910| 50 4f 49 4e 54 45 52 28 | 74 72 61 6e 73 61 63 74 |POINTER(|transact|
|00005920| 69 6f 6e 29 3b 0d 09 4f | 53 45 72 72 20 65 72 72 |ion);..O|SErr err|
|00005930| 20 3d 20 6e 6f 45 72 72 | 3b 0d 09 0d 09 6c 6f 6e | = noErr|;....lon|
|00005940| 67 20 66 72 65 65 49 6e | 64 65 78 20 3d 20 74 68 |g freeIn|dex = th|
|00005950| 69 73 2d 3e 50 6f 70 49 | 6e 64 65 78 46 72 6f 6d |is->PopI|ndexFrom|
|00005960| 46 72 65 65 4c 69 73 74 | 28 6b 46 72 65 65 52 65 |FreeList|(kFreeRe|
|00005970| 63 6f 72 64 4c 69 73 74 | 49 6e 64 65 78 29 3b 0d |cordList|Index);.|
|00005980| 09 54 72 79 0d 09 7b 0d | 09 09 41 43 6f 6e 73 74 |.Try..{.|..AConst|
|00005990| 3c 54 44 42 45 6c 65 6d | 65 6e 74 3e 20 6f 62 6a |<TDBElem|ent> obj|
|000059a0| 65 63 74 43 75 72 73 6f | 72 28 74 68 69 73 2d 3e |ectCurso|r(this->|
|000059b0| 4d 61 6b 65 52 65 63 6f | 72 64 28 66 72 65 65 49 |MakeReco|rd(freeI|
|000059c0| 6e 64 65 78 2c 20 6b 49 | 6e 69 74 69 61 6c 4f 62 |ndex, kI|nitialOb|
|000059d0| 6a 65 63 74 52 65 63 6f | 72 64 46 6c 61 67 73 29 |jectReco|rdFlags)|
|000059e0| 2d 3e 44 42 45 6c 65 6d | 65 6e 74 43 75 72 73 6f |->DBElem|entCurso|
|000059f0| 72 28 29 29 3b 09 0d 09 | 09 65 6c 65 6d 65 6e 74 |r());...|.element|
|00005a00| 55 70 64 61 74 65 50 74 | 72 20 3d 20 74 72 61 6e |UpdatePt|r = tran|
|00005a10| 73 61 63 74 69 6f 6e 2d | 3e 47 65 74 44 42 45 6c |saction-|>GetDBEl|
|00005a20| 65 6d 65 6e 74 55 70 64 | 61 74 65 50 6f 69 6e 74 |ementUpd|atePoint|
|00005a30| 65 72 28 6f 62 6a 65 63 | 74 43 75 72 73 6f 72 29 |er(objec|tCursor)|
|00005a40| 3b 0d 09 09 65 6c 65 6d | 65 6e 74 55 70 64 61 74 |;...elem|entUpdat|
|00005a50| 65 50 74 72 2d 3e 49 6e | 69 74 69 61 6c 69 7a 65 |ePtr->In|itialize|
|00005a60| 4e 65 77 52 65 63 6f 72 | 64 28 74 72 61 6e 73 61 |NewRecor|d(transa|
|00005a70| 63 74 69 6f 6e 29 3b 0d | 09 7d 0d 09 43 61 74 63 |ction);.|.}..Catc|
|00005a80| 68 28 65 72 72 29 0d 09 | 7b 0d 09 09 2f 2f 0d 09 |h(err)..|{...//..|
|00005a90| 09 2f 2f 20 50 75 73 68 | 20 66 72 65 65 20 69 6e |.// Push| free in|
|00005aa0| 64 65 78 20 62 61 63 6b | 20 6f 6e 74 6f 20 61 20 |dex back| onto a |
|00005ab0| 66 72 65 65 20 6c 69 73 | 74 0d 09 09 2f 2f 0d 09 |free lis|t...//..|
|00005ac0| 09 54 68 72 6f 77 28 65 | 72 72 29 3b 0d 09 7d 0d |.Throw(e|rr);..}.|
|00005ad0| 0d 09 72 65 74 75 72 6e | 20 65 6c 65 6d 65 6e 74 |..return| element|
|00005ae0| 55 70 64 61 74 65 50 74 | 72 3b 0d 7d 20 2f 2f 20 |UpdatePt|r;.} // |
|00005af0| 54 44 61 74 61 62 61 73 | 65 44 6f 63 75 6d 65 6e |TDatabas|eDocumen|
|00005b00| 74 3a 3a 4e 65 77 44 42 | 45 6c 65 6d 65 6e 74 0d |t::NewDB|Element.|
|00005b10| 0d 2f 2f 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.//-----|--------|
|00005b20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005b30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005b40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005b50| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005b60| 2d 2d 2d 0d 2f 2f 20 54 | 44 61 74 61 62 61 73 65 |---.// T|Database|
|00005b70| 44 6f 63 75 6d 65 6e 74 | 3a 3a 4e 65 77 44 61 74 |Document|::NewDat|
|00005b80| 61 52 65 63 6f 72 64 0d | 2f 2f 2d 2d 2d 2d 2d 2d |aRecord.|//------|
|00005b90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005ba0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005bb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005bc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005bd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 41 6e 55 70 64 |--------|--.AnUpd|
|00005be0| 61 74 65 3c 54 44 61 74 | 61 52 65 63 6f 72 64 3e |ate<TDat|aRecord>|
|00005bf0| 20 54 44 61 74 61 62 61 | 73 65 44 6f 63 75 6d 65 | TDataba|seDocume|
|00005c00| 6e 74 3a 3a 4e 65 77 44 | 61 74 61 52 65 63 6f 72 |nt::NewD|ataRecor|
|00005c10| 64 28 54 54 72 61 6e 73 | 61 63 74 69 6f 6e 2a 20 |d(TTrans|action* |
|00005c20| 74 72 61 6e 73 61 63 74 | 69 6f 6e 2c 20 6c 6f 6e |transact|ion, lon|
|00005c30| 67 20 73 69 7a 65 4f 66 | 44 61 74 61 29 0d 7b 0d |g sizeOf|Data).{.|
|00005c40| 09 41 6e 55 70 64 61 74 | 65 3c 54 44 61 74 61 52 |.AnUpdat|e<TDataR|
|00005c50| 65 63 6f 72 64 3e 20 64 | 61 74 61 55 70 64 61 74 |ecord> d|ataUpdat|
|00005c60| 65 50 74 72 3b 0d 09 52 | 45 51 55 49 52 45 56 41 |ePtr;..R|EQUIREVA|
|00005c70| 4c 49 44 50 4f 49 4e 54 | 45 52 28 74 72 61 6e 73 |LIDPOINT|ER(trans|
|00005c80| 61 63 74 69 6f 6e 29 3b | 0d 09 4f 53 45 72 72 20 |action);|..OSErr |
|00005c90| 65 72 72 20 3d 20 6e 6f | 45 72 72 3b 0d 09 0d 09 |err = no|Err;....|
|00005ca0| 2f 2f 0d 09 2f 2f 20 50 | 69 63 6b 20 61 20 66 72 |//..// P|ick a fr|
|00005cb0| 65 65 20 6c 69 73 74 20 | 74 68 61 74 27 73 20 74 |ee list |that's t|
|00005cc0| 68 65 20 63 6f 72 72 65 | 63 74 20 73 69 7a 65 20 |he corre|ct size |
|00005cd0| 66 6f 72 20 74 68 65 20 | 61 6d 6f 75 6e 74 20 6f |for the |amount o|
|00005ce0| 66 0d 09 2f 2f 20 64 61 | 74 61 20 72 65 71 75 65 |f..// da|ta reque|
|00005cf0| 73 74 65 64 2e 20 20 44 | 6f 6e 27 74 20 66 6f 72 |sted. D|on't for|
|00005d00| 67 65 74 20 61 62 6f 75 | 74 20 74 68 65 20 62 6c |get abou|t the bl|
|00005d10| 6f 63 6b 20 68 65 61 64 | 65 72 2c 20 65 69 74 68 |ock head|er, eith|
|00005d20| 65 72 2e 0d 09 2f 2f 0d | 09 6c 6f 6e 67 20 73 69 |er...//.|.long si|
|00005d30| 7a 65 4f 66 42 6c 6f 63 | 6b 20 3d 20 73 69 7a 65 |zeOfBloc|k = size|
|00005d40| 4f 66 44 61 74 61 20 2b | 20 6b 48 65 61 64 65 72 |OfData +| kHeader|
|00005d50| 53 69 7a 65 3b 0d 09 6c | 6f 6e 67 20 77 68 69 63 |Size;..l|ong whic|
|00005d60| 68 46 72 65 65 4c 69 73 | 74 20 3d 20 28 73 69 7a |hFreeLis|t = (siz|
|00005d70| 65 4f 66 42 6c 6f 63 6b | 20 2d 20 31 29 20 2f 20 |eOfBlock| - 1) / |
|00005d80| 28 6b 53 69 6e 67 6c 65 | 52 65 63 6f 72 64 53 69 |(kSingle|RecordSi|
|00005d90| 7a 65 29 3b 0d 09 52 65 | 71 75 69 72 65 28 77 68 |ze);..Re|quire(wh|
|00005da0| 69 63 68 46 72 65 65 4c | 69 73 74 20 3c 3d 20 6b |ichFreeL|ist <= k|
|00005db0| 4c 61 73 74 44 61 74 61 | 42 6c 6f 63 6b 46 72 65 |LastData|BlockFre|
|00005dc0| 65 4c 69 73 74 29 3b 0d | 09 6c 6f 6e 67 20 66 72 |eList);.|.long fr|
|00005dd0| 65 65 49 6e 64 65 78 20 | 3d 20 74 68 69 73 2d 3e |eeIndex |= this->|
|00005de0| 50 6f 70 49 6e 64 65 78 | 46 72 6f 6d 46 72 65 65 |PopIndex|FromFree|
|00005df0| 4c 69 73 74 28 77 68 69 | 63 68 46 72 65 65 4c 69 |List(whi|chFreeLi|
|00005e00| 73 74 29 3b 0d 09 54 72 | 79 0d 09 7b 0d 09 09 41 |st);..Tr|y..{...A|
|00005e10| 43 6f 6e 73 74 3c 54 44 | 61 74 61 52 65 63 6f 72 |Const<TD|ataRecor|
|00005e20| 64 3e 20 64 61 74 61 43 | 75 72 73 6f 72 28 74 68 |d> dataC|ursor(th|
|00005e30| 69 73 2d 3e 4d 61 6b 65 | 52 65 63 6f 72 64 28 66 |is->Make|Record(f|
|00005e40| 72 65 65 49 6e 64 65 78 | 2c 20 6b 49 6e 69 74 69 |reeIndex|, kIniti|
|00005e50| 61 6c 44 61 74 61 42 6c | 6f 63 6b 46 6c 61 67 73 |alDataBl|ockFlags|
|00005e60| 57 6f 72 64 29 2d 3e 44 | 61 74 61 43 75 72 73 6f |Word)->D|ataCurso|
|00005e70| 72 28 29 29 3b 0d 09 09 | 64 61 74 61 55 70 64 61 |r());...|dataUpda|
|00005e80| 74 65 50 74 72 20 3d 20 | 74 72 61 6e 73 61 63 74 |tePtr = |transact|
|00005e90| 69 6f 6e 2d 3e 47 65 74 | 44 61 74 61 52 65 63 6f |ion->Get|DataReco|
|00005ea0| 72 64 55 70 64 61 74 65 | 50 6f 69 6e 74 65 72 28 |rdUpdate|Pointer(|
|00005eb0| 64 61 74 61 43 75 72 73 | 6f 72 29 3b 0d 09 09 64 |dataCurs|or);...d|
|00005ec0| 61 74 61 55 70 64 61 74 | 65 50 74 72 2d 3e 49 6e |ataUpdat|ePtr->In|
|00005ed0| 69 74 69 61 6c 69 7a 65 | 4e 65 77 44 61 74 61 52 |itialize|NewDataR|
|00005ee0| 65 63 6f 72 64 28 74 72 | 61 6e 73 61 63 74 69 6f |ecord(tr|ansactio|
|00005ef0| 6e 29 3b 0d 09 7d 0d 09 | 43 61 74 63 68 28 65 72 |n);..}..|Catch(er|
|00005f00| 72 29 0d 09 7b 0d 09 09 | 2f 2f 0d 09 09 2f 2f 20 |r)..{...|//...// |
|00005f10| 50 75 73 68 20 66 72 65 | 65 20 69 6e 64 65 78 20 |Push fre|e index |
|00005f20| 62 61 63 6b 20 6f 6e 74 | 6f 20 61 20 66 72 65 65 |back ont|o a free|
|00005f30| 20 6c 69 73 74 0d 09 09 | 2f 2f 0d 09 09 54 68 72 | list...|//...Thr|
|00005f40| 6f 77 28 65 72 72 29 3b | 0d 09 7d 0d 09 0d 09 72 |ow(err);|..}....r|
|00005f50| 65 74 75 72 6e 20 64 61 | 74 61 55 70 64 61 74 65 |eturn da|taUpdate|
|00005f60| 50 74 72 3b 0d 7d 20 2f | 2f 20 54 44 61 74 61 62 |Ptr;.} /|/ TDatab|
|00005f70| 61 73 65 44 6f 63 75 6d | 65 6e 74 3a 3a 4e 65 77 |aseDocum|ent::New|
|00005f80| 44 61 74 61 52 65 63 6f | 72 64 0d 0d 2f 2f 2d 2d |DataReco|rd..//--|
|00005f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005fb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005fc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005fd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 2f |--------|------./|
|00005fe0| 2f 20 54 44 61 74 61 62 | 61 73 65 44 6f 63 75 6d |/ TDatab|aseDocum|
|00005ff0| 65 6e 74 3a 3a 47 65 74 | 47 72 6f 75 70 43 6f 6e |ent::Get|GroupCon|
|00006000| 74 72 6f 6c 4f 62 6a 65 | 63 74 0d 2f 2f 2d 2d 2d |trolObje|ct.//---|
|00006010| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00006020| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00006030| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00006040| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00006050| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 54 47 |--------|-----.TG|
|00006060| 72 6f 75 70 43 6f 6e 74 | 72 6f 6c 4f 62 6a 65 63 |roupCont|rolObjec|
|00006070| 74 2a 20 54 44 61 74 61 | 62 61 73 65 44 6f 63 75 |t* TData|baseDocu|
|00006080| 6d 65 6e 74 3a 3a 47 65 | 74 47 72 6f 75 70 43 6f |ment::Ge|tGroupCo|
|00006090| 6e 74 72 6f 6c 4f 62 6a | 65 63 74 28 6c 6f 6e 67 |ntrolObj|ect(long|
|000060a0| 20 72 65 63 6f 72 64 49 | 6e 64 65 78 29 20 63 6f | recordI|ndex) co|
|000060b0| 6e 73 74 0d 7b 0d 09 6c | 6f 6e 67 20 77 68 69 63 |nst.{..l|ong whic|
|000060c0| 68 47 72 6f 75 70 43 6f | 6e 74 72 6f 6c 4f 62 6a |hGroupCo|ntrolObj|
|000060d0| 65 63 74 20 3d 20 72 65 | 63 6f 72 64 49 6e 64 65 |ect = re|cordInde|
|000060e0| 78 20 2f 20 6b 52 65 63 | 6f 72 64 73 50 65 72 47 |x / kRec|ordsPerG|
|000060f0| 72 6f 75 70 3b 0d 09 0d | 09 69 66 28 28 77 68 69 |roup;...|.if((whi|
|00006100| 63 68 47 72 6f 75 70 43 | 6f 6e 74 72 6f 6c 4f 62 |chGroupC|ontrolOb|
|00006110| 6a 65 63 74 20 3c 20 30 | 29 20 7c 7c 20 28 77 68 |ject < 0|) || (wh|
|00006120| 69 63 68 47 72 6f 75 70 | 43 6f 6e 74 72 6f 6c 4f |ichGroup|ControlO|
|00006130| 62 6a 65 63 74 20 3e 3d | 20 66 4e 75 6d 62 65 72 |bject >=| fNumber|
|00006140| 4f 66 47 72 6f 75 70 73 | 29 29 0d 09 09 54 68 72 |OfGroups|))...Thr|
|00006150| 6f 77 28 65 49 6e 64 65 | 78 4f 75 74 4f 66 52 61 |ow(eInde|xOutOfRa|
|00006160| 6e 67 65 29 3b 0d 09 0d | 09 2f 2f 0d 09 2f 2f 20 |nge);...|.//..// |
|00006170| 54 68 65 20 67 72 6f 75 | 70 20 63 6f 6e 74 72 6f |The grou|p contro|
|00006180| 6c 20 6f 62 6a 65 63 74 | 20 6d 61 79 20 62 65 20 |l object| may be |
|00006190| 70 75 72 67 65 64 20 6f | 72 20 75 6e 6c 6f 61 64 |purged o|r unload|
|000061a0| 65 64 2c 0d 09 2f 2f 20 | 69 6e 20 77 68 69 63 68 |ed,..// |in which|
|000061b0| 20 63 61 73 65 20 66 52 | 65 63 6f 72 64 47 72 6f | case fR|ecordGro|
|000061c0| 75 70 4c 69 73 74 5b 77 | 68 69 63 68 47 72 6f 75 |upList[w|hichGrou|
|000061d0| 70 43 6f 6e 74 72 6f 6c | 4f 62 6a 65 63 74 5d 0d |pControl|Object].|
|000061e0| 09 2f 2f 20 77 69 6c 6c | 20 62 65 20 6e 69 6c 2e |.// will| be nil.|
|000061f0| 20 20 57 65 20 6e 65 65 | 64 20 74 6f 20 74 65 73 | We nee|d to tes|
|00006200| 74 20 66 6f 72 20 74 68 | 69 73 20 73 69 74 75 61 |t for th|is situa|
|00006210| 74 69 6f 6e 20 61 6e 64 | 0d 09 2f 2f 20 72 65 63 |tion and|..// rec|
|00006220| 72 65 61 74 65 20 74 68 | 65 20 67 72 6f 75 70 20 |reate th|e group |
|00006230| 63 6f 6e 74 72 6f 6c 20 | 6f 62 6a 65 63 74 20 61 |control |object a|
|00006240| 6e 64 20 72 65 6c 6f 61 | 64 20 69 74 73 20 64 61 |nd reloa|d its da|
|00006250| 74 61 0d 09 2f 2f 20 66 | 72 6f 6d 20 64 69 73 6b |ta..// f|rom disk|
|00006260| 2e 0d 09 2f 2f 0d 09 69 | 66 28 66 52 65 63 6f 72 |...//..i|f(fRecor|
|00006270| 64 47 72 6f 75 70 4c 69 | 73 74 5b 77 68 69 63 68 |dGroupLi|st[which|
|00006280| 47 72 6f 75 70 43 6f 6e | 74 72 6f 6c 4f 62 6a 65 |GroupCon|trolObje|
|00006290| 63 74 5d 20 3d 3d 20 6e | 69 6c 29 0d 09 7b 0d 09 |ct] == n|il)..{..|
|000062a0| 09 6c 6f 6e 67 20 66 69 | 72 73 74 52 65 63 6f 72 |.long fi|rstRecor|
|000062b0| 64 20 3d 20 77 68 69 63 | 68 47 72 6f 75 70 43 6f |d = whic|hGroupCo|
|000062c0| 6e 74 72 6f 6c 4f 62 6a | 65 63 74 20 2a 20 6b 52 |ntrolObj|ect * kR|
|000062d0| 65 63 6f 72 64 73 50 65 | 72 47 72 6f 75 70 3b 0d |ecordsPe|rGroup;.|
|000062e0| 09 09 28 28 54 44 61 74 | 61 62 61 73 65 44 6f 63 |..((TDat|abaseDoc|
|000062f0| 75 6d 65 6e 74 2a 29 74 | 68 69 73 29 2d 3e 43 72 |ument*)t|his)->Cr|
|00006300| 65 61 74 65 47 72 6f 75 | 70 43 6f 6e 74 72 6f 6c |eateGrou|pControl|
|00006310| 4f 62 6a 65 63 74 28 66 | 69 72 73 74 52 65 63 6f |Object(f|irstReco|
|00006320| 72 64 29 3b 0d 09 7d 0d | 09 52 65 71 75 69 72 65 |rd);..}.|.Require|
|00006330| 28 66 52 65 63 6f 72 64 | 47 72 6f 75 70 4c 69 73 |(fRecord|GroupLis|
|00006340| 74 5b 77 68 69 63 68 47 | 72 6f 75 70 43 6f 6e 74 |t[whichG|roupCont|
|00006350| 72 6f 6c 4f 62 6a 65 63 | 74 5d 20 21 3d 20 6e 69 |rolObjec|t] != ni|
|00006360| 6c 29 3b 0d 0d 09 72 65 | 74 75 72 6e 20 66 52 65 |l);...re|turn fRe|
|00006370| 63 6f 72 64 47 72 6f 75 | 70 4c 69 73 74 5b 77 68 |cordGrou|pList[wh|
|00006380| 69 63 68 47 72 6f 75 70 | 43 6f 6e 74 72 6f 6c 4f |ichGroup|ControlO|
|00006390| 62 6a 65 63 74 5d 3b 0d | 7d 20 2f 2f 20 54 44 61 |bject];.|} // TDa|
|000063a0| 74 61 62 61 73 65 44 6f | 63 75 6d 65 6e 74 3a 3a |tabaseDo|cument::|
|000063b0| 47 65 74 47 72 6f 75 70 | 43 6f 6e 74 72 6f 6c 4f |GetGroup|ControlO|
|000063c0| 62 6a 65 63 74 0d 0d 2f | 2f 2d 2d 2d 2d 2d 2d 2d |bject../|/-------|
|000063d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000063e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000063f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.