Explorar o código

change in ua_list
Change makes it possible to iterate through list and delete the current element affecting the iterate method

Florian Palm %!s(int64=10) %!d(string=hai) anos
pai
achega
a8af65555e
Modificáronse 1 ficheiros con 6 adicións e 2 borrados
  1. 6 2
      src/util/ua_list.c

+ 6 - 2
src/util/ua_list.c

@@ -171,14 +171,16 @@ UA_Int32 UA_list_destroy(UA_list_List* list, UA_list_PayloadVisitor visitor) {
 
 UA_Int32 UA_list_iterateElement(UA_list_List* const list, UA_list_ElementVisitor visitor) {
 	UA_list_Element* current;
+	UA_list_Element* next = UA_NULL;
 	if(list==UA_NULL)
 		return UA_ERROR;
 	current = list->first;
 	while(current){
+		next=current->next;
 		if(visitor){
 			(*visitor)(current);
 		}
-		current=current->next;
+		current = next;
 	}
 	return UA_NO_ERROR;
 }
@@ -196,14 +198,16 @@ UA_Int32 UA_list_iterateElement(UA_list_List* const list, UA_list_ElementVisitor
 /** ANSI C forbids function nesting - reworked ugly version **/
 UA_Int32 UA_list_iteratePayload(UA_list_List* const list, UA_list_PayloadVisitor visitor){
 	UA_list_Element* current;
+	UA_list_Element* next = UA_NULL;
 	if(list==UA_NULL)
 		return UA_ERROR;
 	current = list->first;
 	while(current){
+		next = current->next;
 		if(visitor){
 			(*visitor)(current->payload);
 		}
-		current=current->next;
+		current = next;
 	}
 	return UA_NO_ERROR;
 }