소스 검색

Add Exchange<T> that works like std::exchange in C++.

(cherry picked from commit 05b7ebd34e97de04635d725bb6303cbdafa1a9a8)
Rika Ichinose 1 년 전
부모
커밋
52d7e9b49f
2개의 변경된 파일7개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      rtl/objpas/sysutils/sysutilh.inc
  2. 6 0
      rtl/objpas/sysutils/sysutils.inc

+ 1 - 0
rtl/objpas/sysutils/sysutilh.inc

@@ -287,6 +287,7 @@ type
 
 {$IFNDEF VER3_0}
 generic function IfThen<T>(val:boolean;const iftrue:T; const iffalse:T) :T; inline; overload;
+generic function Exchange<T>(var target:T; const newvalue:T) :T; inline;
 {$ENDIF}
 
 Var

+ 6 - 0
rtl/objpas/sysutils/sysutils.inc

@@ -872,6 +872,12 @@ begin
   else
     Result:=ifFalse;
 end;
+
+generic function Exchange<T>(var target:T; const newvalue:T) :T;
+begin
+  Result := target;
+  target := newvalue;
+end;
 {$ENDIF}
 
 Function ArrayOfConstToStrArray(Args: array of const) : TUTF8StringDynArray;