Unifex v0.2.6 Unifex.BaseType behaviour View Source

This module provides different generators allowing to map the types from Unifex specs into proper native types

The generators from this module are trying to delegate the calls to the callbacks in modules adequate for the type but provide fallback values (all the callbacks are optional)

Link to this section Summary

Functions

Generates parsing of UNIFEX_TERM argument into the native variable

Provides a way to convert native variable name into UNIFEX_TERM

Generates a declaration of parameter (to be placed in function header) based on generate_native_type/0 and provided name.

Generates an destrucition of variable content. Should be paired with generate_initialization/1

Generates Elixir post-processing of the value returned from native function.

Generates an initialization of variable content. Should be paired with generate_destruction/1

Callbacks

Generates function call parsing UNIFEX_TERM argument into the native variable with name variable. Function should return boolean value.

Provides a way to convert native variable name into UNIFEX_TERM

Generates a destruction of variable content. Should be paired with generate_initialization/1

Generates Elixir post-processing of the value returned from native function.

Generates an initialization of variable content. Should be paired with generate_destruction/1

Generates a native counterpart for the type.

Generates an expression that will return how many bytes should be allocated for this type.

Link to this section Types

Specs

arg_parse_ctx_t() :: %{
  result_var: Unifex.NativeCodeGenerator.code_t(),
  exit_label: Unifex.NativeCodeGenerator.code_t()
}

Specs

spec_tuple_t() :: {name :: atom(), type :: t()}

Specs

t() :: atom() | {:list, atom()}

Link to this section Functions

Link to this function

generate_arg_parse(arg, ctx)

View Source

Specs

generate_arg_parse(
  {spec_tuple_t(), i :: non_neg_integer()},
  ctx :: arg_parse_ctx_t()
) :: Unifex.NativeCodeGenerator.code_t()

Generates parsing of UNIFEX_TERM argument into the native variable

Link to this function

generate_arg_serialize(arg)

View Source

Specs

generate_arg_serialize(spec_tuple_t()) :: Unifex.NativeCodeGenerator.code_t()

Provides a way to convert native variable name into UNIFEX_TERM

Tries to get value from type-specific module, uses enif_make_#{type} as fallback value.

Link to this function

generate_declaration(arg)

View Source

Specs

generate_declaration(spec_tuple_t()) :: [Unifex.NativeCodeGenerator.code_t()]

Generates a declaration of parameter (to be placed in function header) based on generate_native_type/0 and provided name.

Uses type as fallback for c:generate_native_type/1

Link to this function

generate_destruction(arg)

View Source

Specs

generate_destruction(spec_tuple_t()) :: Unifex.NativeCodeGenerator.code_t()

Generates an destrucition of variable content. Should be paired with generate_initialization/1

Returns an empty string if the type does not provide destructor

Link to this function

generate_elixir_postprocessing(arg)

View Source

Specs

generate_elixir_postprocessing(spec_tuple_t()) :: Macro.t()

Generates Elixir post-processing of the value returned from native function.

Fallbacks to simply passing the value (as variable reference)

Link to this function

generate_initialization(arg)

View Source

Specs

generate_initialization(spec_tuple_t()) :: Unifex.NativeCodeGenerator.code_t()

Generates an initialization of variable content. Should be paired with generate_destruction/1

Returns an empty string if the type does not provide initialization

Link to this section Callbacks

Link to this callback

generate_arg_parse(argument, variable)

View Source (optional)

Specs

generate_arg_parse(argument :: String.t(), variable :: String.t()) ::
  Unifex.NativeCodeGenerator.code_t()

Generates function call parsing UNIFEX_TERM argument into the native variable with name variable. Function should return boolean value.

Link to this callback

generate_arg_serialize(name)

View Source (optional)

Specs

generate_arg_serialize(name :: atom()) :: Unifex.NativeCodeGenerator.code_t()

Provides a way to convert native variable name into UNIFEX_TERM

Link to this callback

generate_destruction(name)

View Source (optional)

Specs

generate_destruction(name :: atom()) :: Unifex.NativeCodeGenerator.code_t()

Generates a destruction of variable content. Should be paired with generate_initialization/1

Link to this callback

generate_elixir_postprocessing(name)

View Source (optional)

Specs

generate_elixir_postprocessing(name :: atom()) :: Macro.t()

Generates Elixir post-processing of the value returned from native function.

Should return quoted code. The value can be referenced using Macro.var/2 call. Useful when some call cannot be made from native code (e.g. call to another NIF from NIF)

Link to this callback

generate_initialization(name)

View Source (optional)

Specs

generate_initialization(name :: atom()) :: Unifex.NativeCodeGenerator.code_t()

Generates an initialization of variable content. Should be paired with generate_destruction/1

Link to this callback

generate_native_type()

View Source (optional)

Specs

generate_native_type() :: Unifex.NativeCodeGenerator.code_t()

Generates a native counterpart for the type.

Link to this callback

generate_sizeof()

View Source (optional)

Specs

generate_sizeof() :: Unifex.NativeCodeGenerator.code_t()

Generates an expression that will return how many bytes should be allocated for this type.