* more memory leaks fixed. Fpdoc is now memsafe except for the fcl-passrc bits

git-svn-id: trunk@13807 -
This commit is contained in:
marco 2009-10-05 21:10:47 +00:00
parent 8438ec58f7
commit 04247a4840

View File

@ -67,6 +67,7 @@ type
FWriteStream: TStream;
FBlockStream: TMemoryStream;
ParentNode: TFIftiNode;
OwnsParentNode : boolean;
function AdjustedWord(AWord: String; out AOffset: Byte; AOldWord: String): String;
procedure ChildIsFull(AWord: String; ANodeOffset: DWord); virtual; abstract;
function GuessIfCanHold(AWord: String): Boolean; virtual; abstract;
@ -91,6 +92,7 @@ type
public
procedure WriteToStream;
constructor Create(AStream: TStream; AWordList: TIndexedWordList);
destructor Destroy; override;
end;
{ TChmSearchReader }
@ -259,6 +261,7 @@ begin
FActiveLeafNode.Flush(False); // causes the unwritten parts of the tree to be written
end;
procedure TChmSearchWriter.WriteHeader ( IsPlaceHolder: Boolean ) ;
var
TmpNode: TFIftiNode;
@ -344,6 +347,7 @@ begin
end;
procedure TChmSearchWriter.WriteAWord ( AWord: TIndexedWord ) ;
begin
if FActiveLeafNode = nil then
begin
@ -363,7 +367,6 @@ begin
TLeafNode(FActiveLeafNode).AddWord(AWord);
end;
procedure TChmSearchWriter.WriteToStream;
begin
WriteHeader(True);
@ -376,9 +379,16 @@ constructor TChmSearchWriter.Create ( AStream: TStream;
begin
FStream := AStream;
FWordList := AWordList;
FActiveLeafNode:=NIL;
end;
destructor TChmSearchWriter.Destroy;
begin
freeandnil(FActiveLeafNode);
end;
{ TLeafNode }
function TFIftiNode.RemainingSpace: DWord;
@ -391,11 +401,13 @@ begin
inherited Create;
FWriteStream := AStream;
FBlockStream := TMemoryStream.Create;
OwnsParentNode :=false;
end;
destructor TFIftiNode.Destroy;
begin
FBlockStream.Free;
if OwnsParentNode then ParentNode.Free;
inherited Destroy;
end;
@ -486,8 +498,10 @@ begin
if NewBlockNeeded or ((NewBlockNeeded = False) and (ParentNode <> nil)) then
begin
if ParentNode = nil then
ParentNode := TIndexNode.Create(FWriteStream);
begin
ParentNode := TIndexNode.Create(FWriteStream);
OwnsParentNode:=True;
end;
ParentNode.ChildIsFull(FLastWord, FLastNodeStart);
if (NewBlockNeeded = False) then
ParentNode.Flush(False);
@ -675,7 +689,10 @@ begin
if NewBlockNeeded then
begin
if ParentNode = nil then
ParentNode := TIndexNode.Create(FWriteStream);
begin
ParentNode := TIndexNode.Create(FWriteStream);
OwnsParentNode:=True;
end;
end;
if ParentNode <> nil then