|
@@ -0,0 +1,102 @@
|
|
|
+/*
|
|
|
+ * File: object.c
|
|
|
+ * Author: Arthur Brandao
|
|
|
+ *
|
|
|
+ * Created on 7 décembre 2018
|
|
|
+ */
|
|
|
+
|
|
|
+#include <stdio.h>
|
|
|
+#include <stdlib.h>
|
|
|
+#include "object.h"
|
|
|
+
|
|
|
+/* --- Fonctions publiques --- */
|
|
|
+void object_ini(Object* this){
|
|
|
+ this->first = NULL;
|
|
|
+ this->last = NULL;
|
|
|
+ this->size = 0;
|
|
|
+}
|
|
|
+
|
|
|
+obj_node* object_add(Object* this, int type, int x, int y){
|
|
|
+ obj_node* objn;
|
|
|
+ //Ajout des vthiseurs
|
|
|
+ objn = malloc(sizeof(obj_node));
|
|
|
+ objn->type = type;
|
|
|
+ objn->x = x;
|
|
|
+ objn->y = y;
|
|
|
+ //Lien entre les noeuds
|
|
|
+ objn->next = NULL;
|
|
|
+ if (this->first == NULL) {
|
|
|
+ objn->prev = NULL;
|
|
|
+ this->first = objn;
|
|
|
+ this->last = objn;
|
|
|
+ } else {
|
|
|
+ objn->prev = this->last;
|
|
|
+ this->last->next = objn;
|
|
|
+ this->last = objn;
|
|
|
+ }
|
|
|
+ this->size++;
|
|
|
+ return objn;
|
|
|
+}
|
|
|
+
|
|
|
+obj_node* object_search(Object* this, int type, int x, int y){
|
|
|
+ //Si liste vide
|
|
|
+ if(this->size == 0){
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ //Recherche
|
|
|
+ obj_node* objn = this->first;
|
|
|
+ while(objn != NULL){
|
|
|
+ if(objn->type == type && objn->x == x && objn->y == y){
|
|
|
+ return objn;
|
|
|
+ }
|
|
|
+ objn = objn->next;
|
|
|
+ }
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+void object_delete(Object* this, obj_node* objn){
|
|
|
+ //Liste vide
|
|
|
+ if(this->first == NULL){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //Si 1er et seul
|
|
|
+ if (objn->prev == NULL && objn->next == NULL) {
|
|
|
+ this->first = NULL;
|
|
|
+ this->last = NULL;
|
|
|
+ }
|
|
|
+ //Si 1er et non seul
|
|
|
+ else if (objn->prev == NULL && objn->next != NULL) {
|
|
|
+ objn->next->prev = NULL;
|
|
|
+ this->first = objn->next;
|
|
|
+ }
|
|
|
+ //Si dernier
|
|
|
+ else if (objn->next == NULL) {
|
|
|
+ objn->prev->next = NULL;
|
|
|
+ this->last = objn->prev;
|
|
|
+ }
|
|
|
+ //Sinon si il est au milieu
|
|
|
+ else {
|
|
|
+ objn->prev->next = objn->next;
|
|
|
+ objn->next->prev = objn->prev;
|
|
|
+ }
|
|
|
+ //Free
|
|
|
+ free(objn);
|
|
|
+ this->size--;
|
|
|
+}
|
|
|
+
|
|
|
+void object_clean(Object* this){
|
|
|
+ //Liste vide
|
|
|
+ if(this->first == NULL){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //Vide liste
|
|
|
+ obj_node* tmp, * objn = this->first;
|
|
|
+ while (objn != NULL) {
|
|
|
+ tmp = objn->next;
|
|
|
+ object_delete(this, objn);
|
|
|
+ objn = tmp;
|
|
|
+ }
|
|
|
+ this->first = NULL;
|
|
|
+ this->last = NULL;
|
|
|
+ this->size = 0;
|
|
|
+}
|