[utils] new_fixed and resize_fixed in vector.h

This commit is contained in:
Al
2017-03-10 19:31:34 -05:00
parent 4e02a54a79
commit 25649f2122

View File

@@ -69,6 +69,12 @@ static inline void _aligned_free(void *p)
static inline name *name##_new(void) { \ static inline name *name##_new(void) { \
return name##_new_size(DEFAULT_VECTOR_SIZE); \ return name##_new_size(DEFAULT_VECTOR_SIZE); \
} \ } \
static inline name *name##_new_size_fixed(size_t size) { \
name *array = name##_new_size(size); \
if (array == NULL) return NULL; \
array->n = size; \
return array; \
} \
static inline name *name##_new_aligned(size_t size, size_t alignment) { \ static inline name *name##_new_aligned(size_t size, size_t alignment) { \
name *array = malloc(sizeof(name)); \ name *array = malloc(sizeof(name)); \
if (array == NULL) return NULL; \ if (array == NULL) return NULL; \
@@ -94,6 +100,16 @@ static inline void _aligned_free(void *p)
array->m = size; \ array->m = size; \
return true; \ return true; \
} \ } \
static inline bool name##_resize_fixed(name *array, size_t size) { \
if (!name##_resize(array, size)) return false; \
array->n = size; \
return true; \
} \
static inline bool name##_resize_fixed_aligned(name *array, size_t size, size_t alignment) { \
if (!name##_resize_aligned(array, size, alignment)) return false; \
array->n = size; \
return true; \
} \
static inline void name##_push(name *array, type value) { \ static inline void name##_push(name *array, type value) { \
if (array->n == array->m) { \ if (array->n == array->m) { \
size_t size = array->m ? array->m << 1 : 2; \ size_t size = array->m ? array->m << 1 : 2; \