Browse Source

--- Merging r14244 into '.':
U compiler/cclasses.pas

# revisions: 14244
------------------------------------------------------------------------
r14244 | paul | 2009-11-21 19:27:37 +0100 (Sat, 21 Nov 2009) | 1 line
Changed paths:
M /trunk/compiler/cclasses.pas

compiler: speedup tdynamicarray.read, tdynamicarray.write
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@15048 -

marco 15 years ago
parent
commit
086584a984
1 changed files with 20 additions and 18 deletions
  1. 20 18
      compiler/cclasses.pas

+ 20 - 18
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);