2011-07-05 47 views
2

我想修改autoexp.dat來編寫一個可視化器,我只是部分實現了我想要的。我有哪裏BAR1和BAR2動態分配數組與Visual Studio調試器可視化器與兩個動態數組的幫助

class Foo 
{ 
    double* Bar1; 
    double* Bar2; 
    int size; 
} 

和autoexp.dat的[展示臺]部分形象化,我已經拿出貌似

Foo{ 
    children 
    (
     #(
      [size]: [$c.size], 

      #(
        [Bar1]: #array(expr: $c.Bar1[$i], size: $c.size) 
      ), 
      #(
        [Bar2]: #array(expr: $c.Bar2[$i], size: $c.size) 
      ) 
     ) 
    ) 
} 
類(如下圖)

遺憾的是,輸出這是

Foo 
    [size] 24 
    [Bar1] 1 
    [Bar1] 1 
    . 
    . 
    [Bar1] 1 
    [Bar2] 0 
    [Bar2] 0 
    . 
    . 
    [Bar2] 0 

我想它顯示

Foo 
    [size] 24 
    [Bar1] 
     [0] 1 
     [1] 1 
      . 
      . 
     [23] 1 
    [Bar2] 
     [0] 0 
     [1] 0 
      . 
      . 
     [23] 0 

其中Bar1和Bar2是可摺疊的,但更重要的是我有指數。

回答

2

擴展從@IronMensan的建議,你可以使用switch語句來解決動態大小的限制,也許使用合適的長度作爲默認值,以避免開關太長...

Foo{ 
    children(
     #(
      #([size]: [$c.size]), 
      #(
       #switch ($c.size) 
       #case 0 ( #(Bar1: [$c.Bar1, 0]) ) 
       #case 1 ( #(Bar1: [$c.Bar1, 1]) ) 
       #case 2 ( #(Bar1: [$c.Bar1, 2]) ) 
       #case 3 ( #(Bar1: [$c.Bar1, 3]) ) 
       #case 4 ( #(Bar1: [$c.Bar1, 4]) ) 
       #case 5 ( #(Bar1: [$c.Bar1, 5]) ) 

       #default ( #(Bar1: [$c.Bar1, 50]) ) 
      ), 
      #(
       #switch ($c.size) 
       #case 0 ( #(Bar2: [$c.Bar2, 0]) ) 
       #case 1 ( #(Bar2: [$c.Bar2, 1]) ) 
       #case 2 ( #(Bar2: [$c.Bar2, 2]) ) 
       #case 3 ( #(Bar2: [$c.Bar2, 3]) ) 
       #case 4 ( #(Bar2: [$c.Bar2, 4]) ) 
       #case 5 ( #(Bar2: [$c.Bar2, 5]) ) 

       #default ( #(Bar2: [$c.Bar2, 50]) ) 
      ) 
     ) 
    ) 
} 
+0

好吧,它的醜陋作爲罪過,但這個作品 – Steve

1

我知道如何使BAR1和BAR2可摺疊不會允許你使用動態大小的唯一方法:

Foo{ 
    children 
    (
     #(
      [size]: [$c.size], 
      [Bar1]: [$c.Bar1,30], 
      [Bar2]: [$c.Bar2,30] 
     ) 
    ) 
} 

你可以做多維動陣列是這樣的:

Foo { 
    children 
    (
     #(
      [size]: [$c.size], 

      #array(expr: (0==$i/$c.size)*$c.Bar1[$i]+(1==$i/$c.size)*$c.Bar2[$i-$c.size], rank: 2, size: ($r==1)*$c.size+($r==0)*2) 
     ) 
    ) 
} 

這將列出成員:

[0,0](BAR1的值[0])
[0,1](BAR1的值[1])
...
[0,N](的BAR1 [N]的值)
[1,0](BAR2的值[0])
...

另一種方法是做到這一點:

Foo { 
    children 
    (
     #(
      [size]: [$c.size], 

      #array(expr: (0==$i%2)*$c.Bar1[$i/2]+(1==$i%2)*$c.Bar2[$i/2], rank: 2, size: ($r==0)*$c.size+($r==1)*2) 
     ) 
    ) 
} 

這將交織的值是這樣的:

[0,0](BAR1的值[0])
[1,0](BAR2的值[0])
[0,1](B的值AR1 [1])
[1,1] BAR2的(值[1])
...