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
                     ),
                    ")"
              )
         )
}
개인 도구
이름공간

변수
행위
둘러보기
도구모음