f6-dynamic-array #18
4 changed files with 26 additions and 0 deletions
|
|
@ -39,5 +39,6 @@ FledastyError fledasty_dynamic_array_initialize(FledastyDynamicArray *new_dynami
|
||||||
FledastyError fledasty_dynamic_array_destroy(FledastyDynamicArray *current_dynamic_array);
|
FledastyError fledasty_dynamic_array_destroy(FledastyDynamicArray *current_dynamic_array);
|
||||||
|
|
||||||
FledastyError fledasty_dynamic_array_append(FledastyDynamicArray *current_dynamic_array, void *value);
|
FledastyError fledasty_dynamic_array_append(FledastyDynamicArray *current_dynamic_array, void *value);
|
||||||
|
FledastyError fledasty_dynamic_array_insert_at_index(FledastyDynamicArray *current_dynamic_array, const size_t index, void *value);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -27,6 +27,7 @@ typedef enum {
|
||||||
FLEDASTY_ERROR_NONE = 0,
|
FLEDASTY_ERROR_NONE = 0,
|
||||||
FLEDASTY_ERROR_FAILED_ALLOCATION = 1,
|
FLEDASTY_ERROR_FAILED_ALLOCATION = 1,
|
||||||
FLEDASTY_ERROR_INVALID_POINTER = 2,
|
FLEDASTY_ERROR_INVALID_POINTER = 2,
|
||||||
|
FLEDASTY_ERROR_INDEX_OUT_OF_RANGE = 3,
|
||||||
} FledastyError;
|
} FledastyError;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -85,3 +85,24 @@ FledastyError fledasty_dynamic_array_append(FledastyDynamicArray *current_dynami
|
||||||
|
|
||||||
return FLEDASTY_ERROR_NONE;
|
return FLEDASTY_ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FledastyError fledasty_dynamic_array_insert_at_index(FledastyDynamicArray *current_dynamic_array, const size_t index, void *value) {
|
||||||
|
if (current_dynamic_array == NULL || value == NULL) {
|
||||||
|
return FLEDASTY_ERROR_FAILED_ALLOCATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index >= current_dynamic_array->size) {
|
||||||
|
return FLEDASTY_ERROR_INDEX_OUT_OF_RANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current_dynamic_array->size == current_dynamic_array->capacity) {
|
||||||
|
current_dynamic_array->capacity += current_dynamic_array->capacity;
|
||||||
|
current_dynamic_array->buffer = (unsigned char*)hallocy_realloc(current_dynamic_array->buffer, current_dynamic_array->capacity * current_dynamic_array->element_byte_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *insert_pointer = current_dynamic_array->buffer + (index * current_dynamic_array->element_byte_size);
|
||||||
|
hallocy_move_memory(insert_pointer, insert_pointer + current_dynamic_array->element_byte_size, (current_dynamic_array->size - index) * current_dynamic_array->element_byte_size);
|
||||||
|
hallocy_copy_memory(insert_pointer, value, current_dynamic_array->element_byte_size);
|
||||||
|
|
||||||
|
return FLEDASTY_ERROR_NONE;
|
||||||
|
}
|
||||||
|
|
@ -73,6 +73,9 @@ int main() {
|
||||||
fledasty_dynamic_array_append(&test_dynamic_array, &i);
|
fledasty_dynamic_array_append(&test_dynamic_array, &i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int insert_value = 18;
|
||||||
|
fledasty_dynamic_array_insert_at_index(&test_dynamic_array, 1, &insert_value);
|
||||||
|
|
||||||
fledasty_dynamic_array_destroy(&test_dynamic_array);
|
fledasty_dynamic_array_destroy(&test_dynamic_array);
|
||||||
printf("Done\n");
|
printf("Done\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue