Browse Source

Initial commit

trunk
Shanti Chellaram 2 years ago
commit
705be60720
  1. 45
      README.md
  2. 94
      dynarray/dynarray.h

45
README.md

@ -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

94
dynarray/dynarray.h

@ -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);
Loading…
Cancel
Save