1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| MusicFile List_CopyNode(const MusicFile src)
{
MusicFile *dest;
dest = malloc(sizeof(MusicFile)); // Ce malloc pose parfois problème
dest->Lenght = src.Lenght;
dest->Score = src.Score;
dest->Title = malloc(sizeof(char*));
strcpy(dest->Title,src.Title);
return *dest;
}
void List_Append(list *l, MusicFile data)
{
node* NewNode;
NewNode = malloc(sizeof(node)); // Ce malloc passe parfois problème.
list InitialPos;
InitialPos = (*l);
NewNode->data = List_CopyNode(data);
while((*l)->next != NULL)
(*l)=(*l)->next;
(*l)->next =NewNode;
(*l)=NewNode;
(*l)->next=NULL;
(*l) = InitialPos;
}
void List_Add(list *l, MusicFile data)
{
node *temp;
temp=(node *) malloc(sizeof(node));
temp->data = List_CopyNode(data);
if (*l == NULL)
{
(*l)=temp;
(*l)->next=NULL;
}
else
{
temp->next=(*l);
(*l)=temp;
}
}
void List_Addafter(list *l,MusicFile data, int position)
{
int i;
list temp,left,right;
right=(*l);
for(i=1;i<position;i++)
{
left = right;
right = right->next;
}
temp=(node *)malloc(sizeof(node));
temp->data = List_CopyNode(data);
left->next=temp;
left=temp;
left->next=right;
}
void List_Insert(list *l, MusicFile data) // Erreur si la lite est vide
{
int c=0;
list temp;
temp = *l;
if(temp==NULL)
List_Add(l,data);
else
{
while(temp!=NULL)
{
if(strcmp(temp->data.Title,data.Title)<0)
c++;
temp=temp->next;
}
if(c==0)
List_Add(l,data);
else if(c<List_GetSize(*l))
List_Addafter(l,data,++c);
else
List_Append(l,data);
}
}
size_t List_GetSize(list l)
{
int c=0;
while(l!=NULL)
{
l=l->next;
c++;
}
return c;
} |
Partager