forked from djalan/chat
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlisteGroupe.c
158 lines (107 loc) · 3.03 KB
/
listeGroupe.c
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
Classe: listeGroupe.c
Description: Liste des groupes et ses methodes de manipulations
Auteurs: Alain Sirois SIRA15068305
Philippe Mercure MERP27078708
Date: 18 juin 2011
Cours: yyyyyyyyyy
Groupe: 30
Travail: TP2
Professeur: xxxxxxxxxx
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "listeGroupe.h"
#include "groupe.h"
#include "config.h"
static int nbrElems = 0;
static void* lesGroupes[MAX_GROUPES];
// Ajouter un groupe dans la liste
void listeGroupeAjouter (void* elem) {
assert (elem != NULL && "elem doit etre un pointeur non NULL");
assert (nbrElems < MAX_GROUPES && "liste groupe pleine");
lesGroupes[nbrElems] = elem;
nbrElems++;
}
// Donner le nombre de groupes
int listeGroupeTaille () {
return nbrElems;
}
// Verifier si un groupe est dans la liste
int listeGroupeContient (char* nom) {
int i;
for (i=0; i < nbrElems; i++) {
if ( !strcmp(donnerGroupeNom(lesGroupes[i]), nom) )
return 1;
}
return 0;
}
// Donner la position d'un groupe dans la liste
int listeGroupePosition (char* nom) {
int i;
for (i=0; i < nbrElems; i++) {
if ( !strcmp(donnerGroupeNom(lesGroupes[i]), nom) )
return i;
}
return -1;
}
// Donner le groupe a une certaine position
void* listeGroupeObtenir (int position) {
assert (nbrElems > 0 && "liste groupes vide");
return lesGroupes[position];
}
// Donner le groupe correspondant a un certain nom
void* listeGroupeElement (char* nom) {
assert (nbrElems > 0 && "liste groupes vide");
return lesGroupes[ listeGroupePosition(nom) ];
}
// Enlever le groupe portant un certain nom
void* listeGroupeEnlever (char *nom) {
assert (nbrElems > 0 && "liste groupes vide");
int position = listeGroupePosition (nom);
Groupe groupe = lesGroupes[position];
supprimerGroupe (lesGroupes[position]);
int i;
for ( i=position; i < (nbrElems-1); i++ )
lesGroupes[i] = lesGroupes[i+1];
nbrElems--;
return groupe;
}
// Verifier si un usager est responsable d'au moins un groupe
int listeGroupeEstResponsable (char* nom) {
int i;
for ( i=0; i < nbrElems; i++ ) {
if ( !strcmp(nom, donnerUsagerNom(donnerResponsable(lesGroupes[i]))) )
return 1;
}
return 0;
}
// Verifier si un usager est membre d'au moins un groupe prive
int listeGroupeEstMembrePrive (char* nom) {
int i;
for ( i=0; i < nbrElems; i++ ) {
if ( !strcmp("prive", donnerGroupeType(lesGroupes[i])) ) {
if ( groupeContientMembre(lesGroupes[i], nom) )
return 1;
}
}
return 0;
}
// ToString des groupes dans la liste
char* listeGroupeToString () {
if ( nbrElems == 0 )
return "Il n'y a aucun groupe presentement";
char* groupe1 = donnerGroupeNom (lesGroupes[0]);
char* reponse = (char*) malloc ( ((int) strlen(groupe1) + 1) * sizeof(char) );
sprintf (reponse, "%s", groupe1);
int i;
for ( i=1; i < nbrElems; i++ ) {
int l = (int) strlen (reponse);
char* groupe = donnerGroupeNom (lesGroupes[i]);
reponse = (char*) realloc ( reponse, ((l + (int) strlen (groupe) + 1) * sizeof(char)) );
sprintf (reponse, "%s %s", reponse, groupe);
}
return reponse;
}