1 |
|
1 |
/*****************************************************************
|
2 |
|
|
|
3 |
|
|
memoire.h Type:Inc
|
4 |
|
|
|
5 |
|
|
gestion de la memoire
|
6 |
|
|
|
7 |
|
|
Date de creation : Thu Jan 11 16:05:36 1996
|
8 |
|
|
|
9 |
|
|
Derniere version : Wed Aug 6 11:38:24 1997
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
|
|
|
16 |
|
|
|
17 |
|
|
|
18 |
|
|
|
19 |
|
|
|
20 |
|
|
|
21 |
|
|
|
22 |
|
|
|
23 |
|
|
|
24 |
|
|
Vincent FRANCOIS
|
25 |
|
|
|
26 |
|
|
*****************************************************************/
|
27 |
|
|
|
28 |
|
|
#define NSIZE 10
|
29 |
|
|
#define NSIZEP 6
|
30 |
|
|
|
31 |
|
|
#define NOM(var1,var2) var1##var2
|
32 |
|
|
#define NOM2(var1,var2,var3) var1##var2##var3
|
33 |
|
|
|
34 |
|
|
#define ERREUR_ALLOC(var)\
|
35 |
|
|
if ((var)==NULL)\
|
36 |
|
|
{\
|
37 |
|
|
aff_text("ERREUR1....plus de memoire\n");\
|
38 |
|
|
exit(1);\
|
39 |
|
|
}
|
40 |
|
|
|
41 |
|
|
|
42 |
|
|
|
43 |
|
|
#define ERREUR_ALLOC2(var)\
|
44 |
|
|
if ((var)==NULL)\
|
45 |
|
|
{\
|
46 |
|
|
aff_text("ERREUR2....plus de memoire.\n");\
|
47 |
|
|
exit(1);\
|
48 |
|
|
}
|
49 |
|
|
|
50 |
|
|
#define ERREUR_ALLOC3(var)\
|
51 |
|
|
if ((var)==NULL)\
|
52 |
|
|
{\
|
53 |
|
|
aff_text("ERREUR3....plus de memoire.\n");\
|
54 |
|
|
exit(1);\
|
55 |
|
|
}
|
56 |
|
|
|
57 |
|
|
#define NEW_POINTEUR(num,var,root)\
|
58 |
|
|
{\
|
59 |
|
|
if (NOM(root,var)==NULL)\
|
60 |
|
|
{\
|
61 |
|
|
NOM(root,var)=(struct NOM(s_,var) **)calloc(100,sizeof(struct NOM(s_,var) *));\
|
62 |
|
|
ERREUR_ALLOC2(NOM(root,var));\
|
63 |
|
|
}\
|
64 |
|
|
else if (NOM2(root,nb_,var)%100==0)\
|
65 |
|
|
{\
|
66 |
|
|
NOM(root,var)=(struct NOM(s_,var) **)realloc(NOM(root,var),(NOM2(root,nb_,var)/100+1)*100*sizeof(struct NOM(s_,var) *));\
|
67 |
|
|
ERREUR_ALLOC3(NOM(root,var));\
|
68 |
|
|
}\
|
69 |
|
|
num=NOM2(root,nb_,var);\
|
70 |
|
|
NOM2(root,nb_,var)++;\
|
71 |
|
|
}
|
72 |
|
|
|
73 |
|
|
|
74 |
|
|
|
75 |
|
|
#define NEW_ALLOC(var,root)\
|
76 |
|
|
{\
|
77 |
|
|
NOM(root,var)=(struct NOM(s_,var) **)calloc(1024,sizeof(struct NOM(s_,var) *));\
|
78 |
|
|
ERREUR_ALLOC(NOM(root,var));\
|
79 |
|
|
}
|
80 |
|
|
|
81 |
|
|
|
82 |
|
|
#define ADRESSE(num,var,root) NOM(root,var)[num>>NSIZE]+(num%(1<<NSIZE))
|
83 |
|
|
|
84 |
|
|
|
85 |
|
|
|
86 |
|
|
|
87 |
|
|
#define NEW_ENTITE(p,var,root)\
|
88 |
|
|
{\
|
89 |
|
|
if ( (NOM2(root,nb_,var))%(1<<NSIZE)==0)\
|
90 |
|
|
{\
|
91 |
|
|
if (NOM(root,var)[(NOM2(root,nb_,var))>>NSIZE]==NULL) NOM(root,var)[(NOM2(root,nb_,var))>>NSIZE]=(struct NOM(s_,var) *)calloc(1<<NSIZE,sizeof(struct NOM(s_,var)));\
|
92 |
|
|
ERREUR_ALLOC(NOM(root,var));\
|
93 |
|
|
}\
|
94 |
|
|
p=ADRESSE(NOM2(root,nb_,var),var,root);\
|
95 |
|
|
NOM2(root,nb_,var)++;\
|
96 |
|
|
}
|
97 |
|
|
|
98 |
|
|
|
99 |
|
|
#define LIBERE(var,root)\
|
100 |
|
|
{\
|
101 |
|
|
if (NOM(root,var)!=NULL)\
|
102 |
|
|
{\
|
103 |
|
|
for (i=0;i<1024;i++)\
|
104 |
|
|
if ((NOM(root,var)[i])!=NULL) free(NOM(root,var)[i]);\
|
105 |
|
|
NOM2(root,nb_,var)=0;\
|
106 |
|
|
free(NOM(root,var));\
|
107 |
|
|
}\
|
108 |
|
|
}
|
109 |
|
|
|
110 |
|
|
#define LIBERE_LIEN(p,var,root)\
|
111 |
|
|
{\
|
112 |
|
|
for (i=0;i<(NOM2(root,nb_,var));i++)\
|
113 |
|
|
{\
|
114 |
|
|
var=ADRESSE(i,var,root);\
|
115 |
|
|
if (NOM2(var,->,p)!=NULL) free(NOM2(var,->,p));\
|
116 |
|
|
}\
|
117 |
|
|
}
|
118 |
|
|
|