goto END;
}
- // Reverse the list
- loc_network_list_reverse(excluded);
-
// Replace network with the first one
loc_network_unref(*network);
- *network = loc_network_list_pop(excluded);
+ *network = loc_network_list_pop_first(excluded);
// Push the rest onto the stack
+ loc_network_list_reverse(excluded);
loc_network_list_merge(enumerator->stack, excluded);
loc_network_list_unref(excluded);
loc_network_list_merge;
loc_network_list_new;
loc_network_list_pop;
+ loc_network_list_pop_first;
loc_network_list_push;
loc_network_list_ref;
loc_network_list_reverse;
struct loc_network* loc_network_list_get(struct loc_network_list* list, size_t index);
int loc_network_list_push(struct loc_network_list* list, struct loc_network* network);
struct loc_network* loc_network_list_pop(struct loc_network_list* list);
+struct loc_network* loc_network_list_pop_first(struct loc_network_list* list);
int loc_network_list_contains(struct loc_network_list* list, struct loc_network* network);
void loc_network_list_sort(struct loc_network_list* list);
void loc_network_list_reverse(struct loc_network_list* list);
return network;
}
+LOC_EXPORT struct loc_network* loc_network_list_pop_first(struct loc_network_list* list) {
+ // Return nothing when empty
+ if (loc_network_list_empty(list)) {
+ DEBUG(list->ctx, "%p: Popped empty stack\n", list);
+ return NULL;
+ }
+
+ struct loc_network* network = list->list[0];
+
+ // Move all elements to the top of the stack
+ for (unsigned int i = 0; i < --list->size; i++) {
+ list->list[i] = list->list[i+1];
+ }
+
+ DEBUG(list->ctx, "%p: Popping network %p from stack\n", list, network);
+
+ return network;
+}
+
LOC_EXPORT int loc_network_list_contains(struct loc_network_list* list, struct loc_network* network) {
for (unsigned int i = 0; i < list->size; i++) {
if (loc_network_eq(list->list[i], network))