Doxygen Documentation Makes Learning the API Much Easier |
You can refer to my first post on CDS for more information here. Enjoy!
Below is a simple example program demonstrating the usage of a cds_dynamic_array:
int main(void) { /* create the array */ cds_dynamic_array *array = NULL; unsigned int size = CDS_DEFAULT_DYNAMIC_ARRAY_SIZE; /* 4 by default */ cds_result cr = cds_dynamic_array_create(&array, size); /* notice the address of the pointer is passed in */ /* checks for an error, prints and returns 1 if something failed * we do this (in this example) repeatedly for safety */ if (cds_error_check(cr)) return 1; /* add the strings to the container */ char * presidents[] = {"washington", "jefferson", "roosevelt", "reagan", "clinton", "obama"}; unsigned int numPresidents = 6; unsigned int i; for (i = 0; i < numPresidents; ++i) { cr = cds_dynamic_array_push_back(array, presidents[i]); /* will need to reallocate when i == 4 */ if (cds_error_check(cr)) return 1; } /* print out the array */ cds_log("Displaying the contents of the dynamic array...\n"); logArray(array, 1); /* try adding past the current size of the array */ void *curValue; cds_log("Adding some more strings to the container...\n"); char *otherPresidents[] = {"adams", "bush", "coolidge", "kennedy"}; unsigned int numOtherPresidents = 4; /* since the default size is 4, we've grown once, 4 * 1.5 = 6 */ /* therefore, on the next insertion, the array will need to grow */ /* we can use a custom growth function, to resize things differently */ for (i = 0; i < numOtherPresidents; ++i) { cr = cds_dynamic_array_push_back_gf(array, otherPresidents[i], &arrayDoubleGrowth); if (cds_error_check(cr)) return 1; } /* lets try printing the array using an iterate function */ cds_log("Printing the contents of the array using the iterate function...\n"); cr = cds_dynamic_array_iterate(array, &printString2); if (cds_error_check(cr)) return 1; /* accessing the last element first just for the sake of printing it */ unsigned int count = cds_dynamic_array_count(array); cr = cds_dynamic_array_get(array, count - 1, &curValue); cds_log("Removing the last element in the collection: %s", (char *)curValue); /* remove the element at the end of the array */ cr = cds_dynamic_array_pop_back(array); if (cds_error_check(cr)) return 1; /* this will remove the element from the container, but give it as a pointer */ cr = cds_dynamic_array_pop_back_data(array, &curValue); if (cds_error_check(cr)) return 1; cds_log("Removed: %s from the back of the array\n", (char *) curValue); /* remove functions will rely on pointer addresses by default * we know that roosevelt's address is in the array so this will work */ cr = cds_dynamic_array_remove(array, presidents[2]); if (cds_error_check(cr)) return 1; /* if we want to remove with value equality, we must use the cmp functions * so while "adams" is in the array, this is a new address */ char adamsStr[] = "adams"; cr = cds_dynamic_array_remove(array, adamsStr); char resultString[CDS_RESULT_MAX_STR_LEN]; cds_result_string(cr, resultString); cds_log("Attempt to remove the same string at a different address: %s\n", resultString); /* if we use our strcmp equivalent, this can be done with the proper function */ cr = cds_dynamic_array_remove_cmp(array, adamsStr, &cmpStr); cds_result_string(cr, resultString); cds_log("Attempt to remove the same string using the comparison function: %s\n", resultString); logArray(array, 0); /* you can also remove elements by index (with safe bounds checking) */ cds_log("Removing from index 2...\n"); cr = cds_dynamic_array_remove_at(array, 2); logArray(array, 0); /* The dynamic array supports multiple removal behavoirs * By default it is shift down, which maintains the relative order of elements * if remove_at(2) CDS_SHIFT DOWN: a b c d e f becomes a b d e f * It also supports replacing the removed element with the element at the end * This disrupts the relative order of elements, but is more efficient than shifting large arrays * if remove_at(2) CDS_REPLACE_WITH_LAST a b c d e f becomes a b f d e */ cds_log("Removing from index 2 using CDS_REPLACE_WITH_LAST\n"); cr = cds_dynamic_array_remove_at_rb(array, 2, CDS_REPLACE_WITH_LAST); logArray(array, 0); /* Reverse the relative order of elements */ cds_log("Reversing the order of elements in the dynamic array...\n"); cr = cds_dynamic_array_reverse(array); logArray(array, 0); cds_log("Deleting the dynamic array...\n"); cr = cds_dynamic_array_delete(&array); if (cds_error_check(cr)) return 1; cds_log("Deletion successful...\n"); return 0; }
No comments:
Post a Comment