aboutsummaryrefslogtreecommitdiff
path: root/linked_list.h
blob: 666524be1fc8b4b079e89f7ab522baaa2e980821 (plain)
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
#ifndef LINKED_LIST_H
#define LINKED_LIST_H

#include "macro.h"

#define LLIST(T) TP(llist__, T)
#define LINK(T)  TP(llist_link__, T)

#define LLIST_INIT(T) CONSTRUCTOR_GEN(llist, T, 0);
#define LLIST_FREE(T) TP(llist_free__, T)
#define LLIST_CONS(T) TP(llist_cons__, T)

#endif /* LINKED_LIST_H */
#ifdef TYPE

typedef struct LINK(TYPE) {
	struct LINK(TYPE)* before;
	struct LINK(TYPE)* after;
	TYPE* value;
} LINK(TYPE);

typedef struct {
	LINK(TYPE)* head;
	LINK(TYPE)* tail;
	LINK(TYPE)* cur;
	int length;
} LLIST(TYPE);

int CONSTRUCTOR_DECL ( LLIST(TYPE) );
int LLIST_FREE(TYPE) ( LLIST(TYPE)* );

int CONSTRUCTOR_DECL ( LINK(TYPE) );

int LLIST_CONS(TYPE) ( LLIST(TYPE)* lst, TYPE* val);

int DEEP_COPY(LLIST(TYPE)) ( LLIST(TYPE)* dest, LLIST(TYPE)* src );

#endif /* TYPE */