Skip to main content
O Protocol 1 é a interface original do VEF. Ele é estável desde a v0.0.1 e será removido após a 0.0.5. Novas extensões devem usar a API do Protocol 3 — os construtores de tipos baseados em templates dos guias Criando Extensões em C++ e Desenvolvimento em C++. Esta página existe como referência ao trabalhar com extensões existentes compiladas com o Protocol 1.

API de Tipos Baseada em Pointers de Função

Os tipos personalizados do Protocol 1 são registrados usando pointers de função explícitos em vez do template vsql::make_type<>. As assinaturas das funções diferem das equivalentes do Protocol 3 — elas recebem pointers brutos e comprimentos em vez de objetos Arg e Result.

Assinaturas de Funções

Registro

vsql::make_type<kMyTypeName>() (com um NTTP de string em tempo de compilação) é a forma preferida. make_type(MYTYPE) (sem parâmetro de template) é a forma do Protocol 1 — o suporte a ela será removido após a 0.0.5.

Estilo de ABI Bruta (Funções)

As implementações de VDF do Protocol 1 podem passar as structs C brutas diretamente em vez de usar wrappers tipados. Este estilo será removido após a 0.0.5 — use a API tipada de argumento/resultado para todo código novo.
O registro é idêntico à abordagem tipada — o construtor detecta a assinatura automaticamente.

Constantes de Resultado

A ABI bruta comunica o estado do resultado por meio de vef_return_value_type_t definido em result->type: No Protocol 3, out.set(), out.set_null(), out.warning() e out.error() tratam disso automaticamente.

Registro de Agregados no Protocol 1

Para agregados, .clear<>() e .accumulate<>() aceitam assinaturas de pointers de função de ABI bruta. .prerun<>() e .postrun<>() não aceitam — o construtor exige assinaturas tipadas (void(PrerunArgs, PrerunResult) e void(PostrunArgs)) mesmo para extensões do Protocol 1. Use a abordagem tipada de agregados para todo código novo.