diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f80a4a..95ce18d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,8 @@ include_directories( ${GMP_INCLUDE_DIR}) set(SRCS - src/main.c) + "src/linked_list.c" + "src/main.c") # Define the C flags. set(CMAKE_C_FLAGS "-std=gnu99 -Wall -Wextra -Werror -Wfatal-errors -Wmissing-declarations -pedantic-errors") diff --git a/src/linked_list.c b/src/linked_list.c new file mode 100644 index 0000000..73c5727 --- /dev/null +++ b/src/linked_list.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 Ortega Froysa, Nicolás + * Author: Ortega Froysa, Nicolás + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "linked_list.h" + +#include + +void llist_init(struct llist *list) { + list->size = 0; + list->first = NULL; + list->last = NULL; +} + +int llist_add(struct llist *list, mpz_t num) { + struct llist_item *item = + malloc(sizeof(struct llist_item)); + if(!item) + return 0; + + mpz_init(item->num); + mpz_set(item->num, num); + + if(!(list->first)) + { + list->first = item; + list->last = item; + } + else + { + list->last->next = item; + list->last = item; + } + list->size++; + + return 1; +} + +void llist_deinit(struct llist *list) { + struct llist_item *i = list->first; + + while(i) + { + mpz_clear(i->num); + struct llist_item *next = i->next; + free(i); + i = next; + } + + list->size = 0; +} diff --git a/src/linked_list.h b/src/linked_list.h new file mode 100644 index 0000000..f3e3ccc --- /dev/null +++ b/src/linked_list.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2018 Ortega Froysa, Nicolás + * Author: Ortega Froysa, Nicolás + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +struct llist_item { + mpz_t num; + struct llist_item *prev; + struct llist_item *next; +}; + +struct llist { + struct llist_item *first; + struct llist_item *last; + size_t size; // size of the list +}; + +void llist_init(struct llist *list); +int llist_add(struct llist *list, mpz_t num); +void llist_deinit(struct llist *list); diff --git a/src/main.c b/src/main.c index ed05a94..cac8b94 100644 --- a/src/main.c +++ b/src/main.c @@ -20,7 +20,7 @@ #include "global.h" -int main(int argc, char *argv[]) { +int main() { printf("Indivisible %s\n", VERSION); return 0;