|
116 | 116 | kmp_free(name, kl->mp, p); \ |
117 | 117 | return 0; \ |
118 | 118 | } \ |
| 119 | + static inline kltype_t *kl_unshiftp_##name(kl_##name##_t *kl) { \ |
| 120 | + kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ |
| 121 | + q = kl->head; p->next = q; kl->head = p; \ |
| 122 | + ++kl->size; \ |
| 123 | + return &p->data; \ |
| 124 | + } \ |
119 | 125 | static inline int kl_delete_after_##name(kl_##name##_t *kl, \ |
120 | 126 | kl1_##name *c, \ |
121 | 127 | kltype_t *d) { \ |
|
127 | 133 | if (d) *d = p->data; \ |
128 | 134 | kmp_free(name, kl->mp, p); \ |
129 | 135 | return 0; \ |
| 136 | + } \ |
| 137 | + static inline kltype_t *kl_insertp_after_##name(kl_##name##_t *kl, \ |
| 138 | + kl1_##name *c) { \ |
| 139 | + if (c->next == 0) return 0; \ |
| 140 | + kl1_##name *p = kmp_alloc(name, kl->mp); \ |
| 141 | + p->next = c->next; c->next = p; \ |
| 142 | + ++kl->size; \ |
| 143 | + return &p->data; \ |
130 | 144 | } |
131 | 145 |
|
132 | 146 | #define KLIST_INIT(name, kltype_t, kmpfree_t) \ |
|
143 | 157 | #define kl_destroy(name, kl) kl_destroy_##name(kl) |
144 | 158 | #define kl_pushp(name, kl) kl_pushp_##name(kl) |
145 | 159 | #define kl_shift(name, kl, d) kl_shift_##name(kl, d) |
| 160 | +#define kl_unshiftp(name, kl) kl_unshiftp_##name(kl) |
| 161 | + |
146 | 162 | #define kl_delete_after(name, kl, iter, d) kl_delete_after_##name(kl, iter, d) |
| 163 | +#define kl_insertp_after(name, kl, iter) kl_insertp_after_##name(kl, iter) |
147 | 164 |
|
148 | 165 | #endif |
0 commit comments