[Bf-blender-cvs] [aae70f182b1] datablock_idprops: Cleanup, minor fixes and serious simplification of idprops.c

Bastien Montagne noreply at git.blender.org
Wed Mar 29 16:30:22 CEST 2017


Commit: aae70f182b1477dc9f4091cc92582ba21d4679cd
Author: Bastien Montagne
Date:   Wed Mar 29 16:21:40 2017 +0200
Branches: datablock_idprops
https://developer.blender.org/rBaae70f182b1477dc9f4091cc92582ba21d4679cd

Cleanup, minor fixes and serious simplification of idprops.c

Mostly, get rid of id_(un)register, we can just use mere id_us_plus/min
as anywhere else in code now. Also, unlink function was not actually
used.

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

M	source/blender/blenkernel/BKE_idprop.h
M	source/blender/blenkernel/intern/idprop.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesrna/intern/rna_access.c

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

diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index a338ee266d5..d86075c1317 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -82,9 +82,6 @@ void IDP_FreeString(struct IDProperty *prop) ATTR_NONNULL();
 
 /*-------- ID Type -------*/
 
-/* Registers the creation of a new ID Property */
-void IDP_id_register(struct IDProperty *prop);
-
 typedef void(*IDPWalkFunc)(void *userData, IDProperty *idp);
 
 /*-------- Group Functions -------*/
@@ -119,8 +116,6 @@ void IDP_FreeProperty(struct IDProperty *prop);
 
 void IDP_ClearProperty(IDProperty *prop);
 
-void IDP_UnlinkProperty(struct IDProperty *prop);
-
 void IDP_RelinkProperty(struct IDProperty *prop);
 
 #define IDP_Int(prop)                     ((prop)->data.val)
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index ff999bcf494..e0cf0c686ff 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -129,19 +129,26 @@ void IDP_FreeIDPArray(IDProperty *prop)
 		MEM_freeN(prop->data.pointer);
 }
 
-/*shallow copies item*/
+/* shallow copies item */
 void IDP_SetIndexArray(IDProperty *prop, int index, IDProperty *item)
 {
 	IDProperty *old;
 
 	BLI_assert(prop->type == IDP_IDPARRAY);
 
+	if (index >= prop->len || index < 0)
+		return;
+
 	old = GETPROP(prop, index);
-	if (index >= prop->len || index < 0) return;
-	if (item != old) IDP_FreeProperty(old);
-	
-	memcpy(GETPROP(prop, index), item, sizeof(IDProperty));
-	IDP_id_register(prop);
+	if (item != old) {
+		IDP_FreeProperty(old);
+
+		memcpy(old, item, sizeof(IDProperty));
+
+		if (old->type == IDP_ID) {
+			id_us_plus(IDP_Id(old));
+		}
+	}
 }
 
 IDProperty *IDP_GetIndexArray(IDProperty *prop, int index)
@@ -375,20 +382,6 @@ static IDProperty *IDP_CopyString(const IDProperty *prop)
 	return newp;
 }
 
