Skip to content

Commit 8afed1a

Browse files
committed
Chores: add improved function-comments at 'dynamic_array' and additional dynamic-array length-checks to 'test_insert_element_at_index'-unittest function
1 parent 3cfe468 commit 8afed1a

4 files changed

Lines changed: 166 additions & 91 deletions

File tree

docs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ for (int value = 0; value < 50; value++) {
9595
//
9696
// Get amount of elments in dynamic-array
9797
size_t array_len;
98-
if (get_len(&dynamic_array, &array_len) == true) {
98+
if (get_len(&dynamic_array, &array_len) == NO_ERROR) {
9999
printf("length of dynamic-array=%d\n", array_len);
100100
} else {
101101
printf("Couldn't get length of dynamic-array\n");
@@ -188,7 +188,7 @@ size_t static_char_array_len = strlen(static_char_array);
188188
if (append_element_to_dyn_array(&dynamic_array_b, (void*)static_char_array, sizeof(char)*((size_t)static_char_array_len)) == NO_ERROR) {
189189
//
190190
// Append string-element from dynamic-array-B to dynamic-array-A
191-
if (append_dyn_arrays_inplace(&dynamic_array_a, &dynamic_array_b)) {
191+
if (append_dyn_arrays_inplace(&dynamic_array_a, &dynamic_array_b) == NO_ERROR) {
192192
printf("%s\n", (char*)get_element_by_index(&dynamic_array_a, 0));
193193
}
194194
}

includes/dynamic_array.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#define DYNAMIC_ARRAY_LIB_DYNAMIC_ARRAY_H
33

44
#include <stddef.h>
5-
#include <stdbool.h>
65

76
/*
87
Define enums, structs
@@ -37,11 +36,11 @@ Error_Code init_dyn_array(DynArray* dynamic_array);
3736
Error_Code append_element_to_dyn_array(DynArray* dynamic_array, const void* data, const size_t data_size);
3837
void* get_last(const DynArray* dynamic_array);
3938
void* get_first(const DynArray* dynamic_array);
40-
bool get_len(const DynArray* dynamic_array, size_t* len);
39+
Error_Code get_len(const DynArray* dynamic_array, size_t* len);
4140
Error_Code append_static_array_elements_to_dyn_array(DynArray* dynamic_array, const void* static_array, const size_t static_array_elem_size, const size_t static_array_len);
4241
DynArrayNode* get_element_ptr_by_index(const DynArray* dynamic_array, const size_t index);
4342
void* get_element_by_index(const DynArray* dynamic_array, const size_t index);
44-
bool append_dyn_arrays_inplace(DynArray* a, const DynArray* b);
43+
Error_Code append_dyn_arrays_inplace(DynArray* a, const DynArray* b);
4544
Error_Code swap_elements_by_indices(DynArray* dynamic_array, const size_t index_a, const size_t index_b);
4645
Error_Code replace_element_by_index(DynArray* dynamic_array, const size_t index, const void* data, const size_t data_size);
4746
Error_Code insert_element_at_index(DynArray* dynamic_array, const size_t index, const void* data, const size_t data_size);

src/dynamic_array.c

Lines changed: 141 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
#include <stddef.h>
55
#include <stdbool.h>
66

7-
/*
8-
Helper function
9-
Check whether provided DynArray-Pointer is pointing to a valid Dynamic-Array.
10-
*/
7+
/**
8+
* Helper function -
9+
* Check whether provided DynArray-Pointer is pointing to a valid Dynamic-Array.
10+
*
11+
* @param dynamic_array `DynArray`-Pointer to the given dynamic-array.
12+
*
13+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
14+
*/
1115
Error_Code check_dyn_array(const DynArray* dynamic_array) {
1216
if (dynamic_array == NULL || (dynamic_array->head_ptr == NULL && dynamic_array->tail_ptr != NULL)
1317
|| (dynamic_array->head_ptr != NULL && dynamic_array->tail_ptr == NULL)) {
@@ -27,11 +31,19 @@ Error_Code check_dyn_array(const DynArray* dynamic_array) {
2731
return NO_ERROR;
2832
}
2933

30-
/*
31-
Initialize a new dynamic-array.
32-
33-
Set `dynamic_array->length` to 0.
34-
*/
34+
/**
35+
* Initialize a new dynamic-array.
36+
*
37+
* @param dynamic_array `DynArray`-Pointer to the new dynamic-array.
38+
*
39+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
40+
* @note
41+
* - Sets the `dynamic_array->length` to 1
42+
*
43+
* - Sets the `dynamic_array->head_ptr` to `NULL`
44+
*
45+
* - Sets the `dynamic_array->tail_ptr` to `NULL`
46+
*/
3547
Error_Code init_dyn_array(DynArray* dynamic_array) {
3648
if (dynamic_array == NULL) {
3749
//
@@ -91,14 +103,18 @@ DynArrayNode* create_new_dyn_array_node(const void* data, const size_t data_size
91103
return new_node;
92104
}
93105

94-
/*
95-
Helper function
96-
Add first element to dynamic-array.
97-
This function assumes, that the given dynamic-array has already been checked with `check_dyn_array` and that the given
98-
`data-ptr` and `data_size` are also valid.
99-
100-
Set `dynamic_array->length` to 1.
101-
*/
106+
/**
107+
* Helper function -
108+
* Add first element to dynamic-array.
109+
*
110+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
111+
* @param data The `void`-Pointer to the data that should be stored at the new element.
112+
* @param data_size Size in Bytes of the given data.
113+
*
114+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
115+
* @note This function assumes, that the given dynamic-array has already been checked with `check_dyn_array` and that the given
116+
`data-ptr` and `data_size` are also valid. This function sets the `dynamic_array->length` to 1.
117+
*/
102118
Error_Code add_first_element_to_dyn_array(DynArray* dynamic_array, const void* data, const size_t data_size) {
103119
DynArrayNode* first_node = create_new_dyn_array_node(data, data_size);
104120
if (first_node == NULL) {
@@ -117,11 +133,16 @@ Error_Code add_first_element_to_dyn_array(DynArray* dynamic_array, const void* d
117133
return NO_ERROR;
118134
}
119135

120-
/*
121-
Append element to dynamic-array.
122-
123-
Increases `dynamic_array->length` by 1.
124-
*/
136+
/**
137+
* Append element to dynamic-array.
138+
*
139+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
140+
* @param data The `void`-Pointer to the data that should be stored at the new element.
141+
* @param data_size Size in Bytes of the given data.
142+
*
143+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
144+
* @note Increases `dynamic_array->length` by 1.
145+
*/
125146
Error_Code append_element_to_dyn_array(DynArray* dynamic_array, const void* data, const size_t data_size) {
126147
if (check_dyn_array(dynamic_array) != NO_ERROR) {
127148
//
@@ -179,10 +200,13 @@ Error_Code append_element_to_dyn_array(DynArray* dynamic_array, const void* data
179200
return NO_ERROR;
180201
}
181202

182-
/*
183-
Get and Return last element of dynamic-array.
184-
Returns 'NULL`-ptr if empty or an error occured.
185-
*/
203+
/**
204+
* Get last element of dynamic-array.
205+
*
206+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
207+
*
208+
* @return `void*` - `void`-Pointer to the data on success; otherwise `NULL`.
209+
*/
186210
void* get_last(const DynArray* dynamic_array) {
187211
if (check_dyn_array(dynamic_array) != NO_ERROR) {
188212
//
@@ -199,10 +223,13 @@ void* get_last(const DynArray* dynamic_array) {
199223
return dynamic_array->tail_ptr->data;
200224
}
201225

202-
/*
203-
Get and Return first element of dynamic-array.
204-
Returns 'NULL`-ptr if empty or an error occured.
205-
*/
226+
/**
227+
* Get first element of dynamic-array.
228+
*
229+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
230+
*
231+
* @return `void*` - `void`-Pointer to the data on success; otherwise `NULL`.
232+
*/
206233
void* get_first(const DynArray* dynamic_array) {
207234
if (check_dyn_array(dynamic_array) != NO_ERROR) {
208235
//
@@ -219,35 +246,47 @@ void* get_first(const DynArray* dynamic_array) {
219246
return dynamic_array->head_ptr->data;
220247
}
221248

222-
/*
223-
Get amount of elements in dynamic-array by iterating through whole dynamic-array.
224-
Boolean indicates whether an error occured or the given dynamic-array is invalid.
225-
*/
226-
bool get_len(const DynArray* dynamic_array, size_t* len) {
249+
/**
250+
* Get amount of elements in dynamic-array by iterating through whole dynamic-array.
251+
*
252+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
253+
* @param len `size_t`-Pointer to the value - where to store the counted value.
254+
*
255+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
256+
* @note May become deprecated in the near future. Please use `dynamic_array->length` instead.
257+
*/
258+
Error_Code get_len(const DynArray* dynamic_array, size_t* len) {
227259
if (check_dyn_array(dynamic_array) != NO_ERROR) {
228260
//
229261
// Given dynamic-array is invalid
230-
return false;
262+
return INVALID_ARRAY_ERROR;
231263
}
232264
//
233265
if (len == NULL) {
234266
//
235267
// Given len-ptr is the NULL-ptr
236-
return false;
268+
return NULL_PTR_ERROR;
237269
}
238270
DynArrayNode* current_ptr = dynamic_array->head_ptr;
239271
*len = 0;
240272
while (current_ptr != NULL) {
241273
(*len)++;
242274
current_ptr = current_ptr->next_ptr;
243275
}
244-
return true;
276+
return NO_ERROR;
245277
}
246278

247-
/*
248-
Copy the array’s elements individually into the dynamic-array.
249-
Uses `append_element_to_dyn_array` under the hood.
250-
*/
279+
/**
280+
* Copy the elements of a static-array individually to the dynamic-array.
281+
*
282+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
283+
* @param static_array `void`-Pointer to the given static-array.
284+
* @param static_array_elem_size Size of each individual element of the static-array.
285+
* @param static_array_len Length of the static-array.
286+
*
287+
* @return `DynArrayNode*` - `DynArrayNode`-Pointer to the element on success; otherwise `NULL`.
288+
* @note Uses `append_element_to_dyn_array` under the hood.
289+
*/
251290
Error_Code append_static_array_elements_to_dyn_array(DynArray* dynamic_array, const void* static_array, const size_t static_array_elem_size, const size_t static_array_len) {
252291
if (check_dyn_array(dynamic_array) != NO_ERROR) {
253292
//
@@ -280,11 +319,14 @@ Error_Code append_static_array_elements_to_dyn_array(DynArray* dynamic_array, co
280319
return append_elem_error_code;
281320
}
282321

283-
/*
284-
Get element-ptr of dynamic-array-Node by index.
285-
286-
Return `NULL` if an error occurs.
287-
*/
322+
/**
323+
* Get element-Pointer of dynamic-array-Node by index.
324+
*
325+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
326+
* @param index Index of the element at the dynamic-array.
327+
*
328+
* @return `DynArrayNode*` - `DynArrayNode`-Pointer to the element on success; otherwise `NULL`.
329+
*/
288330
DynArrayNode* get_element_ptr_by_index(const DynArray* dynamic_array, const size_t index) {
289331
if (check_dyn_array(dynamic_array) != NO_ERROR) {
290332
//
@@ -341,11 +383,14 @@ DynArrayNode* get_element_ptr_by_index(const DynArray* dynamic_array, const size
341383
return current_ptr;
342384
}
343385

344-
/*
345-
Get element of dynamic-array by index.
346-
347-
Return `NULL`-ptr if an error occurs.
348-
*/
386+
/**
387+
* Get element of dynamic-array by index.
388+
*
389+
* @param dynamic_array `DynArray`-Pointer to a given dynamic-array.
390+
* @param index Index of the element at the dynamic-array.
391+
*
392+
* @return `void*` - `void`-Pointer to the data on success; otherwise `NULL`.
393+
*/
349394
void* get_element_by_index(const DynArray* dynamic_array, const size_t index) {
350395
DynArrayNode* current_ptr = get_element_ptr_by_index(dynamic_array, index);
351396
if (current_ptr == NULL) {
@@ -354,26 +399,29 @@ void* get_element_by_index(const DynArray* dynamic_array, const size_t index) {
354399
return current_ptr->data;
355400
}
356401

357-
/*
358-
Append elements of dynamic-array `b` to dynamic-array `a`.
359-
Uses `append_element_to_dyn_array` under the hood.
360-
*/
361-
bool append_dyn_arrays_inplace(DynArray* a, const DynArray* b) {
402+
/**
403+
* Append elements of dynamic-array `b` to dynamic-array `a`.
404+
*
405+
* @param a `DynArray`-Pointer to the given DESTINATION dynamic-array `A`.
406+
* @param b `DynArray`-Pointer to the given SOURCE dynamic-array `B`.
407+
*
408+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
409+
* @note Uses `append_element_to_dyn_array` under the hood.
410+
*/
411+
Error_Code append_dyn_arrays_inplace(DynArray* a, const DynArray* b) {
362412
DynArray* dyn_array_a = a;
363413
const DynArray* dyn_array_b = b;
364414
//
365415
// Check both dynamic-arrays
366416
if (check_dyn_array(dyn_array_a) != NO_ERROR || check_dyn_array(dyn_array_b) != NO_ERROR) {
367417
//
368418
// One or both of the given dynamic-arrays are invalid
369-
// INVALID_ARRAY_ERROR
370-
return false;
419+
return INVALID_ARRAY_ERROR;
371420
}
372421
if (dyn_array_b->length == 0) {
373422
//
374423
// Dynamic-array `b` is empty, nothing to append
375-
// NO_ERROR
376-
return true;
424+
return NO_ERROR;
377425
}
378426
//
379427
// Iterate through dynamic-array `b`
@@ -384,18 +432,23 @@ bool append_dyn_arrays_inplace(DynArray* a, const DynArray* b) {
384432
if (append_elem_error_code != NO_ERROR) {
385433
//
386434
// Appending element went wrong
387-
return false;
435+
return append_elem_error_code;
388436
}
389437
current_b_ptr = current_b_ptr->next_ptr;
390438
}
391439
//
392-
// NO_ERROR
393-
return true;
440+
return NO_ERROR;
394441
}
395442

396-
/*
397-
Swap position of elements by its indices.
398-
*/
443+
/**
444+
* Swap position of elements by its indices.
445+
*
446+
* @param dynamic_array `DynArray`-Pointer to the given existing dynamic-array.
447+
* @param index_a The index of element-A
448+
* @param index_b The index of element-B
449+
*
450+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
451+
*/
399452
Error_Code swap_elements_by_indices(DynArray* dynamic_array, const size_t index_a, const size_t index_b) {
400453
if (check_dyn_array(dynamic_array) != NO_ERROR) {
401454
//
@@ -529,10 +582,17 @@ Error_Code swap_elements_by_indices(DynArray* dynamic_array, const size_t index_
529582
return NO_ERROR;
530583
}
531584

532-
/*
533-
Replace an element-data by its index inplace.
534-
Stored element-data gets deleted and new element-data gets stored at the given index.
535-
*/
585+
/**
586+
* Replace an element-data by its index inplace.
587+
*
588+
* @param dynamic_array `DynArray`-Pointer to the given existing dynamic-array.
589+
* @param index The index where the element should be replaced at.
590+
* @param data The `void`-Pointer to the new data that should be stored at the element.
591+
* @param data_size Size in Bytes of the new given data.
592+
*
593+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
594+
* @note Stored element-data gets deleted and new element-data gets stored at the given index.
595+
*/
536596
Error_Code replace_element_by_index(DynArray* dynamic_array, const size_t index, const void* data, const size_t data_size) {
537597
if (check_dyn_array(dynamic_array) != NO_ERROR) {
538598
//
@@ -588,12 +648,13 @@ Error_Code replace_element_by_index(DynArray* dynamic_array, const size_t index,
588648
/**
589649
* Insert an element at the given index.
590650
*
591-
* @param dynamic_array `DynArray`-Pointer to the given exsiting dynamic-array.
592-
* @param index The given where the new element should be inserted at.
651+
* @param dynamic_array `DynArray`-Pointer to the given existing dynamic-array.
652+
* @param index The element-index where the new element should be inserted at.
593653
* @param data The `void`-Pointer to the data that should be stored at the new element.
594654
* @param data_size Size in Bytes of the given data.
595655
*
596656
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
657+
* @note Increases `dynamic_array->length` by 1.
597658
*/
598659
Error_Code insert_element_at_index(DynArray* dynamic_array, const size_t index, const void* data, const size_t data_size) {
599660
if (check_dyn_array(dynamic_array) != NO_ERROR) {
@@ -667,9 +728,13 @@ Error_Code insert_element_at_index(DynArray* dynamic_array, const size_t index,
667728
return NO_ERROR;
668729
}
669730

670-
/*
671-
Deallocate space of all elments in a dynamic-array.
672-
*/
731+
/**
732+
* Deallocate space of all elments in a dynamic-array.
733+
*
734+
* @param dynamic_array `DynArray`-Pointer to the given existing dynamic-array.
735+
*
736+
* @return `Error_Code` - `NO_ERROR` on success; otherwise another `Error_Code`.
737+
*/
673738
Error_Code clear_dyn_array(DynArray* dynamic_array) {
674739
if (check_dyn_array(dynamic_array) != NO_ERROR) {
675740
//

0 commit comments

Comments
 (0)