#include #include #include #include #include #include void List::init(size_t element_size) { m_element_size = element_size; m_current = 0; m_max = START_SIZE; m_elements = (uint8_t *) calloc(m_max, element_size); } void List::add(void *element) { if (m_current == m_max) { m_max += INCREMENT_BY; m_elements = (uint8_t *) realloc(m_elements, m_element_size * m_max); if (m_elements == NULL) { /* TODO: Handle error */ printf("Failed to reallocate array\n"); return; } } void *new_element = m_elements + m_element_size * m_current; new_element = memcpy(new_element, element, m_element_size); if (new_element == NULL) printf("Failed to add a new element\n"); m_current++; } void * List::get(size_t i) { return m_elements + (i * m_element_size); } size_t List::size(void) { return m_current; } void List::clean(void) { free(m_elements); }