1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#ifndef AL_BACKENDS_BASE_H
#define AL_BACKENDS_BASE_H
#include "alMain.h"
struct ALCbackendVtable;
typedef struct ALCbackend {
const struct ALCbackendVtable *vtbl;
ALCdevice *mDevice;
} ALCbackend;
struct ALCbackendVtable {
void (*const Destruct)(ALCbackend *state);
ALCenum (*const open)(ALCbackend*, const ALCchar*);
void (*const close)(ALCbackend*);
ALCboolean (*reset)(ALCbackend*);
ALCboolean (*start)(ALCbackend*);
void (*stop)(ALCbackend*);
ALint64 (*getLatency)(ALCbackend*);
void (*const Delete)(ALCbackend *state);
};
#define DEFINE_ALCBACKEND_VTABLE(T) \
static void T##_ALCbackend_Destruct(ALCbackend *obj) \
{ T##_Destruct(STATIC_UPCAST(T, ALCbackend, obj)); } \
static ALCenum T##_ALCbackend_open(ALCbackend *obj, const ALCchar *p1) \
{ return T##_open(STATIC_UPCAST(T, ALCbackend, obj), p1); } \
static void T##_ALCbackend_close(ALCbackend *obj) \
{ T##_close(STATIC_UPCAST(T, ALCbackend, obj)); } \
static ALCboolean T##_ALCbackend_reset(ALCbackend *obj) \
{ return T##_reset(STATIC_UPCAST(T, ALCbackend, obj)); } \
static ALCboolean T##_ALCbackend_start(ALCbackend *obj) \
{ return T##_start(STATIC_UPCAST(T, ALCbackend, obj)); } \
static void T##_ALCbackend_stop(ALCbackend *obj) \
{ T##_stop(STATIC_UPCAST(T, ALCbackend, obj)); } \
static ALint64 T##_ALCbackend_getLatency(ALCbackend *obj) \
{ return T##_getLatency(STATIC_UPCAST(T, ALCbackend, obj)); } \
static void T##_ALCbackend_Delete(ALCbackend *obj) \
{ T##_Delete(STATIC_UPCAST(T, ALCbackend, obj)); } \
\
static const struct ALCbackendVtable T##_ALCbackend_vtable = { \
T##_ALCbackend_Destruct, \
\
T##_ALCbackend_open, \
T##_ALCbackend_close, \
T##_ALCbackend_reset, \
T##_ALCbackend_start, \
T##_ALCbackend_stop, \
T##_ALCbackend_getLatency, \
\
T##_ALCbackend_Delete, \
}
#endif /* AL_BACKENDS_BASE_H */
|