Transmit_as 및 Represent_as
Transmit_as 및 represent_as 선행 토큰을 제외하고 동일한 레이아웃을 공유합니다. 토큰은 FC_TRANSMIT_AS 또는 FC_REPRESENT_AS 읽지만 기본 코드는 일반적입니다.
설명에는 다음과 같은 레이아웃이 있습니다.
FC_TRANSMIT_AS | FC_REPRESENT_AS
flags<1>
quintuple_index<2>
presented_type_memory_size<2>
transmitted_type_buffer_size<2>
transmitted_type_offset<2>
플래그<1> 바이트는 위쪽 플래그 니블과 낮은 맞춤 니블로 구성됩니다.
맞춤 니블은 전송된 형식의 와이어 맞춤을 유지합니다. 이는 버퍼 크기 조정 및 형식 코드에서 전송된 형식 크기를 사용할 때 필요합니다.
플래그 니블에는 다음과 같은 플래그가 있을 수 있습니다.
#define PRESENTED_TYPE_IS_ARRAY 0x10
#define PRESENTED_TYPE_ALIGN_4 0x20
#define PRESENTED_TYPE_ALIGN_8 0x40
PRESENTED_TYPE_IS_ARRAY 플래그는 최상위 전송을 무언가의 배열이고 전달된 값으로 나타내는 것으로 표시합니다. –Oi 인터프리터는 이 플래그를 사용하여 이러한 인수(실제로 배열이 아닌 스택의 포인터)를 단계별로 실행합니다. 다른 두 플래그는 이전 인터프리터에서만 스택에 표시된 형식을 올바르게 단계별로 실행하기 위해 사용됩니다.
quintuple_index<2> 함수의 콜백 루틴(실제로는 4배)의 인덱스입니다. 테이블은 동일한 진입점 서비스가 코드로 전송하고 나타내기 때문에 루틴의 위치에 대한 명확한 매핑과 같이 전송하고 나타내는 데 공통적으로 적용됩니다. 매핑은 from_local => to_xmit, to_local => from_xmit, free_inst => free_xmit, free_local => free_inst.
presented_type_memory_size<2> 항상 알 수 없는 형식으로 표현을 포함 하 여 제공 된/로컬 형식에 대 한 크기를 제공 합니다.
transmitted_type_buffer_size<2> 크기가 다를 때 0이거나 실제 고정 크기입니다. 버퍼 크기를 조정하는 경우 일부 콜백을 건너뛸 수 있도록 하는 최적화입니다.
transmitted_type_offset<2> 전송된 형식 형식 문자열에 대한 일반적인 상대 형식 오프셋입니다.