Skip to content

Commit 085c689

Browse files
committed
Add delete_after for klist
1 parent 5c4972d commit 085c689

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

klist.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@
115115
if (d) *d = p->data; \
116116
kmp_free(name, kl->mp, p); \
117117
return 0; \
118+
} \
119+
static inline int kl_delete_after_##name(kl_##name##_t *kl, \
120+
kl1_##name *c, \
121+
kltype_t *d) { \
122+
kl1_##name *p; \
123+
if (c->next == 0) return -1; \
124+
if (c->next->next == 0) return -1; \
125+
--kl->size; \
126+
p = c->next; c->next = c->next->next; \
127+
if (d) *d = p->data; \
128+
kmp_free(name, kl->mp, p); \
129+
return 0; \
118130
}
119131

120132
#define KLIST_INIT(name, kltype_t, kmpfree_t) \
@@ -131,5 +143,6 @@
131143
#define kl_destroy(name, kl) kl_destroy_##name(kl)
132144
#define kl_pushp(name, kl) kl_pushp_##name(kl)
133145
#define kl_shift(name, kl, d) kl_shift_##name(kl, d)
146+
#define kl_delete_after(name, kl, iter, d) kl_delete_after_##name(kl, iter, d)
134147

135148
#endif

test/klist_test.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ int main()
1111
kl = kl_init(32);
1212
*kl_pushp(32, kl) = 1;
1313
*kl_pushp(32, kl) = 10;
14+
*kl_pushp(32, kl) = 19;
1415
kl_shift(32, kl, 0);
16+
kl_delete_after(32, kl, kl_begin(kl), 0);
1517
for (p = kl_begin(kl); p != kl_end(kl); p = kl_next(p))
1618
printf("%d\n", kl_val(p));
1719
kl_destroy(32, kl);

0 commit comments

Comments
 (0)