src/lib/lua_func.h
author Tero Marttila <terom@fixme.fi>
Thu, 28 May 2009 01:17:36 +0300
branchnew-lib-errors
changeset 219 cefec18b8268
parent 201 src/lua_func.h@5c34c5d90a3f
permissions -rw-r--r--
some of the lib/transport stuff compiles
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#ifndef LUA_FUNC_H
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#define LUA_FUNC_H
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
 * @file
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
 *
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
 * Convenience functions for working with lua C functions
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
#include "lua_type.h"
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
#include <stdbool.h>
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
 * Lua function argument types
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
enum lua_arg_type {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    LUA_ARG_INVALID,
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    17
    
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    18
    /** A `const char *` pointing to lua-GC'd memory */
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    19
    LUA_ARG_STRING,
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    21
    /** A c99 `bool` */
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    LUA_ARG_BOOL,
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    23
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    24
    /** A `long signed int` */
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    25
    LUA_ARG_INT,
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
};
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
 * Function argument def
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
struct lua_func_arg {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    /** Argument name */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    const char *name;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    /** Expected type */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    enum lua_arg_type type;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    /** Default value */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    union {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        const char *string;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        int boolean;
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    42
        long integer;
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    } def;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
};
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
 * Function def
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
struct lua_func {
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    50
    /** Object type, or NULL */
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    51
    const struct lua_type *type;
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    /** Function name */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    const char *name;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    /** Help string */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    const char *help;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    /** Arguments */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    const struct lua_func_arg args[];
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
};
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
 * Used as the "invalid" default value
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
#define LUA_ARG_REQUIRED (-1)
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
#define LUA_ARG_STRING_REQUIRED ((const char *) (-1))
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
 * Define a function argument
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
#define LUA_FUNC_ARG_STRING(name, def) { (name), LUA_ARG_STRING, { .string = (def) } }
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
#define LUA_FUNC_ARG_BOOL(name, def) { (name), LUA_ARG_BOOL, { .boolean = (def) } }
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    74
#define LUA_FUNC_ARG_INT(name, def) { (name), LUA_ARG_INT, { .integer = (def) } }
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    75
#define LUA_FUNC_ARG_END { NULL, 0, { 0 } }
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
 * Define a function
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    80
#define LUA_FUNC(type, name, help, ...) { (type), (name), (help), { __VA_ARGS__, LUA_FUNC_ARG_END } }
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
 * Parse and return a string argument
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
const char *lua_arg_string (lua_State *L, int nargs, int index, const char *name, const char *def);
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
 * Parse and return a boolean argument
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
bool lua_arg_bool (lua_State *L, int nargs, int index, const char *name, int def);
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
/**
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    93
 * Parse and return an integer argument
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    94
 */
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    95
long lua_arg_int (lua_State *L, int nargs, int index, const char *name, long def);
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    96
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
    97
/**
199
8eb839fbabba replace lua_client_networks/lua_network_channels with iterators
Tero Marttila <terom@fixme.fi>
parents: 145
diff changeset
    98
 * Return a userdata argument at the given fixed index
8eb839fbabba replace lua_client_networks/lua_network_channels with iterators
Tero Marttila <terom@fixme.fi>
parents: 145
diff changeset
    99
 */
201
5c34c5d90a3f implement LUA_ARG_INT
Tero Marttila <terom@fixme.fi>
parents: 199
diff changeset
   100
void* lua_arg_obj (lua_State *L, int nargs, int index, const struct lua_type *type, bool optional);
199
8eb839fbabba replace lua_client_networks/lua_network_channels with iterators
Tero Marttila <terom@fixme.fi>
parents: 145
diff changeset
   101
8eb839fbabba replace lua_client_networks/lua_network_channels with iterators
Tero Marttila <terom@fixme.fi>
parents: 145
diff changeset
   102
/**
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
 * Parse function arguments as defined
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
void lua_args_parse (lua_State *L, const struct lua_func *func, void **obj_ptr, ...);
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
#endif