[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54756] trunk/blender/source/blender: patch [#34103] - listbase.patch, insertlinkbefore.patch

Campbell Barton ideasman42 at gmail.com
Fri Feb 22 15:12:55 CET 2013


Revision: 54756
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54756
Author:   campbellbarton
Date:     2013-02-22 14:12:55 +0000 (Fri, 22 Feb 2013)
Log Message:
-----------
patch [#34103] - listbase.patch, insertlinkbefore.patch
from Lawrence D'Oliveiro (ldo) 


notes from tracker:
use bool for return type from BLI_remlink_safe, necessitating including BLI_utildefines.h in BLI_listbase.h
get rid of duplicate BLI_insertlink, use BLI_insertlinkafter instead.

A few places which were using BLI_insertlinkafter (actually BLI_insertlink), when it would be simpler to use BLI_insertlinkbefore instead.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/idprop.c
    trunk/blender/source/blender/blenkernel/intern/key.c
    trunk/blender/source/blender/blenkernel/intern/sca.c
    trunk/blender/source/blender/blenlib/BLI_listbase.h
    trunk/blender/source/blender/blenlib/intern/listbase.c
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/physics/particle_boids.c
    trunk/blender/source/blender/editors/physics/particle_object.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c
    trunk/blender/source/blender/makesdna/DNA_listBase.h
    trunk/blender/source/blender/makesrna/intern/rna_action.c

Modified: trunk/blender/source/blender/blenkernel/intern/idprop.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/idprop.c	2013-02-22 13:35:32 UTC (rev 54755)
+++ trunk/blender/source/blender/blenkernel/intern/idprop.c	2013-02-22 14:12:55 UTC (rev 54756)
@@ -454,7 +454,7 @@
 			if (strcmp(loop->name, prop->name) == 0) {
 				IDProperty *copy = IDP_CopyProperty(prop);
 
-				BLI_insertlink(&dest->data.group, loop, copy);
+				BLI_insertlinkafter(&dest->data.group, loop, copy);
 
 				BLI_remlink(&dest->data.group, loop);
 				IDP_FreeProperty(loop);
@@ -479,7 +479,7 @@
 {
 	IDProperty *loop;
 	if ((loop = IDP_GetPropertyFromGroup(group, prop->name))) {
-		BLI_insertlink(&group->data.group, loop, prop);
+		BLI_insertlinkafter(&group->data.group, loop, prop);
 		
 		BLI_remlink(&group->data.group, loop);
 		IDP_FreeProperty(loop);
@@ -532,7 +532,7 @@
 {
 	if (IDP_GetPropertyFromGroup(group, pnew->name) == NULL) {
 		group->len++;
-		BLI_insertlink(&group->data.group, previous, pnew);
+		BLI_insertlinkafter(&group->data.group, previous, pnew);
 		return 1;
 	}
 

Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c	2013-02-22 13:35:32 UTC (rev 54755)
+++ trunk/blender/source/blender/blenkernel/intern/key.c	2013-02-22 14:12:55 UTC (rev 54756)
@@ -246,7 +246,7 @@
 		/* find the right location and insert before */
 		for (kb2 = key->block.first; kb2; kb2 = kb2->next) {
 			if (kb2->pos > kb->pos) {
-				BLI_insertlink(&key->block, kb2->prev, kb);
+				BLI_insertlinkafter(&key->block, kb2->prev, kb);
 				break;
 			}
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/sca.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sca.c	2013-02-22 13:35:32 UTC (rev 54755)
+++ trunk/blender/source/blender/blenkernel/intern/sca.c	2013-02-22 14:12:55 UTC (rev 54756)
@@ -734,7 +734,7 @@
 		}
 		if (tmp) {
 			BLI_remlink(&ob->sensors, sens);
-			BLI_insertlink(&ob->sensors, tmp, sens);
+			BLI_insertlinkafter(&ob->sensors, tmp, sens);
 		}
 	}
 }
@@ -778,7 +778,7 @@
 			tmp = tmp->next;
 		}
 		BLI_remlink(&ob->controllers, cont);
-		BLI_insertlink(&ob->controllers, tmp, cont);
+		BLI_insertlinkafter(&ob->controllers, tmp, cont);
 	}
 }
 
@@ -818,7 +818,7 @@
 		}
 		if (tmp) {
 			BLI_remlink(&ob->actuators, act);
-			BLI_insertlink(&ob->actuators, tmp, act);
+			BLI_insertlinkafter(&ob->actuators, tmp, act);
 		}
 	}
 }

Modified: trunk/blender/source/blender/blenlib/BLI_listbase.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_listbase.h	2013-02-22 13:35:32 UTC (rev 54755)
+++ trunk/blender/source/blender/blenlib/BLI_listbase.h	2013-02-22 14:12:55 UTC (rev 54756)
@@ -32,6 +32,7 @@
  *  \ingroup bli
  */
 
