Virtual Array of records with Type field (VAT)에 대하여
Virtual Array of records with type field (VAT)는 동작 배열로, 그 크기는 저장된 요소들의 개수에 따라 증가 또는 감소할 수 있습니다. VAT은 VATDESC structure로 표현됩니다. VATDESC structure는 VAT의 속성들을 정의합니다.
VAT은 내부 표현 면에서 VA와 다릅니다. VAT는 index 범위 안에서 VAT_FREE flag로 표시된 빈 셀들을 포함할 수 있습니다. 그러므로 만약 VAT에 요소 하나를 추가하고 싶으면, 1번째 free 셀에 새로운 요소를 작성할 수 있습니다. 1번째 free 셀의 인덱스는 VATFind 함수로 가져올 수 있습니다. VAT의 인덱스는 0부터 lastind-1 까지라는 것을 참고하십시오. (lastind는 VATDESC structure의 멤버입니다)
VATDESC structure는 요소들이 저장된 메모리 버퍼를 포함합니다. Virtual Array 관리자는 버퍼의 크기를 증가 또는 감소시키는 함수들을 제공합니다. 그러나 get/set 동작들은 수동으로 이루어져야 합니다. VATDESC structure는 freeind 데이터 멤버 안에 있는 DESC structure와 다릅니다. freeind 멤버는 VAT의 1번째 free 셀을 가리키고 있습니다. 만약 Virtual Array에서 get/set 동작들을 수행하고 있다면, 이 인덱스 멤버를 반드시 고려해야 합니다. 만약 Virtual Array이 커지거나 줄어들어야 한다면, 그 크기는 요소들의 npage 수만큼 증가 또는 감소하게 될 것입니다. 여기서 npage 역시 DESC structure의 멤버입니다.
VAT를 사용하기 전에 반드시 VATInit 함수로 초기화해야 합니다. VATInit은 버퍼를 할당하고 VATDESC structure의 멤버들을 초기화합니다. 초기화 후에 VAT 상에 get/set을 수행하거나 함수들을 추가할 수 있습니다. 만약 VAT에 요소 하나를 추가하고 싶으면, 먼저 VATFind 함수를 호출해야 합니다. VATFind 함수는 VAT의 1번째 free 셀의 인덱스를 리턴합니다. 만약 VAT가 free 셀을 갖고 있지 않다면, 이 함수는 VAT의 크기를 증가시킵니다. 당신이 버퍼에 새로운 요소를 삽입할 때, VATFind 함수가 리턴한 인덱스에 해야 합니다. VATUpdate 함수를 호출하여 VATDESC structure의 인덱스 포인터들을 관리할 수 있습니다. VAT를 사용한 후에는 버퍼를 해제하기 위해 VATFree 함수를 호출해야 합니다.
만약 VAT의 요소 하나를 지우고 싶으면 VATClear 함수를 호출하면 됩니다. VATClear 함수는 요소를 포함하고 있는 셀을 지우기 위해 VAT_FREE flag로 표시합니다. VAT에 저장된 요소들의 개수는 VATNrElements 함수를 호출하여 가져올 수 있습니다. 이 함수는 VAT_FREE flag가 표시되지 않은 모든 셀들을 셉니다.