[Bf-blender-cvs] [367ec386d15] blender2.8: BLI_memiter: minor cleanup

Campbell Barton noreply at git.blender.org
Sun Jul 30 06:10:16 CEST 2017


Commit: 367ec386d15ef36b948b605cf70d4bfa2681f359
Author: Campbell Barton
Date:   Sun Jul 30 13:55:41 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB367ec386d15ef36b948b605cf70d4bfa2681f359

BLI_memiter: minor cleanup

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

M	source/blender/blenlib/BLI_memiter.h
M	source/blender/blenlib/intern/BLI_memiter.c

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

diff --git a/source/blender/blenlib/BLI_memiter.h b/source/blender/blenlib/BLI_memiter.h
index 96a47d53984..36877d8f4ba 100644
--- a/source/blender/blenlib/BLI_memiter.h
+++ b/source/blender/blenlib/BLI_memiter.h
@@ -34,7 +34,7 @@ extern "C"
 #include "BLI_compiler_compat.h"
 
 /* 512kb, good default for small elems. */
-#define BLI_MEMITER_DEFAULT_SIZE (2 << 18)
+#define BLI_MEMITER_DEFAULT_SIZE (1 << 19)
 
 struct BLI_memiter;
 struct BLI_memiter_chunk;
@@ -61,7 +61,7 @@ typedef struct BLI_memiter_handle {
 } BLI_memiter_handle;
 
 void  BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) ATTR_NONNULL();
-bool  BLI_memiter_iter_done(BLI_memiter_handle *iter) ATTR_NONNULL();
+bool  BLI_memiter_iter_done(const BLI_memiter_handle *iter) ATTR_NONNULL();
 void *BLI_memiter_iter_step(BLI_memiter_handle *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 
diff --git a/source/blender/blenlib/intern/BLI_memiter.c b/source/blender/blenlib/intern/BLI_memiter.c
index 4d365680e8a..c86c26f578a 100644
--- a/source/blender/blenlib/intern/BLI_memiter.c
+++ b/source/blender/blenlib/intern/BLI_memiter.c
@@ -82,7 +82,7 @@ typedef struct BLI_memiter_chunk {
 } BLI_memiter_chunk;
 
 typedef struct BLI_memiter {
-	/* A pointer to 'head' is needed*/
+	/* A pointer to 'head' is needed so we can iterate in the order allocated. */
 	struct BLI_memiter_chunk *head, *tail;
 	data_t *data_curr;
 	data_t *data_last;
@@ -136,7 +136,7 @@ static void memiter_init(BLI_memiter *mi)
  */
 BLI_memiter *BLI_memiter_create(uint chunk_size_min)
 {
-	BLI_memiter *mi = MEM_mallocN(sizeof(BLI_memiter), STRINGIFY(BLI_memiter));
+	BLI_memiter *mi = MEM_mallocN(sizeof(BLI_memiter), "BLI_memiter");
 	memiter_init(mi);
 
 	/* Small values are used for tests to check for correctness,
@@ -172,7 +172,7 @@ void *BLI_memiter_alloc(BLI_memiter *mi, uint elem_size)
 		BLI_memiter_chunk *chunk = MEM_mallocN(
 		        sizeof(BLI_memiter_chunk) +
 		        (chunk_size * sizeof(data_t)),
-		        STRINGIFY(BLI_memiter_chunk));
+		        "BLI_memiter_chunk");
 
 		if (mi->head == NULL) {
 			BLI_assert(mi->tail == NULL);
@@ -269,7 +269,7 @@ void *BLI_memiter_elem_first(BLI_memiter *mi)
 	}
 }
 
-void *BLI_memiter_elem_first_size(BLI_memiter *mi, unsigned int *r_size)
+void *BLI_memiter_elem_first_size(BLI_memiter *mi, uint *r_size)
 {
 	if (mi->head != NULL) {
 		BLI_memiter_chunk *chunk = mi->head;
@@ -303,26 +303,27 @@ void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter)
 	iter->elem_left = mi->count;
 }
 
-bool BLI_memiter_iter_done(BLI_memiter_handle *iter)
+bool BLI_memiter_iter_done(const BLI_memiter_handle *iter)
 {
 	return iter->elem_left != 0;
 }
 
-BLI_INLINE void memiter_iter_step(BLI_memiter_handle *iter)
+BLI_INLINE void memiter_chunk_step(BLI_memiter_handle *iter)
 {
-	if (UNLIKELY(iter->elem->size < 0)) {
-		BLI_memiter_chunk *chunk = (BLI_memiter_chunk *)(((data_t *)iter->elem) + iter->elem->size);
-		chunk = chunk->next;
-		iter->elem = chunk ? (BLI_memiter_elem *)chunk->data : NULL;
-		BLI_assert(iter->elem == NULL || iter->elem->size >= 0);
-	}
+	BLI_assert(iter->elem->size < 0);
+	BLI_memiter_chunk *chunk = (BLI_memiter_chunk *)(((data_t *)iter->elem) + iter->elem->size);
+	chunk = chunk->next;
+	iter->elem = chunk ? (BLI_memiter_elem *)chunk->data : NULL;
+	BLI_assert(iter->elem == NULL || iter->elem->size >= 0);
 }
 
 void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size)
 {
 	if (iter->elem_left != 0) {
 		iter->elem_left -= 1;
-		memiter_iter_step(iter);
+		if (UNLIKELY(iter->elem->size < 0)) {
+			memiter_chunk_step(iter);
+		}
 		BLI_assert(iter->elem->size >= 0);
 		uint size = (uint)iter->elem->size;
 		*r_size = size;  /* <-- only difference */
@@ -339,7 +340,9 @@ void *BLI_memiter_iter_step(BLI_memiter_handle *iter)
 {
 	if (iter->elem_left != 0) {
 		iter->elem_left -= 1;
-		memiter_iter_step(iter);
+		if (UNLIKELY(iter->elem->size < 0)) {
+			memiter_chunk_step(iter);
+		}
 		BLI_assert(iter->elem->size >= 0);
 		uint size = (uint)iter->elem->size;
 		data_t *data = iter->elem->data;




More information about the Bf-blender-cvs mailing list