Skip to main content
프로토콜 1은 원래의 VEF 인터페이스입니다. v0.0.1부터 안정적이었으며, 0.0.5 이후에는 제거될 예정입니다. 새로운 확장은 프로토콜 3 API를 사용해야 합니다 — C++에서 확장 만들기C++ 개발 가이드에서 설명하는 템플릿 기반 유형 빌더를 사용하세요. 이 페이지는 프로토콜 1에 기반하여 구축된 기존 확장을 다룰 때 참고용으로 존재합니다.

함수 포인터 유형 API

프로토콜 1 사용자 정의 유형은 vsql::make_type<> 템플릿 대신 명시적인 함수 포인터를 사용하여 등록됩니다. 함수 서명은 프로토콜 3의 상응하는 서명과 다릅니다 — ArgResult 객체 대신 원시 포인터와 길이를 인자로 받습니다.

함수 서명

등록

컴파일 타임 문자열 NTTP를 사용하는 vsql::make_type<kMyTypeName>()이 선호되는 형식입니다. make_type(MYTYPE) (템플릿 매개변수 없음)는 프로토콜 1 형식입니다 — 이 지원은 0.0.5 이후에 제거될 예정입니다.

원시 ABI 스타일 (함수)

프로토콜 1 VDF 구현은 타입화된 래퍼를 사용하는 대신 원시 C 구조체를 직접 전달할 수 있습니다. 이 스타일은 0.0.5 이후에 제거될 예정입니다 — 모든 새로운 코드에 타입화된 인자/결과 API를 사용하세요.
등록은 타입화된 접근법과 동일합니다 — 빌더는 서명을 자동으로 감지합니다.

결과 상수

원시 ABI는 result->type에 설정된 vef_return_value_type_t를 통해 결과 상태를 전달합니다: 프로토콜 3에서는 out.set(), out.set_null(), out.warning(), out.error()가 이를 자동으로 처리합니다.

프로토콜 1에서의 집계 등록

집계의 경우, .clear<>().accumulate<>()는 원시 ABI 함수 포인터 서명을 허용합니다. .prerun<>().postrun<>()는 그렇지 않습니다 — 빌더는 프로토콜 1 확장에도 타입화된 서명 (void(PrerunArgs, PrerunResult)void(PostrunArgs))을 요구합니다. 모든 새로운 코드에 타입화된 집계 접근법을 사용하세요.