[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42787] branches/bmesh/blender/source/ blender/blenlib/BLI_array.h: BLI_array_growone wasn' t always returning the new size.

Campbell Barton ideasman42 at gmail.com
Wed Dec 21 09:41:24 CET 2011


Revision: 42787
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42787
Author:   campbellbarton
Date:     2011-12-21 08:41:13 +0000 (Wed, 21 Dec 2011)
Log Message:
-----------
BLI_array_growone wasn't always returning the new size. also some formatting edits

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenlib/BLI_array.h

Modified: branches/bmesh/blender/source/blender/blenlib/BLI_array.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_array.h	2011-12-21 07:36:30 UTC (rev 42786)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_array.h	2011-12-21 08:41:13 UTC (rev 42787)
@@ -1,6 +1,4 @@
-/**
- * Array Library
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -28,43 +26,43 @@
  */
 
 /*
-this library needs to be changed to not use macros quite so heavily,
-and to be more of a complete array API.  The way arrays are
-exposed to client code as normal C arrays is very useful though, imho.
-it does require some use of macros, however.  
+ * this library needs to be changed to not use macros quite so heavily,
+ * and to be more of a complete array API.  The way arrays are
+ * exposed to client code as normal C arrays is very useful though, imho.
+ * it does require some use of macros, however.
+ *
+ * anyway, it's used a bit too heavily to simply rewrite as a
+ * more "correct" solution without macros entirely.  I originally wrote this
+ * to be very easy to use, without the normal pain of most array libraries.
+ * This was especially helpful when it came to the massive refactors necessary
+ * for bmesh, and really helped to speed the process up. - joeedh
+ *
+ * little array macro library.  example of usage:
+ *
+ * int *arr = NULL;
+ * BLI_array_declare(arr);
+ * int i;
+ *
+ * for (i=0; i<10; i++) {
+ *     BLI_array_growone(arr);
+ * 	    arr[i] = something;
+ * }
+ * BLI_array_free(arr);
+ *
+ * arrays are buffered, using double-buffering (so on each reallocation,
+ * the array size is doubled).  supposedly this should give good Big Oh
+ * behaviour, though it may not be the best in practice.
+ */
 
-anyway, it's used a bit too heavily to simply rewrite as a 
-more "correct" solution without macros entirely.  I originally wrote this
-to be very easy to use, without the normal pain of most array libraries.
-This was especially helpful when it came to the massive refactors necessary for
-bmesh, and really helped to speed the process up. - joeedh
-  
-little array macro library.  example of usage:
-
-int *arr = NULL;
-BLI_array_declare(arr);
-int i;
-
-for (i=0; i<10; i++) {
-	BLI_array_growone(arr);
-	arr[i] = something;
-}
-BLI_array_free(arr);
-
-arrays are buffered, using double-buffering (so on each reallocation,
-the array size is doubled).  supposedly this should give good Big Oh
-behaviour, though it may not be the best in practice.
-*/
-
 #define BLI_array_declare(arr)                                                \
-	int _##arr##_count=0;                                                     \
+	int   _##arr##_count = 0;                                                 \
 	void *_##arr##_tmp;                                                       \
 	void *_##arr##_static = NULL
 
 /* this will use stack space, up to maxstatic array elements, before
  * switching to dynamic heap allocation */
 #define BLI_array_staticdeclare(arr, maxstatic)                               \
-	int _##arr##_count=0;                                                     \
+	int   _##arr##_count = 0;                                                 \
 	void *_##arr##_tmp;                                                       \
 	char _##arr##_static[maxstatic*sizeof(arr)]
 
@@ -72,16 +70,16 @@
 /* this returns the entire size of the array, including any buffering. */
 #define BLI_array_totalsize_dyn(arr)  (                                       \
 	((arr)==NULL) ?                                                           \
-		0 :                                                                   \
-		MEM_allocN_len(arr) / sizeof(*arr)                                    \
+	    0 :                                                                   \
+	    MEM_allocN_len(arr) / sizeof(*arr)                                    \
 )
 
 
 #define BLI_array_totalsize(arr)  (                                           \
