Преглед изворни кода

world: use list_for_each_safe()

Daniele Bartolini пре 6 година
родитељ
комит
b00a52d3ef
2 измењених фајлова са 8 додато и 1 уклоњено
  1. 6 0
      src/core/list.h
  2. 2 1
      src/world/world.cpp

+ 6 - 0
src/core/list.h

@@ -49,4 +49,10 @@ namespace list
 #define list_for_each(cur, head)                             \
 #define list_for_each(cur, head)                             \
 	for (cur = (head)->next; cur != (head); cur = cur->next)
 	for (cur = (head)->next; cur != (head); cur = cur->next)
 
 
+#define list_for_each_safe(cur, tmp, head)    \
+	for ( cur = (head)->next, tmp = cur->next \
+		; cur != (head)                       \
+		; cur = tmp, tmp = cur->next          \
+		)
+
 } // namespace crown
 } // namespace crown

+ 2 - 1
src/world/world.cpp

@@ -67,7 +67,8 @@ World::~World()
 {
 {
 	// Destroy loaded levels
 	// Destroy loaded levels
 	ListNode* cur;
 	ListNode* cur;
-	list_for_each(cur, &_levels)
+	ListNode* tmp;
+	list_for_each_safe(cur, tmp, &_levels)
 	{
 	{
 		Level* level = (Level*)container_of(cur, Level, _node);
 		Level* level = (Level*)container_of(cur, Level, _node);
 		CE_DELETE(*_allocator, level);
 		CE_DELETE(*_allocator, level);