Browse Source

* Changed CompareMem to CompareMemRange and added new (Delphi compatible)
CompareMem. (CompareMem needs a Boolean as result type, not Integer)

sg 25 years ago
parent
commit
0f23f58148
2 changed files with 33 additions and 6 deletions
  1. 26 4
      rtl/objpas/sysstr.inc
  2. 7 2
      rtl/objpas/sysstrh.inc

+ 26 - 4
rtl/objpas/sysstr.inc

@@ -104,20 +104,20 @@ Count1 := Length(S1);
 Count2 := Length(S2);
 Count2 := Length(S2);
 if Count1 > Count2 then Count := Count2
 if Count1 > Count2 then Count := Count2
 else Count := Count1;
 else Count := Count1;
-result := CompareMem(Pointer(S1),Pointer(S2), Count);
+result := CompareMemRange(Pointer(S1),Pointer(S2), Count);
 if (result = 0) and (Count1 <> Count2) then begin
 if (result = 0) and (Count1 <> Count2) then begin
    if Count1 > Count2 then result := ord(s1[Count1 + 1])
    if Count1 > Count2 then result := ord(s1[Count1 + 1])
    else result := -ord(s2[Count2 + 1]);
    else result := -ord(s2[Count2 + 1]);
    end ;
    end ;
 end ;
 end ;
 
 
-{   CompareMem returns the result of comparison of Length bytes at P1 and P2
+{   CompareMemRange returns the result of comparison of Length bytes at P1 and P2
     case       result
     case       result
     P1 < P2    < 0
     P1 < P2    < 0
     P1 > P2    > 0
     P1 > P2    > 0
     P1 = P2    = 0    }
     P1 = P2    = 0    }
 
 
-function CompareMem(P1, P2: Pointer; Length: cardinal): integer;
+function CompareMemRange(P1, P2: Pointer; Length: cardinal): integer;
 var i: integer;
 var i: integer;
 begin
 begin
 i := 0;
 i := 0;
@@ -130,6 +130,24 @@ while (result = 0) and (i < length) do begin
    end ;
    end ;
 end ;
 end ;
 
 
+function CompareMem(P1, P2: Pointer; Length: cardinal): Boolean;
+var
+  i: Integer;
+begin
+  for i := 0 to Length - 1 do
+  begin
+    if Byte(P1^) <> Byte(P2^) then
+    begin
+      Result := False;
+      exit;
+    end;
+    Inc(P1);
+    Inc(P2);
+  end;
+  Result := True;
+end;
+
+
 {   CompareText compares S1 and S2, the result is the based on
 {   CompareText compares S1 and S2, the result is the based on
     substraction of the ascii values of characters in S1 and S2
     substraction of the ascii values of characters in S1 and S2
     comparison is case-insensitive
     comparison is case-insensitive
@@ -1157,7 +1175,11 @@ const
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.33  2000-05-08 13:26:42  peter
+  Revision 1.34  2000-05-08 17:03:02  sg
+  * Changed CompareMem to CompareMemRange and added new (Delphi compatible)
+    CompareMem. (CompareMem needs a Boolean as result type, not Integer)
+
+  Revision 1.33  2000/05/08 13:26:42  peter
     * vtchar support for %s
     * vtchar support for %s
     * define debug -> define fmtdebug
     * define debug -> define fmtdebug
 
 

+ 7 - 2
rtl/objpas/sysstrh.inc

@@ -39,7 +39,8 @@ procedure AppendStr(var Dest: String; const S: string);
 function UpperCase(const s: string): string;
 function UpperCase(const s: string): string;
 function LowerCase(const s: string): string;
 function LowerCase(const s: string): string;
 function CompareStr(const S1, S2: string): Integer;
 function CompareStr(const S1, S2: string): Integer;
-function CompareMem(P1, P2: Pointer; Length: cardinal): integer;
+function CompareMemRange(P1, P2: Pointer; Length: cardinal): integer;
+function CompareMem(P1, P2: Pointer; Length: cardinal): Boolean;
 function CompareText(const S1, S2: string): integer;
 function CompareText(const S1, S2: string): integer;
 
 
 function AnsiUpperCase(const s: string): string;
 function AnsiUpperCase(const s: string): string;
@@ -93,7 +94,11 @@ function BCDToInt(Value: integer): integer;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.9  2000-02-09 16:59:33  peter
+  Revision 1.10  2000-05-08 17:03:02  sg
+  * Changed CompareMem to CompareMemRange and added new (Delphi compatible)
+    CompareMem. (CompareMem needs a Boolean as result type, not Integer)
+
+  Revision 1.9  2000/02/09 16:59:33  peter
     * truncated log
     * truncated log
 
 
 }
 }