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 */ |
I2lmbmRlZiBfREVRVUVfSAojZGVmaW5lIF9ERVFVRV9ICgojaW5jbHVkZSA8c3RkYm9vbC5oPgoKLyogYHN0cnVjdCBkZXF1ZWA6IGEgY2lyY3VsYXIgZG91YmxlLWVuZGVkIGxpbmtlZCBsaXN0CiAqIFRoZSBlbXB0eSBxdWV1ZSBpcyByZXByZXNlbnRlZCBieSBOVUxMLgogKi8KdHlwZWRlZiBzdHJ1Y3QgZGVxdWUgZGVxdWVfdDsKCi8qIE8oMSkgKi8Kdm9pZCBkZXF1ZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkZXF1ZSAqKmRxKTsKCi8qIE8oMSkgKi8Kdm9pZCBkZXF1ZV9iYWNrd2FyZChjb25zdCBzdHJ1Y3QgZGVxdWUgKipkcSk7CgovKiBPKDEpICovCnN0cnVjdCBkZXF1ZSAqZGVxdWVfbmV4dChzdHJ1Y3QgZGVxdWUgKmRxKTsKCi8qIE8oMSkgKi8Kdm9pZCAqZGVxdWVfdmFsdWUoY29uc3Qgc3RydWN0IGRlcXVlICpkcSk7CgovKiBQcmVwZW5kIGEgbm9kZSBjYXJyeWluZyBgdmFsdWVgIHRvIHRoZSBkZXF1ZSBgZHFgIHdoaWNoIG1heQogKiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGEgbmV3IGRlcXVlIGlzIGNyZWF0ZWQuCiAqIE8oMSkKICovCnZvaWQgZGVxdWVfcHJlcGVuZChzdHJ1Y3QgZGVxdWUgKipkcSwgdm9pZCAqdmFsdWUpOyAKCi8qIE8oMSkgKi8Kdm9pZCBkZXF1ZV9hcHBlbmQoc3RydWN0IGRlcXVlICoqZHEsIHZvaWQgKnZhbHVlKTsgCgovKiBPKDEpICovCnZvaWQgKmRlcXVlX3BvcF9mcm9udChzdHJ1Y3QgZGVxdWUgKipkcSk7IAoKLyogTygxKSAqLwp2b2lkICpkZXF1ZV9wb3BfYmFjayhzdHJ1Y3QgZGVxdWUgKipkcSk7IAoKLyogTygxKSAqLwpib29sIGRlcXVlX2VtcHR5KGNvbnN0IHN0cnVjdCBkZXF1ZSAqZHEpOyAKCi8qIE8obikgKi8KaW50IGRlcXVlX2xlbmd0aChjb25zdCBzdHJ1Y3QgZGVxdWUgKmRxKTsgCgovKiBPKG4pICovCnZvaWQgZGVxdWVfZnJlZShzdHJ1Y3QgZGVxdWUgKipkcSk7IAoKCi8qIEluc2VydCBpbiBzb3J0ZWQgb3JkZXIuCiAqIFVzZSBgY21wYCBmb3IgY29tcGFyaXNvbiwgY2FsbGVkIGFzIGBjbXAoY3R4LCB2YWx1ZSwgbm9kZS0+dmFsdWUpYAogKiBPKG4pCiAqLwp2b2lkIGRlcXVlX2luc2VydF9zb3J0ZWQoc3RydWN0IGRlcXVlICoqZHEsIHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjbXApKHZvaWQgKiwgdm9pZCAqLCB2b2lkICopKTsgCgovKiBSZXR1cm4gdGhlIHN0b3JlZCB2YWx1ZSBvciBOVUxMLgogKiBVc2UgYGNtcGAgZm9yIGNvbXBhcmlzb24sIGNhbGxlZCBhcyBgY21wKGN0eCwgdmFsdWUsIG5vZGUtPnZhbHVlKWAKICogTyhuKQogKi8Kdm9pZCAqZGVxdWVfY29udGFpbnMoY29uc3Qgc3RydWN0IGRlcXVlICpkcSwgdm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKICAgICAgICAgICAgICAgICAgICAgaW50ICgqY21wKSh2b2lkICosIHZvaWQgKiwgdm9pZCopKTsgCgovKiBBcHBlbmQgdGhlIGNvbnRlbnRzIG9mIGBmcm9tYCwgd2hpbGUgY29uc3VtaW5nIGl0LCB0byBgdG9gLgogKiBPKG4pCiAqLwp2b2lkIGRlcXVlX2NvbmNhdChzdHJ1Y3QgZGVxdWUgKip0bywgc3RydWN0IGRlcXVlICoqZnJvbSk7CgovKiBNZXJnZSBgcGAgYW5kIGBxYCBpbiBzb3J0ZWQgb3JkZXIgaW50byBgbXFgIGJ5IHdoaWxlIGNvbnN1bWluZyB0aGVtLgogKiBgcGAgYW5kIGBxYCB3aWxsIGJlIGVtcHR5IGFmdGVyIG1lcmdlLgogKiBVc2UgYGNtcGAgZm9yIGNvbXBhaXJzb24sIGNhbGxlZCBhcyBgY21wKGN0eCwgdmFsdWUsIG5vZGUtPnZhbHVlKWAKICogTyhuKQogKi8Kdm9pZCBkZXF1ZV9tZXJnZShzdHJ1Y3QgZGVxdWUgKiptcSwgc3RydWN0IGRlcXVlICoqcCwgc3RydWN0IGRlcXVlICoqcSwKICAgICAgICAgICAgICAgICB2b2lkICpjdHgsIGludCAoKmNtcCkodm9pZCAqLCB2b2lkICosIHZvaWQgKikpOwoKLyogQXBwbHkgYGZgIHRvIGVhY2ggbm9kZSdzIHZhbHVlIGluIGZvcndhcmQgc3VjY2Vzc2lvbi4KICovCnZvaWQgZGVxdWVfZm9yd2FyZF9lYWNoKGNvbnN0IHN0cnVjdCBkZXF1ZSAqZHEsIHZvaWQgKCpmKSh2b2lkICopKTsgCgovKiBNYXAgYGZgIG9uIGVhY2ggbm9kZSdzIHZhbHVlIGluIGZvcndhcmQgc3VjY2Vzc2lvbiwgYXM6CiAqICB2YWx1ZSA9IGYoY3R4LCB2YWx1ZSkKICovCnZvaWQgZGVxdWVfZm9yd2FyZF9tYXAoc3RydWN0IGRlcXVlICpkcSwgdm9pZCAqY3R4LCB2b2lkICooKmYpKHZvaWQgKiwgdm9pZCAqKSk7IAoKLyogTGlrZSBgZGVxdWVfZm9yd2FyZF9tYXBgIGJ1dCByZXZlcnNlICovCnZvaWQgZGVxdWVfYmFja3dhcmRfbWFwKHN0cnVjdCBkZXF1ZSAqZHEsIHZvaWQgKmN0eCwgdm9pZCAqKCpmKSh2b2lkICosIHZvaWQgKikpOyAKCgovKiBDYWxscyBgZnJlZSh2YWx1ZSlgIGFuZCByZXR1cm5zIGBOVUxMYC4KICogQXBwcm9wcmlhdGUgZm9yIGBkZXF1ZV9mb3J3YXJkX21hcGAgdG8gZnJlZSBlbGVtZW50cy4KICovCnZvaWQgKmRlcXVlX2ZyZWVfdmFsdWUodm9pZCAqY3R4LCB2b2lkICp2YWx1ZSk7IAoKaW50IGRlcXVlX3N0cmNtcCh2b2lkICpjdHgsIHZvaWQgKnNhLCB2b2lkICpzYik7IAoKCiNlbmRpZiAvKiBfREVRVUVfSCAqLwo=
/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
-
result: Compilation error (maybe you wish to see an example for C)


