language: C (gcc-4.7.2)
date: 591 days 14 hours ago
link:
visibility: public
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#ifndef _DEQUE_H
#define _DEQUE_H
 
#include <stdbool.h>
 
/* `struct deque`: a circular double-ended linked list
 * The empty queue is represented by NULL.
 */
typedef struct deque deque_t;
 
/* O(1) */
void deque_forward(const struct deque **dq);
 
/* O(1) */
void deque_backward(const struct deque **dq);
 
/* O(1) */
struct deque *deque_next(struct deque *dq);
 
/* O(1) */
void *deque_value(const struct deque *dq);
 
/* Prepend a node carrying `value` to the deque `dq` which may
 * be NULL, in which case a new deque is created.
 * O(1)
 */
void deque_prepend(struct deque **dq, void *value); 
 
/* O(1) */
void deque_append(struct deque **dq, void *value); 
 
/* O(1) */
void *deque_pop_front(struct deque **dq); 
 
/* O(1) */
void *deque_pop_back(struct deque **dq); 
 
/* O(1) */
bool deque_empty(const struct deque *dq); 
 
/* O(n) */
int deque_length(const struct deque *dq); 
 
/* O(n) */
void deque_free(struct deque **dq); 
 
 
/* Insert in sorted order.
 * Use `cmp` for comparison, called as `cmp(ctx, value, node->value)`
 * O(n)
 */
void deque_insert_sorted(struct deque **dq, void *value, void *ctx,
                         int (*cmp)(void *, void *, void *)); 
 
/* Return the stored value or NULL.
 * Use `cmp` for comparison, called as `cmp(ctx, value, node->value)`
 * O(n)
 */
void *deque_contains(const struct deque *dq, void *value, void *ctx,
                     int (*cmp)(void *, void *, void*)); 
 
/* Append the contents of `from`, while consuming it, to `to`.
 * O(n)
 */
void deque_concat(struct deque **to, struct deque **from);
 
/* Merge `p` and `q` in sorted order into `mq` by while consuming them.
 * `p` and `q` will be empty after merge.
 * Use `cmp` for compairson, called as `cmp(ctx, value, node->value)`
 * O(n)
 */
void deque_merge(struct deque **mq, struct deque **p, struct deque **q,
                 void *ctx, int (*cmp)(void *, void *, void *));
 
/* Apply `f` to each node's value in forward succession.
 */
void deque_forward_each(const struct deque *dq, void (*f)(void *)); 
 
/* Map `f` on each node's value in forward succession, as:
 *  value = f(ctx, value)
 */
void deque_forward_map(struct deque *dq, void *ctx, void *(*f)(void *, void *)); 
 
/* Like `deque_forward_map` but reverse */
void deque_backward_map(struct deque *dq, void *ctx, void *(*f)(void *, void *)); 
 
 
/* Calls `free(value)` and returns `NULL`.
 * Appropriate for `deque_forward_map` to free elements.
 */
void *deque_free_value(void *ctx, void *value); 
 
int deque_strcmp(void *ctx, void *sa, void *sb); 
 
 
#endif /* _DEQUE_H */
 
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status