瀏覽代碼

rtl: add WideBytesOf(UnicodeString): TBytes for delphi compatibility

git-svn-id: trunk@19391 -
paul 14 年之前
父節點
當前提交
14c2f248df
共有 3 個文件被更改,包括 25 次插入0 次删除
  1. 9 0
      rtl/objpas/sysutils/sysuni.inc
  2. 1 0
      rtl/objpas/sysutils/sysunih.inc
  3. 15 0
      tests/test/units/sysutils/tbytesof.pp

+ 9 - 0
rtl/objpas/sysutils/sysuni.inc

@@ -179,3 +179,12 @@ begin
   Result:=TEncoding.Default.GetBytes(Val);
 end;
 {$ENDIF VER2_4}
+function WideBytesOf(const Value: UnicodeString): TBytes;
+var
+  Len:Integer;
+begin
+  Len:=Length(Value)*SizeOf(UnicodeChar);
+  SetLength(Result,Len);
+  if Len>0 then
+    Move(Value[1],Result[0],Len);
+end;

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

@@ -45,3 +45,4 @@ function StrPCopy(Dest: PWideChar; const Source: UnicodeString): PWideChar; over
 function BytesOf(const Val: UnicodeString): TBytes; overload;
 function BytesOf(const Val: WideChar): TBytes; overload;
 {$ENDIF VER2_4}
+function WideBytesOf(const Value: UnicodeString): TBytes;

+ 15 - 0
tests/test/units/sysutils/tbytesof.pp

@@ -17,6 +17,18 @@ begin
       Result := Result and (B[I] = Etalon[I]);
 end;
 
+function CheckWideBytes(const B: TBytes): Boolean;
+const
+  Etalon: array[0..7] of Byte = (84, 00, 101, 00, 115, 00, 116, 00);
+var
+  I: Integer;
+begin
+  Result := Length(B) <= Length(Etalon);
+  if Result then
+    for I := Low(B) to High(B) do
+      Result := Result and (B[I] = Etalon[I]);
+end;
+
 var
   S: AnsiString;
   U: UnicodeString;
@@ -36,4 +48,7 @@ begin
   B := BytesOf(U[1]);
   if not CheckBytes(B) then
     halt(4);
+  B := WideBytesOf(U);
+  if not CheckWideBytes(B) then
+    halt(5);
 end.