aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-01-05 01:55:27 -0800
committerGarrett D'Amore <garrett@damore.org>2017-01-05 01:55:27 -0800
commit5d0fb985db60c0807efc76f05edc8d4d3e5ffa95 (patch)
treeddb150db90c1e72d6d8b3ecf0e3ad8e58b751fe5 /src/core
parente1f991bd194dcbc8f2547ac4f583c998c727a1ec (diff)
downloadnng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.tar.gz
nng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.tar.bz2
nng-5d0fb985db60c0807efc76f05edc8d4d3e5ffa95.zip
SUB protocol implemented (uses sorted linked list for topics).
Diffstat (limited to 'src/core')
-rw-r--r--src/core/list.c32
-rw-r--r--src/core/list.h2
-rw-r--r--src/core/protocol.c2
3 files changed, 36 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)
{
diff --git a/src/core/list.h b/src/core/list.h
index a6540f5e..7d8b50be 100644
--- a/src/core/list.h
+++ b/src/core/list.h
@@ -36,6 +36,8 @@ extern void *nni_list_first(const nni_list *);
extern void *nni_list_last(const nni_list *);
extern void nni_list_append(nni_list *, void *);
extern void nni_list_prepend(nni_list *, void *);
+extern void nni_list_insert_before(nni_list *, void *, void *);
+extern void nni_list_insert_after(nni_list *, void *, void *);
extern void *nni_list_next(const nni_list *, void *);
extern void *nni_list_prev(const nni_list *, void *);
extern void nni_list_remove(nni_list *, void *);
diff --git a/src/core/protocol.c b/src/core/protocol.c
index 27430771..765c2e9a 100644
--- a/src/core/protocol.c
+++ b/src/core/protocol.c
@@ -19,11 +19,13 @@
extern nni_proto nni_pair_proto;
extern nni_proto nni_rep_proto;
extern nni_proto nni_req_proto;
+extern nni_proto nni_sub_proto;
static nni_proto *protocols[] = {
&nni_pair_proto,
&nni_rep_proto,
&nni_req_proto,
+ &nni_sub_proto,
NULL
};