Current section
Files
Jump to
Current section
Files
priv/templates/rclex.gen.msgs/msg_nif_c.eex
#include <erl_nif.h>
#include <rosidl_runtime_c/message_type_support_struct.h>
#define __STRING__ASSIGN rosidl_runtime_c__String__assign
#define __U16STRING__ASSIGN rosidl_runtime_c__U16String__assign_from_char
#include <<%= file_name %>.h>
#include "pkgs/<%= file_name %>_nif.h"
#include "total_nif.h"
ERL_NIF_TERM nif_get_typesupport_<%= function_name %>(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
if(argc != 0) {
return enif_make_badarg(env);
}
void* res;
rosidl_message_type_support_t** res_ts;
ERL_NIF_TERM ret;
res = enif_alloc_resource(rt_void,sizeof(rosidl_message_type_support_t*));
if(res == NULL) {
return enif_make_badarg(env);
}
ret = enif_make_resource(env,res);
enif_release_resource(res);
res_ts = (rosidl_message_type_support_t**) res;
*res_ts = ROSIDL_GET_MSG_TYPE_SUPPORT(<%= rosidl_get_msg_type_support %>);
return ret;
}
ERL_NIF_TERM nif_create_empty_msg_<%= function_name %>(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
if(argc != 0) {
return enif_make_badarg(env);
}
void* res;
ERL_NIF_TERM ret;
res = enif_alloc_resource(rt_void,sizeof(<%= struct_name %>));
if(res == NULL) {
return enif_make_badarg(env);
}
ret = enif_make_resource(env,res);
enif_release_resource(res);
return ret;
}
ERL_NIF_TERM nif_init_msg_<%= function_name %>(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
if(argc != 1) {
return enif_make_badarg(env);
}
void* res;
ERL_NIF_TERM ret;
if(!enif_get_resource(env,argv[0],rt_void,(void**)&res)) {
return enif_make_badarg(env);
}
ret = enif_make_resource(env,res);
<%= struct_name %>__init((<%= struct_name %>*) res);
return ret;
}
ERL_NIF_TERM nif_setdata_<%= function_name %>(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
if(argc != 2) {
return enif_make_badarg(env);
}
void* res_tmp;
<%= struct_name %>* res;
if(!enif_get_resource(env,argv[0],rt_void,(void**)&res_tmp)) {
return enif_make_badarg(env);
}
res = (<%= struct_name %>*) res_tmp;
<%= setdata_statements %>
return enif_make_atom(env,"ok");
}
ERL_NIF_TERM nif_readdata_<%= function_name %>(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
if(argc != 1) {
return enif_make_badarg(env);
}
void* res_tmp;
<%= struct_name %>* res;
if(!enif_get_resource(env,argv[0],rt_void,(void**)&res_tmp)) {
return enif_make_badarg(env);
}
res = (<%= struct_name %>*) res_tmp;
return <%= readdata_statements %>;
}