+#include "BLI_utildefines.h"
 #include "DNA_listBase.h"
 //struct ListBase;
 //struct LinkData;
@@ -40,7 +41,6 @@
 extern "C" {
 #endif
 
-void BLI_insertlink(struct ListBase *listbase, void *vprevlink, void *vnewlink);
 int BLI_findindex(const struct ListBase *listbase, const void *vlink);
 int BLI_findstringindex(const struct ListBase *listbase, const char *id, const int offset);
 
@@ -59,7 +59,7 @@
 void BLI_freelistN(struct ListBase *listbase);
 void BLI_addtail(struct ListBase *listbase, void *vlink);
 void BLI_remlink(struct ListBase *listbase, void *vlink);
-int BLI_remlink_safe(struct ListBase *listbase, void *vlink);
+bool BLI_remlink_safe(struct ListBase *listbase, void *vlink);
 
 void BLI_addhead(struct ListBase *listbase, void *vlink);
 void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink);

Modified: trunk/blender/source/blender/blenlib/intern/listbase.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/listbase.c	2013-02-22 13:35:32 UTC (rev 54755)
+++ trunk/blender/source/blender/blenlib/intern/listbase.c	2013-02-22 14:12:55 UTC (rev 54756)
@@ -28,9 +28,10 @@
 
 /** \file blender/blenlib/intern/listbase.c
  *  \ingroup bli
+ *
+ * Manipulations on ListBase structs
  */
 
-
 #include <string.h>
 #include <stdlib.h>
 
@@ -41,10 +42,11 @@
 
 #include "BLI_listbase.h"
 
-
 /* implementation */
 
-/* Ripped this from blender.c */
+/**
+ * moves the entire contents of \a src onto the end of \a dst.
+ */
 void BLI_movelisttolist(ListBase *dst, ListBase *src)
 {
 	if (src->first == NULL) return;
@@ -61,6 +63,9 @@
 	src->first = src->last = NULL;
 }
 
+/**
+ * Prepends \a vlink (assumed to begin with a Link) onto listbase.
+ */
 void BLI_addhead(ListBase *listbase, void *vlink)
 {
 	Link *link = vlink;
@@ -77,6 +82,9 @@
 }
 
 
+/**
+ * Appends \a vlink (assumed to begin with a Link) onto listbase.
+ */
 void BLI_addtail(ListBase *listbase, void *vlink)
 {
 	Link *link = vlink;
@@ -93,6 +101,9 @@
 }
 
 
+/**
+ * Removes \a vlink from \a listbase. Assumes it is linked into there!
+ */
 void BLI_remlink(ListBase *listbase, void *vlink)
 {
 	Link *link = vlink;
@@ -107,18 +118,24 @@
 	if (listbase->first == link) listbase->first = link->next;
 }
 
-int BLI_remlink_safe(ListBase *listbase, void *vlink)
+/**
+ * Checks that \a vlink is linked into listbase, removing it from there if so.
+ */
+bool BLI_remlink_safe(ListBase *listbase, void *vlink)
 {
 	if (BLI_findindex(listbase, vlink) != -1) {
 		BLI_remlink(listbase, vlink);
-		return 1;
+		return true;
 	}
 	else {
-		return 0;
+		return false;
 	}
 }
 
 
+/**
+ * Removes \a vlink from listbase and disposes of it. Assumes it is linked into there!
+ */
 void BLI_freelinkN(ListBase *listbase, void *vlink)
 {
 	Link *link = vlink;
@@ -131,43 +148,11 @@
 }
 
 
-void BLI_insertlink(ListBase *listbase, void *vprevlink, void *vnewlink)
-{
-	Link *prevlink = vprevlink;
-	Link *newlink = vnewlink;
-
-	/* newlink comes after prevlink */
-	if (newlink == NULL) return;
-	if (listbase == NULL) return;
-	
-	/* empty list */
-	if (listbase->first == NULL) {
-		
-		listbase->first = newlink;
-		listbase->last = newlink;
-		return;
-	}
-	
-	/* insert before first element */
-	if (prevlink == NULL) {
-		newlink->next = listbase->first;
-		newlink->prev = NULL;
-		newlink->next->prev = newlink;
-		listbase->first = newlink;
-		return;
-	}
-
-	/* at end of list */
-	if (listbase->last == prevlink)
-		listbase->last = newlink;
-
-	newlink->next = prevlink->next;
-	prevlink->next = newlink;
-	if (newlink->next) newlink->next->prev = newlink;
-	newlink->prev = prevlink;
-}
-
-/* This uses insertion sort, so NOT ok for large list */
+/**
+ * Sorts the elements of listbase into the order defined by cmp
+ * (which should return 1 iff its first arg should come after its second arg).
+ * This uses insertion sort, so NOT ok for large list.
+ */
 void BLI_sortlist(ListBase *listbase, int (*cmp)(void *, void *))
 {
 	Link *current = NULL;
@@ -193,6 +178,10 @@
 	}
 }
 