-	(signed int)                                                              \
+	(size_t)                                                                  \
 	(((void *)(arr) == (void *)_##arr##_static && (void *)(arr) != NULL) ?    \
-		(sizeof(_##arr##_static) / sizeof(*arr)) :                            \
-		BLI_array_totalsize_dyn(arr))                                         \
+	    (sizeof(_##arr##_static) / sizeof(*arr)) :                            \
+	    BLI_array_totalsize_dyn(arr))                                         \
 )
 
 
@@ -94,7 +92,7 @@
 	    ++_##arr##_count :                                                    \
 	    (                                                                     \
 	        (void) (_##arr##_tmp = MEM_callocN(                               \
-	                sizeof(*arr)*(_##arr##_count*2+2),                        \
+	                sizeof(*arr) * (_##arr##_count * 2 + 2),                  \
 	                #arr " " __FILE__ ":" STRINGIFY(__LINE__)                 \
 	                )                                                         \
 	                ),                                                        \
@@ -108,7 +106,7 @@
 	                ),                                                        \
 	        (void) (arr = _##arr##_tmp                                        \
 	                ),                                                        \
-	        _##arr##_count++                                                  \
+	        ++_##arr##_count                                                  \
 	    )                                                                     \
 )
 
@@ -116,23 +114,23 @@
 /* returns length of array */
 #define BLI_array_growone(arr)  (                                             \
 	((void *)(arr)==NULL && (void *)(_##arr##_static) != NULL) ?              \
-		((arr=(void*)_##arr##_static), ++_##arr##_count) :                    \
-		_bli_array_growone(arr)                                               \
+	    ((arr= (void*)_##arr##_static), ++_##arr##_count) :                   \
+	    _bli_array_growone(arr)                                               \
 )
 
 
 /* appends an item to the array. */
 #define BLI_array_append(arr, item)  (                                        \
 	(void) BLI_array_growone(arr),                                            \
-	(void) (arr[_##arr##_count-1] = item)                                     \
+	(void) (arr[_##arr##_count - 1] = item)                                   \
 )
 
 /* appends an item to the array and returns a pointer to the item in the array.
  * item is not a pointer, but actual data value.*/
 #define BLI_array_append_r(arr, item)  (                                      \
 	(void) BLI_array_growone(arr),                                            \
-	(void) (arr[_##arr##_count-1] = item),                                    \
-	(&arr[_##arr##_count-1])                                                  \
+	(void) (arr[_##arr##_count - 1] = item),                                  \
+	(&arr[_##arr##_count - 1])                                                \
 )
 
 /* grow an array by a specified number of items. */
@@ -142,22 +140,22 @@
 	    _##arr##_count += num;                                                \
 	}                                                                         \
 	else {                                                                    \
-		int _i;                                                               \
-		for (_i = 0; _i < (num); _i++) {                                      \
-			BLI_array_growone(arr);                                           \
-		}                                                                     \
+	    int _i;                                                               \
+	    for (_i = 0; _i < (num); _i++) {                                      \
+	        BLI_array_growone(arr);                                           \
+	    }                                                                     \
 	}
 
 #define BLI_array_free(arr)                                                   \
 	if (arr && (char *)arr != _##arr##_static) {                              \
-		BLI_array_fake_user(arr);                                             \
-		MEM_freeN(arr);                                                       \
+	    BLI_array_fake_user(arr);                                             \
+	    MEM_freeN(arr);                                                       \
 	}
 
 #define BLI_array_pop(arr)  (                                                 \
 	(arr&&_##arr##_count) ?                                                   \
-		arr[--_##arr##_count] :                                               \
-		0                                                                     \
+	    arr[--_##arr##_count] :                                               \
+	    0                                                                     \
 )
 
 /* resets the logical size of an array to zero, but doesn't




More information about the Bf-blender-cvs mailing list