From e12aef3665f441b59ff52880d9c33367211c4ef2 Mon Sep 17 00:00:00 2001 From: paul Date: Sat, 21 Nov 2009 18:27:37 +0000 Subject: compiler: speedup tdynamicarray.read, tdynamicarray.write git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@14244 3ad0048d-3df7-0310-abae-a5850022a9f2 --- compiler/cclasses.pas | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) (limited to 'compiler/cclasses.pas') diff --git a/compiler/cclasses.pas b/compiler/cclasses.pas index e9c3322e33..e700de8c7b 100644 --- a/compiler/cclasses.pas +++ b/compiler/cclasses.pas @@ -2498,18 +2498,19 @@ end; begin p:=pchar(@d); while (len>0) do + with FPosnblock^ do begin - i:=FPosn-FPosnblock^.pos; - if i+len>=FPosnblock^.size then + i:=FPosn-pos; + if i+len>=size then begin - j:=FPosnblock^.size-i; - move(p^,FPosnblock^.data[i],j); + j:=size-i; + move(p^,data[i],j); inc(p,j); inc(FPosn,j); dec(len,j); - FPosnblock^.used:=FPosnblock^.size; - if assigned(FPosnblock^.Next) then - FPosnblock:=FPosnblock^.Next + used:=size; + if assigned(Next) then + FPosnblock:=Next else begin grow; @@ -2518,12 +2519,12 @@ end; end else begin - move(p^,FPosnblock^.data[i],len); + move(p^,data[i],len); inc(p,len); inc(FPosn,len); - i:=FPosn-FPosnblock^.pos; - if i>FPosnblock^.used then - FPosnblock^.used:=i; + i:=FPosn-pos; + if i>used then + used:=i; len:=0; end; end; @@ -2544,24 +2545,25 @@ end; res:=0; p:=pchar(@d); while (len>0) do + with FPosnblock^ do begin - i:=FPosn-FPosnblock^.pos; - if i+len>=FPosnblock^.used then + i:=FPosn-pos; + if i+len>=used then begin - j:=FPosnblock^.used-i; - move(FPosnblock^.data[i],p^,j); + j:=used-i; + move(data[i],p^,j); inc(p,j); inc(FPosn,j); inc(res,j); dec(len,j); - if assigned(FPosnblock^.Next) then - FPosnblock:=FPosnblock^.Next + if assigned(Next) then + FPosnblock:=Next else break; end else begin - move(FPosnblock^.data[i],p^,len); + move(data[i],p^,len); inc(p,len); inc(FPosn,len); inc(res,len); -- cgit v1.2.1