[Bf-blender-cvs] [dc40bea003b] master: Cleanup: Use LISTBASE_FOREACH macro in screen.c

Hans Goudey noreply at git.blender.org
Mon Nov 30 02:31:32 CET 2020


Commit: dc40bea003b9814c59027a29ac0651fbedd468ab
Author: Hans Goudey
Date:   Sun Nov 29 20:30:11 2020 -0500
Branches: master
https://developer.blender.org/rBdc40bea003b9814c59027a29ac0651fbedd468ab

Cleanup: Use LISTBASE_FOREACH macro in screen.c

This commit replaces while loops and for loops with the equivalent
macro. This results in much more readable code in some places,
and it's now more apparent when the situation is more complicated
than just iterating through a linked list.

===================================================================

M	source/blender/blenkernel/intern/screen.c

===================================================================

diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index f43bf3182c5..97bef99944a 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -67,11 +67,10 @@
 static void screen_free_data(ID *id)
 {
   bScreen *screen = (bScreen *)id;
-  ARegion *region;
 
   /* No animdata here. */
 
-  for (region = screen->regionbase.first; region; region = region->next) {
+  LISTBASE_FOREACH (ARegion *, region, &screen->regionbase) {
     BKE_area_region_free(NULL, region);
   }
 
@@ -325,14 +324,10 @@ static ListBase spacetypes = {NULL, NULL};
 /* not SpaceType itself */
 static void spacetype_free(SpaceType *st)
 {
-  ARegionType *art;
-  PanelType *pt;
-  HeaderType *ht;
-
-  for (art = st->regiontypes.first; art; art = art->next) {
+  LISTBASE_FOREACH (ARegionType *, art, &st->regiontypes) {
     BLI_freelistN(&art->drawcalls);
 
-    for (pt = art->paneltypes.first; pt; pt = pt->next) {
+    LISTBASE_FOREACH (PanelType *, pt, &art->paneltypes) {
       if (pt->rna_ext.free) {
         pt->rna_ext.free(pt->rna_ext.data);
       }
@@ -340,7 +335,7 @@ static void spacetype_free(SpaceType *st)
       BLI_freelistN(&pt->children);
     }
 
-    for (ht = art->headertypes.first; ht; ht = ht->next) {
+    LISTBASE_FOREACH (HeaderType *, ht, &art->headertypes) {
       if (ht->rna_ext.free) {
         ht->rna_ext.free(ht->rna_ext.data);
       }
@@ -355,9 +350,7 @@ static void spacetype_free(SpaceType *st)
 
 void BKE_spacetypes_free(void)
 {
-  SpaceType *st;
-
-  for (st = spacetypes.first; st; st = st->next) {
+  LISTBASE_FOREACH (SpaceType *, st, &spacetypes) {
     spacetype_free(st);
   }
 
@@ -366,9 +359,7 @@ void BKE_spacetypes_free(void)
 
 SpaceType *BKE_spacetype_from_id(int spaceid)
 {
-  SpaceType *st;
-
-  for (st = spacetypes.first; st; st = st->next) {
+  LISTBASE_FOREACH (SpaceType *, st, &spacetypes) {
     if (st->spaceid == spaceid) {
       return st;
     }
@@ -378,9 +369,7 @@ SpaceType *BKE_spacetype_from_id(int spaceid)
 
 ARegionType *BKE_regiontype_from_id_or_first(const SpaceType *st, int regionid)
 {
-  ARegionType *art;
-
-  for (art = st->regiontypes.first; art; art = art->next) {
+  LISTBASE_FOREACH (ARegionType *, art, &st->regiontypes) {
     if (art->regionid == regionid) {
       return art;
     }
@@ -393,9 +382,7 @@ ARegionType *BKE_regiontype_from_id_or_first(const SpaceType *st, int regionid)
 
 ARegionType *BKE_regiontype_from_id(const SpaceType *st, int regionid)
 {
-  ARegionType *art;
-
-  for (art = st->regiontypes.first; art; art = art->next) {
+  LISTBASE_FOREACH (ARegionType *, art, &st->regiontypes) {
     if (art->regionid == regionid) {
       return art;
     }
@@ -410,10 +397,8 @@ const ListBase *BKE_spacetypes_list(void)
 
 void BKE_spacetype_register(SpaceType *st)
 {
-  SpaceType *stype;
-
   /* sanity check */
-  stype = BKE_spacetype_from_id(st->spaceid);
+  SpaceType *stype = BKE_spacetype_from_id(st->spaceid);
   if (stype) {
     printf("error: redefinition of spacetype %s\n", stype->name);
     spacetype_free(stype);
@@ -432,14 +417,11 @@ bool BKE_spacetype_exists(int spaceid)
 
 void BKE_spacedata_freelist(ListBase *lb)
 {
-  SpaceLink *sl;
-  ARegion *region;
-
-  for (sl = lb->first; sl; sl = sl->next) {
+  LISTBASE_FOREACH (SpaceLink *, sl, lb) {
     SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
 
     /* free regions for pushed spaces */
-    for (region = sl->regionbase.first; region; region = region->next) {
+    LISTBASE_FOREACH (ARegion *, region, &sl->regionbase) {
       BKE_area_region_free(st, region);
     }
 
@@ -510,12 +492,10 @@ ARegion *BKE_area_region_copy(const SpaceType *st, const ARegion *region)
 /* from lb2 to lb1, lb1 is supposed to be freed */
 static void region_copylist(SpaceType *st, ListBase *lb1, ListBase *lb2)
 {
-  ARegion *region;
-
   /* to be sure */
   BLI_listbase_clear(lb1);
 
-  for (region = lb2->first; region; region = region->next) {
+  LISTBASE_FOREACH (ARegion *, region, lb2) {
     ARegion *region_new = BKE_area_region_copy(st, region);
     BLI_addtail(lb1, region_new);
   }
@@ -524,11 +504,9 @@ static void region_copylist(SpaceType *st, ListBase *lb1, ListBase *lb2)
 /* lb1 should be empty */
 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2)
 {
-  SpaceLink *sl;
-
   BLI_listbase_clear(lb1); /* to be sure */
 
-  for (sl = lb2->first; sl; sl = sl->next) {
+  LISTBASE_FOREACH (SpaceLink *, sl, lb2) {
     SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
 
     if (st && st->duplicate) {
@@ -546,12 +524,8 @@ void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2)
 /* should be replaced in future by better local data handling for threads */
 void BKE_spacedata_draw_locks(int set)
 {
-  SpaceType *st;
-
-  for (st = spacetypes.first; st; st = st->next) {
-    ARegionType *art;
-
-    for (art = st->regiontypes.first; art; art = art->next) {
+  LISTBASE_FOREACH (SpaceType *, st, &spacetypes) {
+    LISTBASE_FOREACH (ARegionType *, art, &st->regiontypes) {
       if (set) {
         art->do_lock = art->lock;
       }
@@ -575,8 +549,10 @@ ARegion *BKE_spacedata_find_region_type(const SpaceLink *slink,
   ARegion *region = NULL;
 
   BLI_assert(BLI_findindex(&area->spacedata, slink) != -1);
-  for (region = regionbase->first; region; region = region->next) {
-    if (region->regiontype == region_type) {
+
+  LISTBASE_FOREACH (ARegion *, region_iter, regionbase) {
+    if (region_iter->regiontype == region_type) {
+      region = region_iter;
       break;
     }
   }
@@ -621,10 +597,8 @@ void BKE_screen_gizmo_tag_refresh(struct bScreen *screen)
     return;
   }
 
-  ScrArea *area;
-  ARegion *region;
-  for (area = screen->areabase.first; area; area = area->next) {
-    for (region = area->regionbase.first; region; region = region->next) {
+  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+    LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
       if (region->gizmo_map != NULL) {
         region_refresh_tag_gizmomap_callback(region->gizmo_map);
       }
@@ -666,8 +640,6 @@ void BKE_area_region_panels_free(ListBase *panels)
 /* not region itself */
 void BKE_area_region_free(SpaceType *st, ARegion *region)
 {
-  uiList *uilst;
-
   if (st) {
     ARegionType *art = BKE_regiontype_from_id(st, region->regiontype);
 
@@ -685,7 +657,7 @@ void BKE_area_region_free(SpaceType *st, ARegion *region)
 
   BKE_area_region_panels_free(&region->panels);
 
-  for (uilst = region->ui_lists.first; uilst; uilst = uilst->next) {
+  LISTBASE_FOREACH (uiList *, uilst, &region->ui_lists) {
     if (uilst->dyn_data) {
       uiListDyn *dyn_data = uilst->dyn_data;
       if (dyn_data->items_filter_flags) {
@@ -715,9 +687,8 @@ void BKE_area_region_free(SpaceType *st, ARegion *region)
 void BKE_screen_area_free(ScrArea *area)
 {
   SpaceType *st = BKE_spacetype_from_id(area->spacetype);
-  ARegion *region;
 
-  for (region = area->regionbase.first; region; region = region->next) {
+  LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
     BKE_area_region_free(st, region);
   }
 
@@ -731,8 +702,7 @@ void BKE_screen_area_free(ScrArea *area)
 
 void BKE_screen_area_map_free(ScrAreaMap *area_map)
 {
-  for (ScrArea *area = area_map->areabase.first, *area_next; area; area = area_next) {
-    area_next = area->next;
+  LISTBASE_FOREACH_MUTABLE (ScrArea *, area, &area_map->areabase) {
     BKE_screen_area_free(area);
   }
 
@@ -751,10 +721,8 @@ void BKE_screen_free(bScreen *screen)
 
 ScrEdge *BKE_screen_find_edge(const bScreen *screen, ScrVert *v1, ScrVert *v2)
 {
-  ScrEdge *se;
-
   BKE_screen_sort_scrvert(&v1, &v2);
-  for (se = screen->edgebase.first; se; se = se->next) {
+  LISTBASE_FOREACH (ScrEdge *, se, &screen->edgebase) {
     if (se->v1 == v1 && se->v2 == v2) {
       return se;
     }
@@ -765,10 +733,8 @@ ScrEdge *BKE_screen_find_edge(const bScreen *screen, ScrVert *v1, ScrVert *v2)
 
 void BKE_screen_sort_scrvert(ScrVert **v1, ScrVert **v2)
 {
-  ScrVert *tmp;
-
   if (*v1 > *v2) {
-    tmp = *v1;
+    ScrVert *tmp = *v1;
     *v1 = *v2;
     *v2 = tmp;
   }
@@ -776,14 +742,9 @@ void BKE_screen_sort_scrvert(ScrVert **v1, ScrVert **v2)
 
 void BKE_screen_remove_double_scrverts(bScreen *screen)
 {
-  ScrVert *v1, *verg;
-  ScrEdge *se;
-  ScrArea *area;
-
-  verg = screen->vertbase.first;
-  while (verg) {
+  LISTBASE_FOREACH (ScrVert *, verg, &screen->vertbase) {
     if (verg->newv == NULL) { /* !!! */
-      v1 = verg->next;
+      ScrVert *v1 = verg->next;
       while (v1) {
         if (v1->newv == NULL) { /* !?! */
           if (v1->vec.x == verg->vec.x && v1->vec.y == verg->vec.y) {
@@ -794,12 +755,10 @@ void BKE_screen_remove_double_scrverts(bScreen *screen)
         v1 = v1->next;
       }
     }
-    verg = verg->next;
   }
 
   /* replace pointers in edges and faces */
-  se = screen->edgebase.first;
-  while (se) {
+  LISTBASE_FOREACH (ScrEdge *, se, &screen->edgebase) {
     if (se->v1->newv) {
       se->v1 = se->v1->newv;
     }
@@ -808,10 +767,8 @@ void BKE_screen_remove_double_scrverts(bScreen *screen)
     }
     /* edges changed: so.... */
     BKE_screen_sort_scrvert(&(se->v1), &(se->v2));
-    se = se->next;
   }
-  area = screen->areabase.first;
-  while (area) {
+  LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
     if (area->v1->newv) {
       area->v1 = area->v1->newv;
     }
@@ -824,51 +781,39 @@ void BKE_screen_remove_double_scrverts(bScreen *screen)
     if (area->v4->newv) {
       area->v4 = area->v4->newv;
     }
-    area = area->next;
   }
 
   /* remove */
-  verg = screen->vertbase.first;
-  while (verg) {
-    v1 = verg->next;
+  LISTBASE_FOREACH_MUTABLE (ScrVert *, verg, &screen->vertbase) {
     if (verg->newv) {
       BLI_remlink(&screen->vertbase, verg);
       MEM_freeN(verg);
     }
-    verg = v1;
   }
 }
 
 void BKE_screen_remove_double_scredges(bScreen *screen)
 {
-  ScrEdge *verg, *se, *sn;
-
   /* compare */
-  verg = screen->edgebase.first;
-  while (verg) {
-    se = verg->next;
+  LISTBASE_FOREACH (ScrEdge *, verg, &screen->edgebase) {
+    ScrEdge *se = verg->next;
     while (se) {
-      sn = se->next;
+      ScrEdge *sn = se->next;
       if (verg->v1 == se->v1 && verg->v2

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list