mirror of
https://gitlab.com/klmp200/LO27.git
synced 2024-11-22 22:53:19 +00:00
Add true makefile + lists
This commit is contained in:
parent
2dd85ff6cd
commit
9d57b532f6
16
LibCell/CellElement.c
Normal file
16
LibCell/CellElement.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* @Author: klmp200
|
||||||
|
* @Date: 2016-12-10 01:32:50
|
||||||
|
* @Last Modified by: klmp200
|
||||||
|
* @Last Modified time: 2016-12-10 01:33:40
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <CellElment.h>
|
||||||
|
|
||||||
|
void freeCellElement(cellElement* element) {
|
||||||
|
if (element != NULL){
|
||||||
|
free(element);
|
||||||
|
}
|
||||||
|
}
|
@ -40,5 +40,6 @@ struct cellElement {
|
|||||||
typedef struct cellElement * cellElement;
|
typedef struct cellElement * cellElement;
|
||||||
|
|
||||||
|
|
||||||
|
void freeCellElement(cellElement* element);
|
||||||
|
|
||||||
#endif
|
#endif
|
217
LibList/list.c
Normal file
217
LibList/list.c
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
/*********************************************************************************
|
||||||
|
* File Name : list.c
|
||||||
|
* Created By : Bartuccio Antoine
|
||||||
|
* Creation Date : [2016-10-18 13:53]
|
||||||
|
* Last Modified : [2016-11-08 15:00]
|
||||||
|
* Description :
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <CellElment.h>
|
||||||
|
#include <list.h>
|
||||||
|
|
||||||
|
#define SUCCESS 0
|
||||||
|
#define FAILURE 1
|
||||||
|
|
||||||
|
List * CreateList() {
|
||||||
|
List *list = malloc(sizeof(*list));
|
||||||
|
|
||||||
|
if(list != NULL){
|
||||||
|
list->head = NULL;
|
||||||
|
list->tail = NULL;
|
||||||
|
list->size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
int unshift(List *list, cellElement *data){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
|
||||||
|
cellElement* newData = (cellElement*) malloc(sizeof(cellElement));
|
||||||
|
|
||||||
|
/* Create a new element */
|
||||||
|
|
||||||
|
ListElement *newElement = malloc(sizeof(*newElement));
|
||||||
|
if (list != NULL && newElement != NULL && newData != NULL){
|
||||||
|
memcpy(newData, data, size);
|
||||||
|
newElement->data = newData;
|
||||||
|
|
||||||
|
/* Insert the element at the begining of the list */
|
||||||
|
|
||||||
|
newElement->previous = NULL;
|
||||||
|
|
||||||
|
if (list->head != NULL){
|
||||||
|
list->head->previous = newElement;
|
||||||
|
} else {
|
||||||
|
list->tail = newElement;
|
||||||
|
}
|
||||||
|
newElement->next = list->head;
|
||||||
|
|
||||||
|
list->head = newElement;
|
||||||
|
list->size = list->size + 1;
|
||||||
|
} else {
|
||||||
|
if (newElement != NULL){
|
||||||
|
free(newElement);
|
||||||
|
}
|
||||||
|
if (newData != NULL){
|
||||||
|
free(newData);
|
||||||
|
}
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
int push(List *list, cellElement *data){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
cellElement *newData = (cellElement*) malloc(sizeof(cellElement));
|
||||||
|
|
||||||
|
ListElement *newElement = malloc(sizeof(*newElement));
|
||||||
|
if(list != NULL && newElement != NULL && newData != NULL){
|
||||||
|
memcpy(newData, data, size);
|
||||||
|
newElement->data = newData;
|
||||||
|
newElement->next = NULL;
|
||||||
|
if (list->tail == NULL){
|
||||||
|
list->tail = newElement;
|
||||||
|
list->head = newElement;
|
||||||
|
newElement->previous = NULL;
|
||||||
|
} else {
|
||||||
|
newElement->previous = list->tail;
|
||||||
|
list->tail->next = newElement;
|
||||||
|
list->tail = newElement;
|
||||||
|
}
|
||||||
|
list->size = list->size + 1;
|
||||||
|
} else {
|
||||||
|
if (newElement != NULL){
|
||||||
|
free(newElement);
|
||||||
|
}
|
||||||
|
if (newData != NULL){
|
||||||
|
free(newData);
|
||||||
|
}
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListElement * GetElement(List *list, int nb){
|
||||||
|
ListElement *current = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (list != NULL && (nb < list->size || -nb < list->size)){
|
||||||
|
if (nb == list->size -1 || nb == -1){
|
||||||
|
current = list->tail;
|
||||||
|
} else if (nb == 0){
|
||||||
|
current = list->head;
|
||||||
|
} else if (nb <= (list->size - 1)/2 && nb > 0){
|
||||||
|
i = 0;
|
||||||
|
current = list->head;
|
||||||
|
while(i<nb){
|
||||||
|
current = current->next;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
i = list->size - 1;
|
||||||
|
if (nb < 0){
|
||||||
|
nb = list->size + nb -1;
|
||||||
|
}
|
||||||
|
while(i>nb){
|
||||||
|
current = current->previous;
|
||||||
|
i = i - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PopPtnList(List *list, ListElement *element){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
|
||||||
|
if (list != NULL && element != NULL){
|
||||||
|
if (list->head == element && list->tail == element){
|
||||||
|
list->head = NULL;
|
||||||
|
list->tail = NULL;
|
||||||
|
} else if (list->head == element){
|
||||||
|
list->head = element->next;
|
||||||
|
element->previous = NULL;
|
||||||
|
} else if (list->tail == element){
|
||||||
|
list->tail = element->previous;
|
||||||
|
element->previous->next = NULL;
|
||||||
|
} else {
|
||||||
|
element->next->previous = element->previous;
|
||||||
|
element->previous->next = element->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element->data != NULL){
|
||||||
|
freeCellElement(element->data);
|
||||||
|
}
|
||||||
|
free(element);
|
||||||
|
list->size = list->size - 1;
|
||||||
|
} else {
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RemoveElement(List *list, int nb){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
ListElement *toDelete = GetElement(list, nb);
|
||||||
|
|
||||||
|
if (toDelete != NULL){
|
||||||
|
ok = PopPtnList(list, toDelete);
|
||||||
|
} else {
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
int shift(List *list){
|
||||||
|
return RemoveElement(list, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pop(List *list){
|
||||||
|
return RemoveElement(list, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int DeleteListContent(List *list){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
ListElement * current = NULL;
|
||||||
|
ListElement * toDelete = NULL;
|
||||||
|
|
||||||
|
if (list != NULL){
|
||||||
|
current = list->head;
|
||||||
|
while (current != NULL){
|
||||||
|
toDelete = current;
|
||||||
|
current = current->next;
|
||||||
|
|
||||||
|
if (toDelete->data != NULL){
|
||||||
|
freeCellElement(toDelete->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
freeCellElement(toDelete);
|
||||||
|
}
|
||||||
|
list->head = NULL;
|
||||||
|
list->tail = NULL;
|
||||||
|
list->size = 0;
|
||||||
|
} else {
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FreeList(List *list){
|
||||||
|
int ok = SUCCESS;
|
||||||
|
|
||||||
|
if (list != NULL){
|
||||||
|
ok = DeleteListContent(list);
|
||||||
|
if (ok == SUCCESS){
|
||||||
|
free(list);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ok = FAILURE;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
99
LibList/list.h
Normal file
99
LibList/list.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#ifndef LIST_H
|
||||||
|
#define LIST_H
|
||||||
|
|
||||||
|
#import <CellElement.h>
|
||||||
|
|
||||||
|
#define SUCCESS 0
|
||||||
|
#define FAILURE 1
|
||||||
|
|
||||||
|
typedef struct ListElement ListElement;
|
||||||
|
struct ListElement {
|
||||||
|
void *data;
|
||||||
|
ListElement *next;
|
||||||
|
ListElement *previous;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct List {
|
||||||
|
ListElement *head;
|
||||||
|
ListElement *tail;
|
||||||
|
int size;
|
||||||
|
} List;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a new list
|
||||||
|
* @return a pointer of list
|
||||||
|
*/
|
||||||
|
List * CreateList();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert an element at the begining of a list
|
||||||
|
* @param list pointer of a list
|
||||||
|
* @param data any type of data
|
||||||
|
* @param size size of the data
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int unshift(List* list, cellElement* data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert an element at the end of a list
|
||||||
|
* @param list pointer of a list
|
||||||
|
* @param data any type of data
|
||||||
|
* @param size size of the data
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int push(List* list, cellElement* data, int size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get an element in a given list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @param nb the number of the element (can be negative)
|
||||||
|
* @return an element
|
||||||
|
*/
|
||||||
|
ListElement * GetElement(List *list, int nb);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete an element with a pointer of element in the list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @param element of the list as a pointer
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int PopPtnList(List *list, ListElement *element);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete an element with a position in the list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @param position of the element
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int RemoveElement(List *list, int nb);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete the first element of the list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int shift(List *list);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete the last element of the list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int pop(List *list);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete every elements in a list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int DeleteListContent(List *list);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free a list
|
||||||
|
* @param list as a pointer
|
||||||
|
* @return status of the operation
|
||||||
|
*/
|
||||||
|
int FreeList(List *list);
|
||||||
|
|
||||||
|
#endif /* LIST_H */
|
79
Makefile
79
Makefile
@ -1,35 +1,56 @@
|
|||||||
CXX = gcc
|
# Makefile compiling the whole project
|
||||||
TARGET = exe
|
# Don't forget before the first compilation to run that command:
|
||||||
SOURCEFILE = main
|
# export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./Libs
|
||||||
CFLAGS = -Wall -Werror -I. -ansi -pedantic -fpic -g
|
|
||||||
LIST_LIBRARY = matrix/libMatrix
|
|
||||||
|
|
||||||
#Generating the executable
|
CC=gcc
|
||||||
$(TARGET): $(SOURCEFILE).o
|
CFLAGS=-Wall -Werror -ansi -pedantic -fpic -g
|
||||||
@echo "Generating the executable"
|
|
||||||
$(CXX) $(CFLAGS) $(SOURCEFILE).o -o $(TARGET)
|
|
||||||
|
|
||||||
$(SOURCEFILE).o: $(LIST_LIBRARY).so
|
|
||||||
@echo "Generating $(SOURCEFILE).o"
|
|
||||||
$(CXX) $(CFLAGS) -Lmatrix -lmatrix -c $(SOURCEFILE).c -o $@ -LlibMatrix -llibMatrix.so
|
|
||||||
|
|
||||||
$(LIST_LIBRARY).so:clean
|
|
||||||
@echo "Generating libMatrix.so" $@
|
|
||||||
#gcc matrix.c -I. -Wall -Werror -fpic -shared -o $(LIST_LIBRARY).so
|
|
||||||
$(CXX) -Wall -Werror -ansi -pedantic -I. matrix.c -o $(LIST_LIBRARY).so -shared -fpic
|
|
||||||
|
|
||||||
|
|
||||||
#Cleaning the executable
|
LIBSDIR=-L/usr/lib -L./Libs
|
||||||
clean:
|
INCLUDEDIR=-I/usr/include -I. -I./LibCell -I./LibList
|
||||||
@echo "Cleaning temporary files and libMatrix.so"
|
|
||||||
rm -rf *.o *- *.so $(TARGET)
|
#Exe test variables
|
||||||
rm -rf $(LIST_LIBRARY).so
|
TARGET=main.exe
|
||||||
#Generating library
|
SOURCE=main
|
||||||
|
|
||||||
|
SOURCECFILE=$(SOURCE:=.c)
|
||||||
|
SOURCEOFILE=$(SOURCE:=.o)
|
||||||
|
|
||||||
|
#Library variables
|
||||||
|
DEPENDENCE=libCellElement.so
|
||||||
|
DEPENDENCENAME=CellElement
|
||||||
|
|
||||||
|
DEPENDENCELIST=libList.so
|
||||||
|
DEPENDENCENAMELIST=List
|
||||||
|
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
#Generating the main.exe
|
||||||
|
$(TARGET): $(SOURCEOFILE) $(DEPENDENCELIST) lib
|
||||||
|
@echo "\n Generating the " $(TARGET) " binary"
|
||||||
|
$(CC) $(SOURCEOFILE) $(LIBSDIR) -l$(DEPENDENCENAME) -l$(DEPENDENCENAMELIST) -o $(TARGET)
|
||||||
|
|
||||||
|
#Generating the library binary
|
||||||
lib:
|
lib:
|
||||||
@echo "Generating libMatrix.so"
|
@echo "\n Generating the automaton library binary"
|
||||||
$(CXX) -Wall -Werror -ansi -pedantic -I. matrix.c -o $(LIST_LIBRARY).so -shared -fpic
|
$(MAKE) -C LibCell
|
||||||
|
|
||||||
release:
|
$(DEPENDENCELIST):
|
||||||
@echo "Generating a release version of the program"
|
@echo "\n Generating the list library binary"
|
||||||
make CFLAGS= '-Wall -Werror -I. -ansi -pedantic -fpic'
|
$(MAKE) -C LibList
|
||||||
|
|
||||||
|
|
||||||
|
#Generating object files
|
||||||
|
.c.o:
|
||||||
|
@echo "\n Generating " $@ " from " $<
|
||||||
|
$(CC) $(CFLAGS) $(INCLUDEDIR) -c -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
#Cleaning
|
||||||
|
clean:
|
||||||
|
@echo "\n Cleaning"
|
||||||
|
rm -rf *.o ./Libs/*.so *.exe
|
||||||
|
$(MAKE) -C LibPoly clean
|
||||||
|
$(MAKE) -C LibList clean
|
||||||
|
|
||||||
|
16
main.c
Normal file
16
main.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*********************************************************************************
|
||||||
|
* File Name : main.c
|
||||||
|
* Created By : klmp200
|
||||||
|
* Creation Date : [2016-12-10 01:06]
|
||||||
|
* Last Modified : [2016-12-10 01:07]
|
||||||
|
* Description :
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
printf("Hello World\n");
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user