Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
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));
}
Esempio n. 4
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;
}