구조화된 레코드를 개별 필드로 전달하는 방법
구조화된 레코드가 피호출 프로그램에 전송되고 다음 여러 방법으로 해당 위치에서 수신되도록 EGL 특성을 설정할 수 있습니다(구조화된 레코드로 또는 레코드가 해당 레코드의 리프 요소에 해당하는 개별 필드의 세트인 경우와 같이 또는 레코드 및 필드의 순차 세트로). 이는 EGL 코딩된 로직이 Natural 프로그래밍 언어로 작성된 코드에서 마이그레이션된 EGL 코딩된 로직과 상호작용하는 경우 특히 적합합니다.
동작은 call 명령문 및 피호출 프로그램 둘 다에서 사용자의 callingConvention 특성 설정을 신뢰합니다. 특성 값은 CallingConventionKind.Expanded 또는 짧은 양식인 Expanded 중 하나입니다.
예를 들어, 다음 레코드 파트를 고려하십시오.
Record MyCompletePart type BasicRecord
10 myInt INT;
10 myInt02 INT;
10 myChars CHAR(5);
end
Record MySubPart type BasicRecord
10 myInt02 INT;
10 myChars CHAR(5);
end
선언 세트는 다음과 같을 수 있습니다.
myCompleteRecord MyCompletePart;
mySubRecord MySubPart;
myIntVar INT;
myInt02Var INT;
myCharsVar CHAR(5);
다음 call 명령문이
유효하고 동등합니다.
call MyProgram( myCompleteRecord ) { callingConvention=Expanded };
call MyProgram( myIntVar, mySubRecord ) { callingConvention=Expanded };
call MyProgram( myIntVar, myInt02Var, myCharsVar) { callingConvention=Expanded };
MyProgram의 다음 정의가 유효하고
동등합니다.
Program MyProgram type BasicProgram ( myCompleteRecord MyCompletePart )
{ callingConvention=Expanded }
end
Program MyProgram type BasicProgram ( myIntVar INT, mySubRecord MySubPart )
{ callingConvention=Expanded }
end
Program MyProgram type BasicProgram ( myIntVar INT, myInt02Var INT, myCharsVar CHAR(5))
{ callingConvention=Expanded }
end
3개의 call 명령문 인수 목록이 3개의 피호출 프로그램 매개변수 목록에 유효합니다.
서브세트의 경우에 Expanded를 사용하면 호출하는 데
Expanded를 사용하지 않은 경우보다 더 오래 걸립니다. 예를 들어,
다음 레코드 파트에 기반한 레코드를 고려하십시오.
Record X type BasicRecord
10 myChar CHAR(4)[2];
20 mySubChar01 char(2);
20 mySubChar02 char(2);
end
Expanded를 사용할 때, 각 리프(mySubChar01 또는 mySubChar02)는 해당 리프의 필드가 연속적으로 저장되지 않아도 메모리의 계속적 블록에서 전달됩니다. 데이터를 복사해야 하며 별도로 처리하는 데 시간이 걸립니다. 다차원 구조 필드 어레이가 저장되는 방식에 대한 세부사항은 “어레이”를 참조하십시오.
일반적으로, 성능 문제가 다음 경우에 발생합니다.
- 리프가 어레이입니다.
- 해당 어레이의 상위 또는 기타 상위가 자체적으로 둘 이상의 하위가 있는 어레이입니다.
명시적으로 구조 필드 어레이를 전달하는 경우 “구조 필드 어레이를 전달하는 방법”을 참조하십시오.