diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-01-05 01:55:27 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-01-05 01:55:27 -0800 |
| commit | 5d0fb985db60c0807efc76f05edc8d4d3e5ffa95 (patch) | |
| tree | ddb150db90c1e72d6d8b3ecf0e3ad8e58b751fe5 /src/core/list.c | |
| parent | e1f991bd194dcbc8f2547ac4f583c998c727a1ec (diff) | |
| download | nng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.tar.gz nng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.tar.bz2 nng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.zip | |
SUB protocol implemented (uses sorted linked list for topics).
Diffstat (limited to 'src/core/list.c')
| -rw-r--r-- | src/core/list.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/core/list.c b/src/core/list.c index ca200415..b1adf2cd 100644 --- a/src/core/list.c +++ b/src/core/list.c @@ -83,6 +83,38 @@ nni_list_prepend(nni_list *list, void *item) } +void +nni_list_insert_before(nni_list *list, void *item, void *before) +{ + nni_list_node *node = NODE(list, item); + nni_list_node *where = NODE(list, before); + + if ((node->ln_next != NULL) || (node->ln_prev != NULL)) { + nni_panic("prepending node already on a list or not inited"); + } + node->ln_next = where; + node->ln_prev = where->ln_prev; + node->ln_next->ln_prev = node; + node->ln_prev->ln_next = node; +} + + +void +nni_list_insert_after(nni_list *list, void *item, void *after) +{ + nni_list_node *node = NODE(list, item); + nni_list_node *where = NODE(list, after); + + if ((node->ln_next != NULL) || (node->ln_prev != NULL)) { + nni_panic("prepending node already on a list or not inited"); + } + node->ln_prev = where; + node->ln_next = where->ln_next; + node->ln_next->ln_prev = node; + node->ln_prev->ln_next = node; +} + + void * nni_list_next(const nni_list *list, void *item) { |
