summaryrefslogtreecommitdiff
path: root/compiler/cclasses.pas
diff options
context:
space:
mode:
authorpaul <paul@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-11-21 18:27:37 +0000
committerpaul <paul@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-11-21 18:27:37 +0000
commite12aef3665f441b59ff52880d9c33367211c4ef2 (patch)
tree701a170bdd7aff1511a1174be52a4807190a0b74 /compiler/cclasses.pas
parent58f4d6fa500f3a9c59495ee2501508414b0d3c67 (diff)
downloadfpc-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.pas38
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);