diff options
author | paul <paul@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-11-21 18:27:37 +0000 |
---|---|---|
committer | paul <paul@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-11-21 18:27:37 +0000 |
commit | e12aef3665f441b59ff52880d9c33367211c4ef2 (patch) | |
tree | 701a170bdd7aff1511a1174be52a4807190a0b74 /compiler/cclasses.pas | |
parent | 58f4d6fa500f3a9c59495ee2501508414b0d3c67 (diff) | |
download | fpc-e12aef3665f441b59ff52880d9c33367211c4ef2.tar.gz |
compiler: speedup tdynamicarray.read, tdynamicarray.write
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@14244 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/cclasses.pas')
-rw-r--r-- | compiler/cclasses.pas | 38 |
1 files changed, 20 insertions, 18 deletions
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); |