[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49989] trunk/blender/source/blender: utility functions: BLI_findptr, BLI_rfindptr --- use for finding an item in a linked list by a pointer.
Campbell Barton
ideasman42 at gmail.com
Sat Aug 18 18:16:13 CEST 2012
Revision: 49989
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49989
Author: campbellbarton
Date: 2012-08-18 16:16:13 +0000 (Sat, 18 Aug 2012)
Log Message:
-----------
utility functions: BLI_findptr, BLI_rfindptr --- use for finding an item in a linked list by a pointer.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/anim.c
trunk/blender/source/blender/blenkernel/intern/group.c
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/blenlib/BLI_listbase.h
trunk/blender/source/blender/blenlib/intern/listbase.c
trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
trunk/blender/source/blender/editors/interface/resources.c
trunk/blender/source/blender/editors/object/object_edit.c
trunk/blender/source/blender/editors/object/object_modifier.c
trunk/blender/source/blender/editors/object/object_select.c
trunk/blender/source/blender/editors/sculpt_paint/sculpt_undo.c
Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -1279,9 +1279,9 @@
if (part->dup_group == NULL || part->dup_group->gobject.first == NULL)
return;
- for (go = part->dup_group->gobject.first; go; go = go->next)
- if (go->ob == par)
- return;
+ if (BLI_findptr(&part->dup_group->gobject, par, offsetof(GroupObject, ob))) {
+ return;
+ }
}
/* if we have a hair particle system, use the path cache */
Modified: trunk/blender/source/blender/blenkernel/intern/group.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/group.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/blenkernel/intern/group.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -161,11 +161,13 @@
{
GroupObject *go;
- if (group == NULL || ob == NULL) return 0;
+ if (group == NULL || ob == NULL) {
+ return FALSE;
+ }
/* check if the object has been added already */
- for (go = group->gobject.first; go; go = go->next) {
- if (go->ob == ob) return 0;
+ if (BLI_findptr(&group->gobject, ob, offsetof(GroupObject, ob))) {
+ return FALSE;
}
go = MEM_callocN(sizeof(GroupObject), "groupobject");
@@ -173,7 +175,7 @@
go->ob = ob;
- return 1;
+ return TRUE;
}
int add_to_group(Group *group, Object *object, Scene *scene, Base *base)
@@ -239,15 +241,11 @@
int object_in_group(Object *ob, Group *group)
{
- GroupObject *go;
-
- if (group == NULL || ob == NULL) return 0;
-
- for (go = group->gobject.first; go; go = go->next) {
- if (go->ob == ob)
- return 1;
+ if (group == NULL || ob == NULL) {
+ return FALSE;
}
- return 0;
+
+ return (BLI_findptr(&group->gobject, ob, offsetof(GroupObject, ob)) != NULL);
}
Group *find_group(Object *ob, Group *group)
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -550,14 +550,7 @@
Base *BKE_scene_base_find(Scene *scene, Object *ob)
{
- Base *base;
-
- base = scene->base.first;
- while (base) {
- if (base->object == ob) return base;
- base = base->next;
- }
- return NULL;
+ return BLI_findptr(&scene->base, ob, offsetof(Base, object));
}
void BKE_scene_set_background(Main *bmain, Scene *scene)
@@ -582,10 +575,10 @@
/* group flags again */
for (group = bmain->group.first; group; group = group->id.next) {
- go = group->gobject.first;
- while (go) {
- if (go->ob) go->ob->flag |= OB_FROMGROUP;
- go = go->next;
+ for (go = group->gobject.first; go; go = go->next) {
+ if (go->ob) {
+ go->ob->flag |= OB_FROMGROUP;
+ }
}
}
Modified: trunk/blender/source/blender/blenlib/BLI_listbase.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_listbase.h 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/blenlib/BLI_listbase.h 2012-08-18 16:16:13 UTC (rev 49989)
@@ -48,11 +48,13 @@
void *BLI_findlink(const struct ListBase *listbase, int number);
void *BLI_findstring(const struct ListBase *listbase, const char *id, const int offset);
void *BLI_findstring_ptr(const struct ListBase *listbase, const char *id, const int offset);
+void *BLI_findptr(const struct ListBase *listbase, const void *ptr, const int offset);
/* find backwards */
void *BLI_rfindlink(const struct ListBase *listbase, int number);
void *BLI_rfindstring(const struct ListBase *listbase, const char *id, const int offset);
void *BLI_rfindstring_ptr(const struct ListBase *listbase, const char *id, const int offset);
+void *BLI_rfindptr(const struct ListBase *listbase, const void *ptr, const int offset);
void BLI_freelistN(struct ListBase *listbase);
void BLI_addtail(struct ListBase *listbase, void *vlink);
Modified: trunk/blender/source/blender/blenlib/intern/listbase.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/listbase.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/blenlib/intern/listbase.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -439,6 +439,44 @@
return NULL;
}
+void *BLI_findptr(const ListBase *listbase, const void *ptr, const int offset)
+{
+ Link *link = NULL;
+ const void *ptr_iter;
+
+ if (listbase == NULL) return NULL;
+
+ for (link = listbase->first; link; link = link->next) {
+ /* exact copy of BLI_findstring(), except for this line */
+ ptr_iter = *((const char **)(((const char *)link) + offset));
+
+ if (ptr == ptr_iter) {
+ return link;
+ }
+ }
+
+ return NULL;
+}
+/* same as above but find reverse */
+void *BLI_rfindptr(const ListBase *listbase, const void *ptr, const int offset)
+{
+ Link *link = NULL;
+ const void *ptr_iter;
+
+ if (listbase == NULL) return NULL;
+
+ for (link = listbase->last; link; link = link->prev) {
+ /* exact copy of BLI_rfindstring(), except for this line */
+ ptr_iter = *((const char **)(((const char *)link) + offset));
+
+ if (ptr == ptr_iter) {
+ return link;
+ }
+ }
+
+ return NULL;
+}
+
int BLI_findstringindex(const ListBase *listbase, const char *id, const int offset)
{
Link *link = NULL;
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -31,6 +31,8 @@
* that should be addressed eventually.
*/
+#include <stddef.h>
+
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
@@ -708,28 +710,19 @@
/* --- macro wrapped funcs --- */
int _bm_select_history_check(BMesh *bm, const BMHeader *ele)
{
- BMEditSelection *ese;
-
- for (ese = bm->selected.first; ese; ese = ese->next) {
- if (ese->ele == (BMElem *)ele) {
- return TRUE;
- }
- }
-
- return FALSE;
+ return (BLI_findptr(&bm->selected, ele, offsetof(BMEditSelection, ele)) != NULL);
}
int _bm_select_history_remove(BMesh *bm, BMHeader *ele)
{
- BMEditSelection *ese;
- for (ese = bm->selected.first; ese; ese = ese->next) {
- if (ese->ele == (BMElem *)ele) {
- BLI_freelinkN(&(bm->selected), ese);
- return TRUE;
- }
+ BMEditSelection *ese = BLI_findptr(&bm->selected, ele, offsetof(BMEditSelection, ele));
+ if (ese) {
+ BLI_freelinkN(&bm->selected, ese);
+ return TRUE;
}
-
- return FALSE;
+ else {
+ return FALSE;
+ }
}
void _bm_select_history_store_notest(BMesh *bm, BMHeader *ele)
Modified: trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_paint.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_paint.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -1667,14 +1667,7 @@
static int gpencil_area_exists(bContext *C, ScrArea *sa_test)
{
bScreen *sc = CTX_wm_screen(C);
- ScrArea *sa;
-
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- if (sa == sa_test)
- return 1;
- }
-
- return 0;
+ return (BLI_findindex(&sc->areabase, sa_test) != -1);
}
static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op)
Modified: trunk/blender/source/blender/editors/interface/resources.c
===================================================================
--- trunk/blender/source/blender/editors/interface/resources.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/editors/interface/resources.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -643,9 +643,7 @@
bTheme *btheme;
/* we search for the theme with name Default */
- for (btheme = U.themes.first; btheme; btheme = btheme->next) {
- if (strcmp("Default", btheme->name) == 0) break;
- }
+ btheme = BLI_findstring(&U.themes, "Default", offsetof(bTheme, name));
if (btheme == NULL) {
btheme = MEM_callocN(sizeof(bTheme), "theme");
Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/editors/object/object_edit.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -1720,13 +1720,15 @@
CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects)
{
if (ob != ob_iter) {
- if (type == COPY_PROPERTIES_REPLACE)
+ if (type == COPY_PROPERTIES_REPLACE) {
copy_properties(&ob_iter->prop, &ob->prop);
-
- /* merge - the default when calling with no argument */
- else
- for (prop = ob->prop.first; prop; prop = prop->next)
+ }
+ else {
+ /* merge - the default when calling with no argument */
+ for (prop = ob->prop.first; prop; prop = prop->next) {
set_ob_property(ob_iter, prop);
+ }
+ }
}
}
CTX_DATA_END;
Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c 2012-08-18 15:46:32 UTC (rev 49988)
+++ trunk/blender/source/blender/editors/object/object_modifier.c 2012-08-18 16:16:13 UTC (rev 49989)
@@ -268,17 +268,12 @@
static int object_modifier_remove(Main *bmain, Object *ob, ModifierData *md,
int *sort_depsgraph)
{
- ModifierData *obmd;
-
/* It seems on rapid delete it is possible to
* get called twice on same modifier, so make
* sure it is in list. */
- for (obmd = ob->modifiers.first; obmd; obmd = obmd->next)
- if (obmd == md)
- break;
-
- if (!obmd)
+ if (BLI_findindex(&ob->modifiers, md) != -1) {
return 0;
+ }
/* special cases */
if (md->type == eModifierType_ParticleSystem) {
Modified: trunk/blender/source/blender/editors/object/object_select.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_select.c 2012-08-18 15:46:32 UTC (rev 49988)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list