@@ -25,7 +25,7 @@ before you include this file in *one* C/C++ file to create the implementation.
25
25
#define array_create ( type ) ARRAY_CAST( (void *)internal_array_create( sizeof ( type ), NULL ) )
26
26
#define array_create_memctx ( type, memctx ) ARRAY_CAST( (void *)internal_array_create( sizeof ( type ), (memctx) ) )
27
27
#define array_destroy ( array ) internal_array_destroy( (struct internal_array_t *) (array) )
28
- #define array_add ( array, item ) ARRAY_CAST( internal_array_add( (struct internal_array_t *) (array), (void *) (item) ) )
28
+ #define array_add ( array, item ) ARRAY_CAST( internal_array_add( (struct internal_array_t *) (array), (void *) (item), ( int ) sizeof ( *item ) ) )
29
29
#define array_remove ( array, index ) internal_array_remove( (struct internal_array_t *) (array), (index) )
30
30
#define array_remove_ordered ( array, index ) internal_array_remove_ordered( (struct internal_array_t *) (array), (index) )
31
31
#define array_get ( array, index, item ) internal_array_get( (struct internal_array_t *) (array), (index), (void *) (item) )
@@ -71,7 +71,7 @@ struct internal_array_t;
71
71
72
72
struct internal_array_t * internal_array_create ( int item_size, void * memctx );
73
73
void internal_array_destroy ( struct internal_array_t * array );
74
- void * internal_array_add ( struct internal_array_t * array, void * item );
74
+ void * internal_array_add ( struct internal_array_t * array, void * item, int item_size );
75
75
void internal_array_remove ( struct internal_array_t * array, int index );
76
76
void internal_array_remove_ordered ( struct internal_array_t * array, int index );
77
77
ARRAY_BOOL_T internal_array_get ( struct internal_array_t * array, int index, void * item );
@@ -94,6 +94,12 @@ void* internal_array_item( struct internal_array_t* array, int index );
94
94
#ifdef ARRAY_IMPLEMENTATION
95
95
#undef ARRAY_IMPLEMENTATION
96
96
97
+ #ifndef ARRAY_ASSERT
98
+ #define _CRT_NONSTDC_NO_DEPRECATE
99
+ #define _CRT_SECURE_NO_WARNINGS
100
+ #include < assert.h>
101
+ #define ARRAY_ASSERT ( condition, message ) assert( condition && message );
102
+ #endif
97
103
98
104
#ifndef ARRAY_MALLOC
99
105
#define _CRT_NONSTDC_NO_DEPRECATE
@@ -165,7 +171,8 @@ void internal_array_destroy( struct internal_array_t* array ) {
165
171
}
166
172
167
173
168
- void * internal_array_add ( struct internal_array_t * array, void * item ) {
174
+ void * internal_array_add ( struct internal_array_t * array, void * item, int item_size ) {
175
+ ARRAY_ASSERT ( item_size == array->item_size , " Invalid item" );
169
176
if ( array->count >= array->capacity ) {
170
177
array->capacity *= 2 ;
171
178
void * items = array->items ;
0 commit comments