我正在尝试修改autoexp.dat以编写可视化工具,而我只是部分实现了我想要的。我有一个类(下面),其中Bar1和Bar2是动态分配的数组
class Foo
{
double* Bar1;
double* Bar2;
int size;
}
和我提出的autoexp.dat的[Visualizer]部分中的可视化工具看起来像
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是可折叠的,但更重要的是我有索引。
答案 0 :(得分: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]) )
)
)
)
}
答案 1 :(得分: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](Bar1 [1]的值)
[1,1](Bar2 [1]的值)
...