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 %>;}