浏览代码

+ VarArrayPut and VarArrayGet from Igor, resolves #9161

git-svn-id: trunk@8117 -
florian 18 年之前
父节点
当前提交
dc2a8787a1
共有 4 个文件被更改,包括 38 次插入0 次删除
  1. 1 0
      .gitattributes
  2. 18 0
      rtl/inc/variant.inc
  3. 2 0
      rtl/inc/varianth.inc
  4. 17 0
      tests/webtbs/tw9161.pp

+ 1 - 0
.gitattributes

@@ -8343,6 +8343,7 @@ tests/webtbs/tw9139.pp svneol=native#text/plain
 tests/webtbs/tw9139a.pp svneol=native#text/plain
 tests/webtbs/tw9141.pp svneol=native#text/plain
 tests/webtbs/tw9145.pp svneol=native#text/plain
+tests/webtbs/tw9161.pp svneol=native#text/plain
 tests/webtbs/tw9162.pp svneol=native#text/plain
 tests/webtbs/tw9167.pp svneol=native#text/plain
 tests/webtbs/tw9174.pp svneol=native#text/plain

+ 18 - 0
rtl/inc/variant.inc

@@ -613,6 +613,24 @@ procedure VarArrayRedim(var A: Variant; HighBound: SizeInt);
     variantmanager.vararrayredim(a,highbound);
   end;
 
+procedure VarArrayPut(var A: Variant; const Value: Variant; const Indices: array of SizeInt);
+  begin
+    if Length(Indices)>0 then 
+      variantmanager.vararrayput(A, Value, Length(Indices), @Indices[0])
+    else
+      variantmanager.vararrayput(A, Value, 0, nil);
+  end;
+
+
+function VarArrayGet(const A: Variant; const Indices: array of SizeInt): Variant;
+  begin
+    if Length(Indices)>0 then 
+      Result:=variantmanager.vararrayget(A, Length(Indices), @Indices[0])
+    else 
+      Result:=variantmanager.vararrayget(A, 0, nil);
+  end;
+  
+ 
 procedure VarCast(var dest : variant;const source : variant;vartype : longint);
 
   begin

+ 2 - 0
rtl/inc/varianth.inc

@@ -341,6 +341,8 @@ operator <=(const op1,op2 : variant) dest : boolean;{$ifdef SYSTEMINLINE}inline;
 
 { variant helpers }
 procedure VarArrayRedim(var A: Variant; HighBound: SizeInt);
+procedure VarArrayPut(var A: Variant; const Value: Variant; const Indices: array of SizeInt);
+function VarArrayGet(const A: Variant; const Indices: array of SizeInt): Variant;
 procedure VarCast(var dest : variant;const source : variant;vartype : longint);
 
 {**********************************************************************

+ 17 - 0
tests/webtbs/tw9161.pp

@@ -0,0 +1,17 @@
+uses
+  variants,sysutils;
+var a:variant;
+begin
+  a:=VarArrayCreate([0,2,0,2],varVariant);
+  if VarArrayDimCount(a)<>2 then
+    halt(1);
+  VarArrayPut(a,'b',[1,1]);
+  if String(VarArrayGet(a,[1,1]))<>'b' then
+    halt(2);
+  a[2,1]:='asdf';
+  if VarArrayGet(a,[2,1])<>'asdf' then
+    halt(2);
+  writeln('ok');
+end.
+
+