devil_array_t* devil_array_create(size_t capacity) { devil_array_t* array = (devil_array_t*)devil_malloc(sizeof(devil_array_t)); assert(NULL != array); if (capacity < DEF_CAPACITY) capacity = DEF_CAPACITY; array->elems = (void**)devil_malloc(sizeof(void*) * capacity); assert(NULL != array->elems); array->start = array->elems; array->finish = array->elems; array->capacity = capacity; return array; }
devil_thread_t* devil_thread_create(void (*routine)(void*), void* arg) { devil_thread_t* thread = (devil_thread_t*)devil_malloc(sizeof(devil_thread_t)); assert(NULL != thread); thread->thread = NULL; thread->create_event = NULL; thread->routine = routine; thread->argument = arg; return thread; }
static inline void devil_array_regrow(devil_array_t* array) { size_t old_size = array->finish - array->start; size_t new_capacity = (size_t)(array->capacity * 1.5); void** new_elems = (void**)devil_malloc(sizeof(void*) * new_capacity); assert(NULL != new_elems); memmove(new_elems, array->elems, sizeof(void*) * old_size); devil_free(array->elems); array->elems = new_elems; array->start = array->elems; array->finish = array->elems + old_size; array->capacity = new_capacity; }