commit
705be60720
2 changed files with 139 additions and 0 deletions
-
45README.md
-
94dynarray/dynarray.h
@ -0,0 +1,45 @@ |
|||
|
|||
|
|||
Learning Goals: |
|||
* Able to hit the ground running in modern software development tooling |
|||
* Git |
|||
* Editor |
|||
* Compilation |
|||
|
|||
* Has a collection of portfolio projects. |
|||
* Runs their own game server. |
|||
* Knows where to go |
|||
* Able to confidently start / write a program in C |
|||
|
|||
Homeworks and assignments |
|||
|
|||
Lesson 1: |
|||
|
|||
The Industrial Revolution, Charles Babbage, and Ada Lovelace. |
|||
|
|||
The industrial revolution was about breaking down complex tasks into simple |
|||
pieces so more could be done faster / in parallel. The value of " |
|||
|
|||
|
|||
|
|||
Ideas: |
|||
|
|||
calculator project |
|||
|
|||
end state: algebraic solver? |
|||
|
|||
expression evaluator |
|||
|
|||
AST generator |
|||
|
|||
typecasting? |
|||
|
|||
pointers |
|||
|
|||
integer parsing from string |
|||
|
|||
basic math |
|||
|
|||
string -> integer conversion |
|||
|
|||
test cases |
|||
@ -0,0 +1,94 @@ |
|||
/** |
|||
* Note to implementer: |
|||
* You probably want to use these functions from the C standard library. |
|||
* malloc() / calloc() |
|||
* free(); |
|||
* realloc() |
|||
* memcpy() |
|||
*/ |
|||
|
|||
/* Error definitions. */ |
|||
|
|||
enum dynarray_error_t { |
|||
ERR_OK = 0, /** No error. */ |
|||
ERR_NULL = 1, /** Error: an argument provided was null. */ |
|||
ERR_BADARG = 2, /** Error: a non-pointer argument provided was invalid. */ |
|||
ERR_NO_ALLOC = 3, /** Error: a memory allocation failed internally. */ |
|||
ERR_BOUNDS = 4 /** Error: attempted to access an index of this array that does not exist. */ |
|||
}; |
|||
|
|||
/** |
|||
* Create a dynamic array, with the provided initial capacity and growth factor. |
|||
* |
|||
* @param size_t element_size the sizeof any given element |
|||
* @param size_t capacity the initial size of this array; this many elements |
|||
* can be added without needing to grow the array |
|||
* @param double growth_factor - how much bigger to grow the array when you attempt to add a new |
|||
* |
|||
* @return a pointer to the created array or NULL if it failed to allocate |
|||
**/ |
|||
struct dynarray_t *dynarray_create(size_t capacity, size_t element_size, double growth_factor); |
|||
|
|||
/** |
|||
* Delete a dynarray. Does nothing if array is NULL |
|||
*/ |
|||
void dynarray_destroy(struct dynarray_t *array); |
|||
|
|||
/** |
|||
* Adds an element to the end of this array. |
|||
* |
|||
* @param array the dynarray |
|||
* @param p_in a pointer to the element to add |
|||
* |
|||
* Returns ERR_OK (0) on success |
|||
* Returns ERR_NULL if array or p_in is NULL |
|||
* Returns ERR_NO_ALLOC if append required a reallocation that failed |
|||
*/ |
|||
int dynarray_append(struct dynarray_t *, void *p_in); |
|||
|
|||
/** |
|||
* Returns the number of elements stored in the dynarray. |
|||
* |
|||
* @returns 0 if array is NULL |
|||
*/ |
|||
size_t dynarray_size(struct dynarray_t *); |
|||
|
|||
/** |
|||
* Returns the number of elements that *could* be stored in this dynarray |
|||
* without triggering a reallocation. |
|||
* |
|||
* Returns the capacity of the dynarray, or 0 if the array is NULL |
|||
*/ |
|||
size_t dynarray_capacity(struct dynarray_t *array); |
|||
|
|||
/** |
|||
* Stores a copy of the element in the location pointed at by |
|||
* |
|||
* Returns ERR_OK (0) on success |
|||
* Returns ERR_NULL if array or p_out is NULL |
|||
* Returns ERR_BOUNDS if the provided index is not between 0 and size() - 1 |
|||
*/ |
|||
int dynarray_get(struct dynarray_t *array, size_t index, void *p_out); |
|||
|
|||
/** |
|||
* Sets the element at index 0 to the value pointed at by p_in. |
|||
* |
|||
* Returns ERR_OK (0) on success |
|||
* Returns ERR_NULL if array or p_in is NULL |
|||
* Returns ERR_BOUNDS if the provided index is not between 0 and size() - 1 |
|||
*/ |
|||
int dynarray_set(struct dynarray_t *array, size_t index, void *p_in); |
|||
|
|||
/** |
|||
* Removes the element at the provided index. Elements after this index are |
|||
* shifted down by one. Copies the removed element to p_in, if it is provided. |
|||
* |
|||
* @param array the dynarray |
|||
* @param index the index of the element to remove |
|||
* @param p_in if not NULL, the removed element will be stored here |
|||
* |
|||
* Returns ERR_OK (0) on success |
|||
* Returns ERR_NULL if array is null |
|||
* Returns ERR_BOUNDS if the provided index is not between 0 and size() - 1 |
|||
*/ |
|||
int dynarray_remove(struct dynarray_t *, size_t index, void *p_out); |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue