src/lua_func.h
author Tero Marttila <terom@fixme.fi>
Tue, 28 Apr 2009 22:08:59 +0300
branchnew-transport
changeset 156 6534a4ac957b
parent 145 a5582e1a83da
child 199 8eb839fbabba
permissions -rw-r--r--
add transport/sock/line_proto/etc code 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,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    LUA_ARG_STRING,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    LUA_ARG_BOOL,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
};
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
 * Function argument def
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
struct lua_func_arg {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    /** Argument name */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    const char *name;
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
    /** Expected type */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    enum lua_arg_type type;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    /** Default value */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    union {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        const char *string;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        int boolean;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    } def;
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
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
 * Function def
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
struct lua_func {
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    43
    /** Object type, or NULL */
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    44
    const struct lua_type *type;
143
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
    /** Function name */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    const char *name;
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
    /** Help string */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    const char *help;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    /** Arguments */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    const struct lua_func_arg args[];
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
};
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
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
 * Used as the "invalid" default value
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
#define LUA_ARG_REQUIRED (-1)
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
#define LUA_ARG_STRING_REQUIRED ((const char *) (-1))
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
 * Define a function argument
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
 */
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
#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
    66
#define LUA_FUNC_ARG_BOOL(name, def) { (name), LUA_ARG_BOOL, { .boolean = (def) } }
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    67
#define LUA_FUNC_ARG_END { NULL, 0, { 0 } }
143
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
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    72
#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
    73
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
 * Parse and return a string argument
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
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
    78
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
/**
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
 * Parse and return a boolean argument
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
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
    83
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
 * Parse function arguments as defined
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
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
    88
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
#endif