Browse Source

* TPtrWrapper for Delphi compatibility

Michaël Van Canneyt 2 years ago
parent
commit
b121045d4a
2 changed files with 67 additions and 0 deletions
  1. 45 0
      rtl/inc/objpas.inc
  2. 22 0
      rtl/inc/objpash.inc

+ 45 - 0
rtl/inc/objpas.inc

@@ -1238,3 +1238,48 @@
     {$i except.inc}
   {$endif}
 {$endif FPC_HAS_FEATURE_EXCEPTIONS}
+
+{****************************************************************************
+                             Various Delphi constructs
+****************************************************************************}
+
+
+function TPtrWrapper.ToPointer: Pointer;
+begin
+  Result:=Value;
+end;
+
+class function TPtrWrapper.GetNilValue: TPtrWrapper; inline; static;
+
+begin
+end;
+
+constructor TPtrWrapper.Create(AValue: PtrInt); overload;
+
+begin
+  Value:=Pointer(aValue);
+end;
+
+constructor TPtrWrapper.Create(AValue: Pointer); overload;
+
+begin
+  Value:=aValue;
+end;
+
+
+function TPtrWrapper.ToInteger: PtrInt;
+begin
+  Result:=PtrInt(Value);
+end;
+
+operator =(Left, Right: TPtrWrapper) c : Boolean;
+
+begin
+  c:=(Left.Value=Right.Value);
+end;
+
+operator <>(Left, Right: TPtrWrapper) c : Boolean;
+
+begin
+  Result:=(Left.Value<>Right.Value);
+end;

+ 22 - 0
rtl/inc/objpash.inc

@@ -581,3 +581,25 @@
        HashValue    : LongWord;
      end;
 {$endif FPC_HAS_FEATURE_RESOURCES}
+
+{*****************************************************************************
+                              Various Delphi elements
+ *****************************************************************************}
+
+Type
+  TPtrWrapper = record
+  private
+    Value: PByte;
+    class function GetNilValue: TPtrWrapper; inline; static;
+  public
+    constructor Create(AValue: PtrInt); overload;
+    constructor Create(AValue: Pointer); overload;
+    function ToPointer: Pointer;
+    function ToInteger: PtrInt;
+    class property NilValue: TPtrWrapper read GetNilValue;
+    // class operator Equal(Left, Right: TPtrWrapper): Boolean;
+    // class operator NotEqual(Left, Right: TPtrWrapper): Boolean;
+  end;
+  
+operator =(Left, Right: TPtrWrapper) c : Boolean;  
+operator <>(Left, Right: TPtrWrapper) c : Boolean;