Graphisoft®

GSRootVersion: 1.0

Virtual Array에 대하여

 

가상 배열(VA)은 그 안에 저장된 요소의 수에 따라 크기가 증가하거나 감소할 수 있는 동적 배열입니다. 가상 배열은 DESC structure로 표시됩니다. DESC 구조는 가상 배열의 속성을 정의합니다.

DESC structure는 가상 배열의 요소들이 저장되는 메모리 버퍼를 포함합니다. 가상 배열 관리자는 이 버퍼의 크기를 늘리거나 줄이는 함수들을 제공하지만, 가져오기/설정 작업을 수동으로 수행해야 합니다. DESC structure는 버퍼의 마지막 할당(maxind)과 마지막 사용(lastind) 셀을 가리키는 두 개의 인덱스를 가지고 있습니다. 만약 당신이 가상 배열에서 가져오기/설정 작업을 수행하는 경우 이 인덱스들을 고려해야 합니다. VA의 인덱스는 1부터 DESClastind 멤버 값까지의 값을 갖습니다. 인덱스 범위는 항상 연속적이며 인덱스 범위의 셀은 항상 사용됩니다. 만약 가상 배열이 확대되거나 축소되어야 하는 경우 DESC structure의 npage 멤버가 지정한 요소의 개수만큼 크기가 증가하거나 감소합니다.

가상 배열을 사용하기 전에 VAInit 함수를 호출하여 초기화해야 합니다. VAInit은 버퍼를 할당하고 DESC structure의 멤버들을 초기화합니다. 초기화한 후 VASpac, VANspac 또는 VAReal 함수들을 사용하여 가상 배열의 크기를 증가시킬 수 있습니다. 이전 함수들은 DESC structure의 멤버들을 유지하고 필요한 경우 버퍼의 크기를 지속적으로 증가시킵니다.

인덱스 범위가 연속적이기 때문에 VA에 새로운 요소를 추가하려면 먼저 VASpac 함수를 호출하여 VA의 크기를 1만큼 늘려야 합니다. VASpac은 DESC에서 버퍼의 크기를 늘리고 maxindlastind 멤버를 업데이트합니다. lastind 멤버의 새로운 값은 1 증가하게 됩니다. 왜냐하면 lastind 멤버가 비어 있는 VA의 마지막 셀을 가리키기 때문에(VASpac 호출 후에), lastind가 가리키는 셀에 추가하기 위해 새로운 요소를 복사할 수 있습니다. VA 끝에만 새로운 요소를 추가할 수 있습니다. 즉, 요소를 이어 붙일 수는 있어도 요소들을 삽입할 수는 없습니다.

가상 배열의 크기를 줄이려면 VaDecrVARelease 함수를 사용하십시오. 그것들은 DESC structure의 멤버들을 업데이트하고 필요한 경우 버퍼의 크기를 줄입니다.

가상 배열을 사용한 후 VAFree 함수를 호출하여 버퍼를 해제해야 합니다. 그 후 VAUnused 함수를 호출하여 가상 배열을 사용하지 않은 상태로 표시해 둡니다.

가상 배열의 요소를 지우려면 VAClearIndex 함수를 사용해야 합니다. VA의 클리어된 셀을 해제하기 때문에 VAClearIndex는 인덱스 범위를 감소시킵니다. VACopyAll 함수는 가상 배열의 내용을 다른 VA로 복사합니다. 가상 배열에 2개 이상의 요소를 추가해야 하는 경우 VACopyToEndVAAddFromArr 복사 함수를 사용할 수 있습니다. VASort 함수는 가상 배열의 멤버들을 정렬하는 반면, VASearch 함수는 가상 배열 안의 요소의 인덱스를 검색합니다.