+/**
+ * Inserts \a vnewlink immediately following \a vprevlink in \a listbase.
+ * Or, if \a vprevlink is NULL, puts \a vnewlink at the front of the list.
+ */
 void BLI_insertlinkafter(ListBase *listbase, void *vprevlink, void *vnewlink)
 {
 	Link *prevlink = vprevlink;
@@ -213,21 +202,28 @@
 	if (prevlink == NULL) {
 		newlink->prev = NULL;
 		newlink->next = listbase->first;
-		((Link *)listbase->first)->prev = newlink;
+		newlink->next->prev = newlink;
 		listbase->first = newlink;
 		return;
 	}
 
 	/* at end of list */
-	if (listbase->last == prevlink) 
+	if (listbase->last == prevlink) {
 		listbase->last = newlink;
+	}
 
 	newlink->next = prevlink->next;
 	newlink->prev = prevlink;
 	prevlink->next = newlink;
-	if (newlink->next) newlink->next->prev = newlink;
+	if (newlink->next) {
+		newlink->next->prev = newlink;
+	}
 }
 
+/**
+ * Inserts \a vnewlink immediately preceding \a vnextlink in listbase.
+ * Or, if \a vnextlink is NULL, puts \a vnewlink at the end of the list.
+ */
 void BLI_insertlinkbefore(ListBase *listbase, void *vnextlink, void *vnewlink)
 {
 	Link *nextlink = vnextlink;
@@ -254,16 +250,22 @@
 	}
 
 	/* at beginning of list */
-	if (listbase->first == nextlink)
+	if (listbase->first == nextlink) {
 		listbase->first = newlink;
+	}
 
 	newlink->next = nextlink;
 	newlink->prev = nextlink->prev;
 	nextlink->prev = newlink;
-	if (newlink->prev) newlink->prev->next = newlink;
+	if (newlink->prev) {
+		newlink->prev->next = newlink;
+	}
 }
 
 
+/**
+ * Removes and disposes of the entire contents of listbase using direct free(3).
+ */
 void BLI_freelist(ListBase *listbase)
 {
 	Link *link, *next;
@@ -282,6 +284,9 @@
 	listbase->last = NULL;
 }
 
+/**
+ * Removes and disposes of the entire contents of \a listbase using guardedalloc.
+ */
 void BLI_freelistN(ListBase *listbase)
 {
 	Link *link, *next;
@@ -300,6 +305,9 @@
 }
 
 
+/**
+ * Returns the number of elements in \a listbase.
+ */
 int BLI_countlist(const ListBase *listbase)
 {
 	Link *link;
@@ -315,6 +323,9 @@
 	return count;
 }
 
+/**
+ * Returns the nth element of \a listbase, numbering from 1.
+ */
 void *BLI_findlink(const ListBase *listbase, int number)
 {
 	Link *link = NULL;
@@ -330,6 +341,9 @@
 	return link;
 }
 
+/**
+ * Returns the nth-last element of \a listbase, numbering from 1.
+ */
 void *BLI_rfindlink(const ListBase *listbase, int number)
 {
 	Link *link = NULL;
@@ -345,6 +359,9 @@
 	return link;
 }
 
+/**
+ * Returns the position of \a vlink within \a listbase, numbering from 1, or -1 if not found.
+ */
 int BLI_findindex(const ListBase *listbase, const void *vlink)
 {
 	Link *link = NULL;
@@ -365,6 +382,10 @@
 	return -1;
 }
 
+/**
+ * Finds the first element of \a listbase which contains the null-terminated
+ * string \a id at the specified offset, returning NULL if not found.
+ */
 void *BLI_findstring(const ListBase *listbase, const char *id, const int offset)
 {
 	Link *link = NULL;
@@ -383,6 +404,10 @@
 	return NULL;
 }
 /* same as above but find reverse */
+/**
+ * Finds the last element of \a listbase which contains the
+ * null-terminated string \a id at the specified offset, returning NULL if not found.
+ */
 void *BLI_rfindstring(const ListBase *listbase, const char *id, const int offset)
 {
 	Link *link = NULL;
@@ -401,6 +426,10 @@
 	return NULL;
 }
 
+/**
+ * Finds the first element of \a listbase which contains a pointer to the
+ * null-terminated string \a id at the specified offset, returning NULL if not found.
+ */
 void *BLI_findstring_ptr(const ListBase *listbase, const char *id, const int offset)
 {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list