v = listgetdata (node);
if (v->d_N > vertex->d_N)
{
- list_add_node_prev (spftree->tents, node, vertex);
+ listnode_add_before (spftree->tents, node, vertex);
break;
}
else if (v->d_N == vertex->d_N && v->type > vertex->type)
{
/* Tie break, add according to type */
- list_add_node_prev (spftree->tents, node, vertex);
+ listnode_add_before (spftree->tents, node, vertex);
break;
}
}
list->count++;
}
-void
+struct listnode *
listnode_add_after (struct list *list, struct listnode *pp, void *val)
{
struct listnode *nn;
pp->next = nn;
}
list->count++;
+ return nn;
}
struct listnode *
listnode_free (node);
}
-/* ospf_spf.c */
-void
-list_add_node_prev (struct list *list, struct listnode *current, void *val)
-{
- struct listnode *node;
-
- assert (val != NULL);
-
- node = listnode_new ();
- node->next = current;
- node->data = val;
-
- if (current->prev == NULL)
- list->head = node;
- else
- current->prev->next = node;
-
- node->prev = current->prev;
- current->prev = node;
-
- list->count++;
-}
-
-/* ospf_spf.c */
-void
-list_add_node_next (struct list *list, struct listnode *current, void *val)
-{
- struct listnode *node;
-
- assert (val != NULL);
-
- node = listnode_new ();
- node->prev = current;
- node->data = val;
-
- if (current->next == NULL)
- list->tail = node;
- else
- current->next->prev = node;
-
- node->next = current->next;
- current->next = node;
-
- list->count++;
-}
-
/* ospf_spf.c */
void
list_add_list (struct list *l, struct list *m)
extern void listnode_add (struct list *, void *);
extern void listnode_add_sort (struct list *, void *);
-extern void listnode_add_after (struct list *, struct listnode *, void *);
+extern struct listnode *listnode_add_after (struct list *, struct listnode *, void *);
extern struct listnode *listnode_add_before (struct list *, struct listnode *, void *);
extern void listnode_move_to_tail (struct list *, struct listnode *);
extern void listnode_delete (struct list *, void *);
extern void list_delete_node (struct list *, struct listnode *);
/* For ospf_spf.c */
-extern void list_add_node_prev (struct list *, struct listnode *, void *);
-extern void list_add_node_next (struct list *, struct listnode *, void *);
extern void list_add_list (struct list *, struct list *);
/* List iteration macro.