int make_document(ErlNifEnv *env, vec_term_t *vec, ERL_NIF_TERM *out, int return_maps) { if(vec->length % 2 != 0) { return 0; } if(return_maps) { int idx, count = vec->length; ERL_NIF_TERM ret = enif_make_new_map(env); for(idx = 0; idx < count; idx += 2) { if(!enif_make_map_put( env, ret, vec->data[idx], vec->data[idx+1], &ret)) { return 0; } } *out = ret; return 1; } *out = enif_make_tuple_from_array(env, vec->data, vec->length); return 1; }
ERL_NIF_TERM make_empty_document(ErlNifEnv *env, int return_maps) { if(return_maps) { return enif_make_new_map(env); } return enif_make_tuple(env, 0); }
ERL_NIF_TERM make_empty_object(ErlNifEnv* env, int ret_map) { #if MAP_TYPE_PRESENT if(ret_map) { return enif_make_new_map(env); } #endif return enif_make_tuple1(env, enif_make_list(env, 0)); }
static ERL_NIF_TERM event_to_map(ErlNifEnv* env, SDL_Event* event) { ERL_NIF_TERM map; map = enif_make_new_map(env); // All events have a type and a timestamp. enif_make_map_put(env, map, atom_type, event_type_to_atom(event->type), &map); enif_make_map_put(env, map, atom_timestamp, enif_make_uint(env, event->common.timestamp), &map); // The following event types have no additional fields: // // - SDL_QUIT // - SDL_APP_TERMINATING // - SDL_APP_LOWMEMORY // - SDL_APP_WILLENTERBACKGROUND // - SDL_APP_DIDENTERBACKGROUND // - SDL_APP_WILLENTERFOREGROUND // - SDL_APP_DIDENTERFOREGROUND // - SDL_KEYMAPCHANGED // - SDL_CLIPBOARDUPDATE // - SDL_RENDER_TARGETS_RESET // - SDL_RENDER_DEVICE_RESET switch (event->type) { case SDL_WINDOWEVENT: return window_event_to_map(env, event, map); // @todo SDL_SYSWMEVENT case SDL_KEYDOWN: case SDL_KEYUP: return keyboard_event_to_map(env, event, map); // @todo SDL_TEXTEDITING // @todo SDL_TEXTINPUT case SDL_MOUSEMOTION: return mouse_motion_event_to_map(env, event, map); case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: return mouse_button_event_to_map(env, event, map); case SDL_MOUSEWHEEL: return mouse_wheel_event_to_map(env, event, map); // @todo SDL_JOYAXISMOTION // @todo SDL_JOYBALLMOTION // @todo SDL_JOYHATMOTION // @todo SDL_JOYBUTTONDOWN // @todo SDL_JOYBUTTONUP // @todo SDL_JOYDEVICEADDED // @todo SDL_JOYDEVICEREMOVED // @todo SDL_CONTROLLERAXISMOTION // @todo SDL_CONTROLLERBUTTONDOWN // @todo SDL_CONTROLLERBUTTONUP // @todo SDL_CONTROLLERDEVICEADDED // @todo SDL_CONTROLLERDEVICEREMOVED // @todo SDL_CONTROLLERDEVICEREMAPPED // @todo SDL_FINGERDOWN // @todo SDL_FINGERUP // @todo SDL_FINGERMOTION // @todo SDL_DOLLARGESTURE // @todo SDL_DOLLARRECORD // @todo SDL_MULTIGESTURE // @todo SDL_DROPFILE // @todo SDL_DROPTEXT // @todo SDL_DROPBEGIN // @todo SDL_DROPCOMPLETE // @todo SDL_AUDIODEVICEADDED // @todo SDL_AUDIODEVICEREMOVED } return map; }