mame/3rdparty/luv/src/lhandle.h

68 lines
2.0 KiB
C

/*
* Copyright 2014 The Luvit Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef LUV_LHANDLE_H
#define LUV_LHANDLE_H
#include "luv.h"
/* There are two slots for holding callbacks. One is for the CLOSED event.
The other slot is for all others since they never conflict in practice.
*/
#define luv_callback_id int
#define LUV_CLOSED 0
#define LUV_TIMEOUT 1
#define LUV_PREPARE 1
#define LUV_IDLE 1
#define LUV_CHECK 1
#define LUV_ASYNC 1
#define LUV_POLL 1
#define LUV_SIGNAL 1
#define LUV_EXIT 1
#define LUV_CONNECTION 1
#define LUV_READ 1
#define LUV_RECV 1
#define LUV_FS_EVENT 1
#define LUV_FS_POLL 1
/* Ref for userdata and event callbacks */
typedef struct {
int ref;
int callbacks[2];
void* extra;
} luv_handle_t;
/* Setup the handle at the top of the stack */
static luv_handle_t* luv_setup_handle(lua_State* L);
/* Store a lua callback in a luv_handle for future callbacks.
Either replace an existing callback by id or append a new one at the end.
*/
static void luv_check_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int index);
/* Lookup a function and call it with nargs
If there is no such function, pop the args.
*/
static void luv_call_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int nargs);
/* Push a userdata on the stack from a handle */
static void luv_find_handle(lua_State* L, luv_handle_t* data);
/* Recursivly free the luv_handle and all event handlers */
static void luv_cleanup_handle(lua_State* L, luv_handle_t* data);
#endif