[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