2011-07-05 9 views
2

私はvisualexizerを書き込むためにautoexp.datを修正しようとしています。私はBAR1とBAR2が動的に割り当てられた配列2つのダイナミックアレイを持つVisual Studioデバッガビジュアライザのヘルプ

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

と私は

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

      #(
        [Bar1]: #array(expr: $c.Bar1[$i], size: $c.size) 
      ), 
      #(
        [Bar2]: #array(expr: $c.Bar2[$i], size: $c.size) 
      ) 
     ) 
    ) 
} 
のようなルックスを作ってみたAUTOEXP.DATの[ビジュアライザ]セクションでビジュアライザです(下記)クラスを持っています

残念ながら、このため出力は

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

を、あなたは、動的なサイズの制限を回避するために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] 
     ) 
    ) 
} 

あなたはこのようなマルチdemensional配列で何かができるに:

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])
...

別の方法は、これを行うことです:

[0,0](BAR1の値[0])
[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,1](Bの値AR1 [1])
[1,1](BAR2の値は、[1])
... @IronMensanからの提案を拡張

関連する問題