static void test_GetElement(void) { const test_struct data[] = {{8, 9}, {-3, -4}, {21, 56}, {0, 0}}; const int nr_elements = sizeof(data)/sizeof(data[0]); for(int i = 0; i < nr_elements; i++) { TEST_ASSERT_EQUAL(0, list_add_tail(mylist, &(data[i]))); } check_n_list_elements_ok(mylist, nr_elements, data); // checks using list_get_element TEST_ASSERT_NULL(list_get_element(mylist, nr_elements)); TEST_ASSERT_NULL(list_get_element(mylist, -1)); }
void videoPlayer_print(videoPlayer_t * vidPlayer) { int maxSize = list_get_size(vidPlayer->list); for(int i =0;i<maxSize;i++) { film_t * film = list_get_element(vidPlayer->list,i); film_print(film); } }
// check n items in list against verify_data // IMPORTANT: this function must check using list_get_element, // else the test for that function is no longer useful static void check_n_list_elements_ok(list_admin* admin, int nr_items, const test_struct* verify_data) { for(int i = 0; i < nr_items; i++) { test_struct* ptr = list_get_element(admin, i); TEST_ASSERT_NOT_NULL(ptr); TEST_ASSERT_EQUAL(0, memcmp(verify_data+i, ptr, sizeof(*ptr))); } }
/* * @NAME: list_replace * @DESC: Coloca un valor en una de la posiciones de la lista retornando el valor anterior */ void *list_replace(t_list *self, int index, void *data) { void *old_data = NULL; t_link_element *element = list_get_element(self, index); if (element != NULL) { old_data = element->data; element->data = data; } return old_data; }
/* * @NAME: list_add * @DESC: Agrega un elemento al final de la lista */ int list_add(t_list *self, void *data) { t_link_element *new_element = list_create_element(data); if (self->elements_count == 0) { self->head = new_element; } else { list_link_element(list_get_element(self, self->elements_count - 1), new_element); } self->elements_count++; return self->elements_count - 1; }
/* * @NAME: list_remove * @DESC: Remueve un elemento de la lista de una determinada posicion y lo retorna. */ void *list_remove(t_list *self, int index) { void *data = NULL; t_link_element *aux_element = NULL; if (self->head == NULL) return NULL; aux_element = list_get_element(self, index); data = aux_element->data; if (index == 0) { self->head = aux_element->next; } else { t_link_element* previous = list_get_element(self, index - 1); list_link_element(previous, aux_element->next); } self->elements_count--; free(aux_element); return data; }
/* * @NAME: list_add_in_index * @DESC: Agrega un elemento en una posicion determinada de la lista */ void list_add_in_index(t_list *self, int index, void *data) { t_link_element* next = NULL; t_link_element* new_element = NULL; t_link_element* previous = NULL; if ((self->elements_count > index) && (index >= 0)) { new_element = list_create_element(data); if (index == 0) { list_link_element(new_element, self->head); self->head = new_element; } else { next = list_get_element(self, index); previous = list_get_element(self, index - 1); list_link_element(previous, new_element); list_link_element(new_element, next); } self->elements_count++; } }
void videoPlayer_play(videoPlayer_t * vidPlayer,int index){ printf("STARTING FILM : "); film_print(list_get_element(vidPlayer->list,index)); printf("Press N to go next B to go back S to stop P to Pause O to(O P NOT WORKING NOW)\n"); int status = 0; char pressed; for(;;){ pressed = getch(); if(pressed == 'n') { status = 1; } else if(pressed == 'b') { status = 2; } else if(pressed == 's') { status = 3; } if(status != 0) break; } if(status == 1) { videoPlayer_play(vidPlayer,index + 1); } if(status == 2) { videoPlayer_play(vidPlayer,index - 1); } if(status == 3) { puts("STOPPED"); } }
/* * @NAME: list_get * @DESC: Retorna el contenido de una posicion determianda de la lista */ void* list_get(t_list *self, int index) { t_link_element* element_in_index = list_get_element(self, index); return element_in_index != NULL ? element_in_index->data : NULL; }
static void test_GetElement_parameters(void) { TEST_ASSERT_NULL(list_get_element(NULL, 0)); }