-static IDProperty *IDP_CopyID(const IDProperty *prop)
-{
-	IDProperty *newp;
-
-	BLI_assert(prop->type == IDP_ID);
-	newp = idp_generic_copy(prop);
-
-	if (IDP_Id(prop)) {
-		newp->data.pointer = (ID *)IDP_Id(prop);
-		IDP_id_register(newp);
-	}
-	return newp;
-}
-
 void IDP_AssignString(IDProperty *prop, const char *st, int maxlen)
 {
 	int stlen;
@@ -451,41 +444,17 @@ void IDP_FreeString(IDProperty *prop)
 /** \name IDProperty ID API
  * \{ */
 
-void IDP_id_register(IDProperty *prop)
+static IDProperty *IDP_CopyID(const IDProperty *prop)
 {
-	switch (prop->type)
-	{
-		case IDP_ID:
-			IDP_Id(prop);
-			if (!IDP_Id(prop))
-				break;
-			id_us_plus(IDP_Id(prop));
-			break;
-		case IDP_IDPARRAY:
-			for (int i = 0; i < prop->len; i++) {
-				IDProperty *inner = GETPROP(prop, i);
-				if (inner->type != IDP_ID) continue;
-				id_us_plus(IDP_Id(inner));
-			}
-			break;
-	}
-}
+	IDProperty *newp;
 
-static void IDP_id_unregister(IDProperty *prop)
-{
-	switch(prop->type) {
-		case IDP_ID:
-			if (IDP_Id(prop)) {
-				id_us_min(IDP_Id(prop));
-			}
-			break;
-		case IDP_IDPARRAY:
-			for (int i = 0; i < prop->len; i++) {
-				IDProperty *inner = GETPROP(prop, i);
-				if (inner->type == IDP_ID)
-					id_us_min(IDP_Id(inner));
-			}
-	}
+	BLI_assert(prop->type == IDP_ID);
+	newp = idp_generic_copy(prop);
+
+	newp->data.pointer = prop->data.pointer;
+	id_us_plus(IDP_Id(newp));
+
+	return newp;
 }
 
 /** \} */
@@ -815,9 +784,9 @@ void IDP_RelinkProperty(struct IDProperty *prop)
 		{
 			ID *id = IDP_Id(prop);
 			if (id && id->newid) {
-				IDP_id_unregister(prop);
+				id_us_min(IDP_Id(prop));
 				prop->data.pointer = id->newid;
-				IDP_id_register(prop);
+				id_us_plus(IDP_Id(prop));
 			}
 			break;
 		}
@@ -923,7 +892,7 @@ bool IDP_EqualsProperties_ex(IDProperty *prop1, IDProperty *prop2, const bool is
 			return true;
 		}
 		case IDP_ID:
-			return IDP_Id(prop1) == IDP_Id(prop2) ? true : false;
+			return (IDP_Id(prop1) == IDP_Id(prop2));
 		default:
 			/* should never get here */
 			BLI_assert(0);
@@ -1047,9 +1016,9 @@ IDProperty *IDP_New(const char type, const IDPropertyTemplate *val, const char *
 		case IDP_ID:
 		{
 			prop = MEM_callocN(sizeof(IDProperty), "IDProperty datablock");
-			prop->data.pointer = (void*)val->id;
+			prop->data.pointer = (void *)val->id;
 			prop->type = IDP_ID;
-			IDP_id_register(prop);
+			id_us_plus(IDP_Id(prop));
 			break;
 		}
 		default:
@@ -1066,9 +1035,8 @@ IDProperty *IDP_New(const char type, const IDPropertyTemplate *val, const char *
 }
 
 /**
- * \note this will free all child properties of list arrays and groups!
- * Also, note that this does NOT unlink anything!  Plus it doesn't free
- * the actual struct IDProperty struct either.
+ * \note This will free allocated data, all child properties of arrays and groups, and unlink IDs!
+ * But it does not free the actual IDProperty struct itself.
  */
 void IDP_FreeProperty(IDProperty *prop)
 {
@@ -1086,46 +1054,16 @@ void IDP_FreeProperty(IDProperty *prop)
 			IDP_FreeIDPArray(prop);
 			break;
 		case IDP_ID:
-			IDP_id_unregister(prop);
+			id_us_min(IDP_Id(prop));
 			break;
 	}
 }
 
 void IDP_ClearProperty(IDProperty *prop)
 {
-	IDP_UnlinkProperty(prop);
 	IDP_FreeProperty(prop);
 	prop->data.pointer = NULL;
 	prop->len = prop->totallen = 0;
 }
 
-/**
- * Unlinks any struct IDProperty<->ID linkage that might be going on.
- */
-void IDP_UnlinkProperty(IDProperty *prop)
-{
-	int i;
-	IDProperty *idp_loop;
-
-	if (!prop) return;
-
-	switch (prop->type) {
-		case IDP_ID:
-			IDP_id_unregister(prop);
-			prop->data.pointer = NULL;
-			break;
-		case IDP_IDPARRAY:
-			idp_loop = IDP_Array(prop);
-			for (i = 0; i < prop->len; i++) {
-				IDP_UnlinkProperty(&(idp_loop[i]));
-			}
-			break;
-		case IDP_GROUP:
-			for (idp_loop = prop->data.group.first; idp_loop; idp_loop = idp_loop->next) {
-				IDP_UnlinkProperty(idp_loop);
-			}
-			break;
-	}
-}
-
 /** \} */
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a3eea276478..ef3f6b82cf9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2141,13 +2141,11 @@ static void IDP_LibLinkProperty(IDProperty *prop, FileData *fd)
 	switch (prop->type) {
 		case IDP_ID: /* PointerProperty */
 		{
-			void *newaddr = newlibadr(fd, NULL, IDP_Id(prop));
-			if (IDP_Id(prop) && !newaddr) {
-				if (G.debug)
-					printf("Error while loading \"%s\". Data not found in file!\n", prop->name);
+			void *newaddr = newlibadr_us(fd, NULL, IDP_Id(prop));
+			if (IDP_Id(prop) && !newaddr && G.debug) {
+				printf("Error while loading \"%s\". Data not found in file!\n", prop->name);
 			}
 			prop->data.pointer = newaddr;
-			IDP_id_register(prop);
 			break;
 		}
 		case IDP_IDPARRAY: /* CollectionProperty */
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 4f4df44b73e..7c7e7d3c7c3 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -3021,12 +3021,14 @@ void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr
 		return;
 	}
 
-	// RNA
-	if (pprop->set && !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
-		 !((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data)) {
+	/* RNA */
+	if (pprop->set &&
+	    !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
+	    !((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data))
+	{
 		pprop->set(ptr, ptr_value);
 	}
-	// IDProperty
+	/* IDProperty */
 	else if (prop->flag & PROP_EDITABLE) {
 		IDPropertyTemplate val = { 0 };
 		IDProperty *group;




More information about the Bf-blender-cvs mailing list