-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathal_obj.h
59 lines (47 loc) · 1.62 KB
/
al_obj.h
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
#ifndef __AL_OBJ_H__
#define __AL_OBJ_H__
#ifdef __cplusplus
extern "C" {
#endif
#define AL_OBJ_TYPE_NULL 0
#define AL_OBJ_TYPE_ATOM 1
#define AL_OBJ_TYPE_LIST 2
#define AL_OBJ_TYPE_ALIST 4
struct _al_obj
{
void *obj;
char type;
};
typedef struct _al_obj al_obj;
#include "al_obj.h"
#define AL_OBJ_NULL ((al_obj){NULL, 0})
al_obj al_obj_copy(al_obj env, al_obj b);
al_obj al_obj_isIndexable(al_obj env, al_obj b);
al_obj al_obj_nth(al_obj env, al_obj b, al_obj n);
al_obj al_obj_rest(al_obj env, al_obj b);
al_obj al_obj_length(al_obj env, al_obj b);
al_obj al_obj_eql(al_obj env, al_obj b1, al_obj b2);
al_obj al_obj_eqv(al_obj env, al_obj b1, al_obj b2);
al_obj al_obj_apply(al_obj env, al_obj fn, al_obj applicator, al_obj applicand, al_obj context);
al_obj al_obj_eval(al_obj env, al_obj o, al_obj context);
//////////////////////////////////////////////////
// C API
//////////////////////////////////////////////////
//al_obj cal_obj_alloc(al_obj env, void *obj, char type);
//void *cal_obj_getObj(al_obj env, al_obj obj);
//char cal_obj_getType(al_obj env, al_obj obj);
#define cal_obj_alloc(_r, _obj, _type) ((al_obj){(_obj), (_type)})
#define cal_obj_getObj(_r, _obj) ((_obj).obj)
#define cal_obj_getType(_r, _obj) ((_obj).type)
char *cal_obj_getTypeName(al_obj env, al_obj obj);
int cal_obj_isIndexable(al_obj env, al_obj b);
al_obj cal_obj_nth(al_obj env, al_obj b, int n);
int cal_obj_length(al_obj env, al_obj b);
int cal_obj_eql(al_obj env, al_obj b1, al_obj b2);
int cal_obj_eqv(al_obj env, al_obj b1, al_obj b2);
int cal_obj_print(al_obj env, al_obj o);
int cal_obj_println(al_obj env, al_obj o);
#ifdef __cplusplus
}
#endif
#endif