[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55323] trunk/blender/source/blender/ blenlib: changes to BLI_buffer

Campbell Barton ideasman42 at gmail.com
Sat Mar 16 01:12:16 CET 2013


Revision: 55323
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55323
Author:   campbellbarton
Date:     2013-03-16 00:12:14 +0000 (Sat, 16 Mar 2013)
Log Message:
-----------
changes to BLI_buffer
- assert if BLI_buffer_at() is called with an out of bounds value.
- add BLI_buffer_resize_data() macro which resizes and returns a pointer to the new array.
- warn if missing call to BLI_buffer_free().

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_buffer.h
    trunk/blender/source/blender/blenlib/intern/buffer.c

Modified: trunk/blender/source/blender/blenlib/BLI_buffer.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_buffer.h	2013-03-15 22:56:24 UTC (rev 55322)
+++ trunk/blender/source/blender/blenlib/BLI_buffer.h	2013-03-16 00:12:14 UTC (rev 55323)
@@ -52,6 +52,7 @@
 };
 
 #define BLI_buffer_declare_static(type_, name_, flag_, static_count_) \
+	char name_ ## user;  /* warn for free only */ \
 	type_ *name_ ## _static_[static_count_]; \
 	BLI_Buffer name_ = { \
 	/* clear the static memory if this is a calloc'd array */ \
@@ -66,16 +67,27 @@
 
 /* never use static*/
 #define BLI_buffer_declare(type_, name_, flag_) \
+	bool name_ ## user;  /* warn for free only */ \
 	BLI_Buffer name_ = {NULL, \
 	                    sizeof(type_), \
 	                    0, \
 	                    0, \
 	                    flag_}
 
-
 #define BLI_buffer_at(buffer_, type_, index_) ( \
-	(((type_ *)(buffer_)->data)[(BLI_assert(sizeof(type_) == (buffer_)->elem_size)), index_]))
+	(((type_ *)(buffer_)->data)[ \
+	        (BLI_assert(sizeof(type_) == (buffer_)->elem_size)), \
+	        (BLI_assert(index_ >= 0 && index_ < (buffer_)->count)), \
+	        index_]))
 
+#define BLI_buffer_array(buffer_, type_) ( \
+	&(BLI_buffer_at(buffer_, type_, 0)))
+
+#define BLI_buffer_resize_data(buffer_, type_, new_count_) ( \
+	(BLI_buffer_resize(buffer_, new_count_), new_count_ ? BLI_buffer_array(buffer_, type_) : NULL))
+
+
+
 #define BLI_buffer_append(buffer_, type_, val_)  ( \
 	BLI_buffer_resize(buffer_, (buffer_)->count + 1), \
 	(BLI_buffer_at(buffer_, type_, (buffer_)->count - 1) = val_) \
@@ -85,6 +97,10 @@
 void BLI_buffer_resize(BLI_Buffer *buffer, int new_count);
 
 /* Does not free the buffer structure itself */
-void BLI_buffer_free(BLI_Buffer *buffer);
+void _bli_buffer_free(BLI_Buffer *buffer);
+#define BLI_buffer_free(name_) { \
+	_bli_buffer_free(name_); \
+	(void)name_ ## user;  /* ensure we free */ \
+} (void)0
 
 #endif  /* __BLI_BUFFER_H__ */

Modified: trunk/blender/source/blender/blenlib/intern/buffer.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/buffer.c	2013-03-15 22:56:24 UTC (rev 55322)
+++ trunk/blender/source/blender/blenlib/intern/buffer.c	2013-03-16 00:12:14 UTC (rev 55323)
@@ -70,7 +70,8 @@
 	buffer->count = new_count;
 }
 
-void BLI_buffer_free(BLI_Buffer *buffer)
+/* callers use BLI_buffer_free */
+void _bli_buffer_free(BLI_Buffer *buffer)
 {
 	if ((buffer->flag & BLI_BUFFER_USE_STATIC) == 0) {
 		if (buffer->data) {




More information about the Bf-blender-cvs mailing list