...fast way to exchange the contents of two variables?

Author: Wellington Lima dos Santos
Homepage: http://www.wlsantos.hpg.com.br

Category: Misc

procedure SwapVars1(var u, v; Size: Integer);
var
  
x: Pointer;
begin
  
GetMem(x, Size);
  try
    
System.move(u, x^, Size);
    System.move(v, u, Size);
    System.move(x^, v, Size);
  finally
    
FreeMem(x);
  end;
end;


procedure SwapVars2(var Source, Dest; Size: Integer);
  // By Mike Heydon, mheydon@eoh.co.za
begin
  asm
     
push edi
     push esi
     mov esi,Source
     mov edi,Dest
     mov ecx,Size
     cld
 @1:
     mov al,[edi]
     xchg [esi],al
     inc si
     stosb
     loop @1
     pop esi
     pop edi
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  
SwapVars1(X1, X2, SizeOf(Integer));
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base