Skip to content

Commit ae0cf1a

Browse files
committed
support for carray (Lua arrays for primitive numeric C data types)
1 parent 3aa2690 commit ae0cf1a

1 file changed

Lines changed: 51 additions & 12 deletions

File tree

sender_capi.h

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22
#define SENDER_CAPI_H
33

44
#define SENDER_CAPI_ID_STRING "_capi_sender"
5-
#define SENDER_CAPI_VERSION_MAJOR 0
5+
#define SENDER_CAPI_VERSION_MAJOR 1
66
#define SENDER_CAPI_VERSION_MINOR 0
7-
#define SENDER_CAPI_VERSION_PATCH 1
8-
9-
typedef struct sender_object sender_object;
10-
typedef struct sender_reader sender_reader;
11-
typedef struct sender_capi sender_capi;
12-
typedef enum sender_capi_value_type sender_capi_value_type;
13-
typedef struct sender_capi_value sender_capi_value;
7+
#define SENDER_CAPI_VERSION_PATCH 0
148

9+
#ifndef SENDER_CAPI_HAVE_LONG_LONG
10+
# include <limits.h>
11+
# if defined(LLONG_MAX)
12+
# define SENDER_CAPI_HAVE_LONG_LONG 1
13+
# else
14+
# define SENDER_CAPI_HAVE_LONG_LONG 0
15+
# endif
16+
#endif
1517

1618
#ifndef SENDER_CAPI_IMPLEMENT_SET_CAPI
1719
# define SENDER_CAPI_IMPLEMENT_SET_CAPI 0
@@ -21,6 +23,13 @@ typedef struct sender_capi_value sender_capi_value;
2123
# define SENDER_CAPI_IMPLEMENT_GET_CAPI 0
2224
#endif
2325

26+
typedef struct sender_object sender_object;
27+
typedef struct sender_reader sender_reader;
28+
typedef struct sender_capi sender_capi;
29+
typedef enum sender_capi_value_type sender_capi_value_type;
30+
typedef struct sender_capi_value sender_capi_value;
31+
typedef enum sender_array_type sender_array_type;
32+
2433
enum sender_capi_value_type
2534
{
2635
SENDER_CAPI_TYPE_NONE = 0,
@@ -30,7 +39,31 @@ enum sender_capi_value_type
3039
SENDER_CAPI_TYPE_NUMBER,
3140
SENDER_CAPI_TYPE_LIGHTUSERDATA,
3241
SENDER_CAPI_TYPE_CFUNCTION,
33-
SENDER_CAPI_TYPE_STRING
42+
SENDER_CAPI_TYPE_STRING,
43+
SENDER_CAPI_TYPE_ARRAY
44+
};
45+
46+
enum sender_array_type
47+
{
48+
SENDER_UCHAR = 1,
49+
SENDER_SCHAR = 2,
50+
51+
SENDER_SHORT = 3,
52+
SENDER_USHORT = 4,
53+
54+
SENDER_INT = 5,
55+
SENDER_UINT = 6,
56+
57+
SENDER_LONG = 7,
58+
SENDER_ULONG = 8,
59+
60+
SENDER_FLOAT = 9,
61+
SENDER_DOUBLE = 10,
62+
63+
#if SENDER_CAPI_HAVE_LONG_LONG
64+
SENDER_LLONG = 11,
65+
SENDER_ULLONG = 12,
66+
#endif
3467
};
3568

3669
struct sender_capi_value
@@ -43,9 +76,15 @@ struct sender_capi_value
4376
void* ptrVal;
4477
lua_CFunction funcVal;
4578
struct {
46-
const char* ptr;
47-
size_t len;
48-
} strVal;
79+
const char* ptr;
80+
size_t len;
81+
} strVal;
82+
struct {
83+
sender_array_type type;
84+
size_t elementSize;
85+
size_t elementCount;
86+
const void* data;
87+
} arrayVal;
4988
};
5089
};
5190

0 commit comments

Comments
 (0)