[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