Array 명령
jjuiddong
http://www.virtualdub.org/blog/pivot/entry.php?id=120 출처
#array 명령어
#array 용법 1 #array ( expr: disp_expr size: size_expr ) : disp_expr // autoexp.dat MyType<*> { children ( #( [raw members]: [$e,!], [size]: [$e.end-$e.start, i], #array ( expr: $e.start[$i], size: $e.end - $e.start ) ) ) }
- $i 은 0부터 size-1 만큼 증가된다.
- expr : 출력 값 포맷
- size: 순회할 배열의 크기
의사언어로 표현한다면
$e = current object size = size_expr for ( $i = 0; $i < size; ++$i) { display disp_expr }
#array 용법2 #array ( expr: disp_expr rank: rank_expr size: size_expr base: base_expr ) : disp_expr
// sample code struct MyArray2D { T *start; int innerSize; int outerSize; }; // autoexp.dat MyArray2D { children ( #array ( expr: $e.start[$i], // 이 부분에서 다차원 배열 참조하는 계산이 잘못되었다. 자세한 내용은 출처에서 확인하자. rank: 2, size: ($r==1)*$e.outerSize+($r==0)*$e.innerSize, base: 1 ) ) }
- base: 인덱스의 시작 값을 나타낸다. 용법1 에서는 기본적으로 0부터 시작하게 되어있다. $i 값은 바꾸지 않고 offset 형태로 작동한다. $i + offset
- rank: 이차원 이상의 배열일 때 쓰인다. $r 은 rank(차원)을 뜻하며, 0 부터 rank-1까지 배열을 순회한다. 매 차원마다 base 와 size 가 참조된다.
의사코드로 나타내면
$e = current object for ($r = 0; $r < rank_expr; ++$r) { for ( $i = base_expr; $i < size_expr; ++$i) { display disp_expr } }
Visual Studio std::vector<*> Visualizer 예제
;------------------------------------------------------------------------------ ; std::vector ;------------------------------------------------------------------------------ std::vector<*>{ children ( #array ( expr : ($e._Myfirst)[$i], size : $e._Mylast-$e._Myfirst ) ) preview ( #( "[", $e._Mylast - $e._Myfirst , "](", #array ( expr : ($e._Myfirst)[$i], size : $e._Mylast-$e._Myfirst ), ")" ) ) }