1: /*
2: ================================================================================
3: RPL/2 (R) version 4.1.36
4: Copyright (C) 1989-2025 Dr. BERTRAND Joël
5:
6: This file is part of RPL/2.
7:
8: RPL/2 is free software; you can redistribute it and/or modify it
9: under the terms of the CeCILL V2 License as published by the french
10: CEA, CNRS and INRIA.
11:
12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
15: for more details.
16:
17: You should have received a copy of the CeCILL License
18: along with RPL/2. If not, write to info@cecill.info.
19: ================================================================================
20: */
21:
22:
23: #include "rpl-conv.h"
24:
25:
26: /*
27: ================================================================================
28: Fonction renvoyant la taille d'un objet en octets
29: (pondérée par le nombre d'occurrences de cet objet)
30: ================================================================================
31: Entrée : pointeur sur l'objet
32: --------------------------------------------------------------------------------
33: Sortie : taille
34: --------------------------------------------------------------------------------
35: Effets de bord : néant
36: ================================================================================
37: */
38:
39: integer8
40: occupation_memoire(struct_objet *s_objet)
41: {
42: integer8 i;
43: integer8 longueur;
44:
45: struct_liste_chainee *l_element_courant;
46:
47: if (s_objet == NULL)
48: {
49: return(0);
50: }
51:
52: switch((*s_objet).type)
53: {
54: case ADR :
55: {
56: longueur = (integer8) sizeof(integer8);
57: break;
58: }
59:
60: case ALG :
61: {
62: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
63: longueur = 0;
64:
65: while(l_element_courant != NULL)
66: {
67: longueur += occupation_memoire((*l_element_courant).donnee);
68: l_element_courant = (*l_element_courant).suivant;
69: }
70:
71: break;
72: }
73:
74: case BIN :
75: {
76: longueur = (integer8) sizeof(logical8);
77: break;
78: }
79:
80: case CHN :
81: {
82: longueur = (integer8) (strlen((unsigned char *) (*s_objet).objet)) *
83: (integer8) sizeof(unsigned char);
84: break;
85: }
86:
87: case CPL :
88: {
89: longueur = (integer8) sizeof(complex16);
90: break;
91: }
92:
93: case FCH :
94: {
95: longueur = sizeof(struct_fonction);
96: longueur += (integer8) (strlen((*((struct_fichier *)
97: (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
98: longueur += occupation_memoire((*((struct_fichier *)
99: (*s_objet).objet)).format);
100: break;
101: }
102:
103: case FCT :
104: {
105: longueur = sizeof(struct_fonction);
106: longueur += ((integer8) (strlen((*((struct_fonction *)
107: (*s_objet).objet)).nom_fonction)) *
108: (integer8) sizeof(unsigned char));
109: break;
110: }
111:
112: case INT :
113: {
114: longueur = (integer8) sizeof(integer8);
115: break;
116: }
117:
118: case LST :
119: {
120: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
121: longueur = 0;
122:
123: while(l_element_courant != NULL)
124: {
125: longueur += occupation_memoire((*l_element_courant).donnee);
126: l_element_courant = (*l_element_courant).suivant;
127: }
128:
129: break;
130: }
131:
132: case MCX :
133: {
134: longueur = (integer8) sizeof(struct_matrice);
135: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
136: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
137: (integer8) sizeof(complex16);
138: break;
139: }
140:
141: case MIN :
142: {
143: longueur = (integer8) sizeof(struct_matrice);
144: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
145: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
146: (integer8) sizeof(integer8);
147: break;
148: }
149:
150: case MRL :
151: {
152: longueur = (integer8) sizeof(struct_matrice);
153: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
154: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
155: (integer8) sizeof(real8);
156: break;
157: }
158:
159: case MTX :
160: {
161: longueur = sizeof(struct_mutex);
162: break;
163: }
164:
165: case NOM :
166: {
167: longueur = ((integer8) strlen((*((struct_nom *) (*s_objet).objet))
168: .nom)) * (integer8) sizeof(unsigned char);
169: break;
170: }
171:
172: case NON :
173: {
174: longueur = 0;
175: break;
176: }
177:
178: case PRC :
179: {
180: longueur = sizeof(struct_processus_fils);
181: break;
182: }
183:
184: case REL :
185: {
186: longueur = sizeof(real8);
187: break;
188: }
189:
190: case RPN :
191: {
192: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
193: longueur = 0;
194:
195: while(l_element_courant != NULL)
196: {
197: longueur += occupation_memoire((*l_element_courant).donnee);
198: l_element_courant = (*l_element_courant).suivant;
199: }
200:
201: break;
202: }
203:
204: case SCK :
205: {
206: longueur = ((integer8) strlen((*((struct_socket *)
207: (*s_objet).objet)).adresse)) *
208: (integer8) sizeof(unsigned char);
209: longueur += ((integer8) strlen((*((struct_socket *)
210: (*s_objet).objet)).adresse_distante)) *
211: (integer8) sizeof(unsigned char);
212: longueur += occupation_memoire((*((struct_fichier *)
213: (*s_objet).objet)).format);
214: break;
215: }
216:
217: case SLB :
218: {
219: longueur = (integer8) sizeof(struct_bibliotheque);
220: longueur += ((integer8) strlen((*((struct_bibliotheque *)
221: (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
222: break;
223: }
224:
225: case SPH :
226: {
227: longueur = (integer8) sizeof(struct_semaphore);
228: longueur += ((integer8) strlen((*((struct_semaphore *)
229: (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
230: break;
231: }
232:
233: case SQL :
234: {
235: longueur = (integer8) sizeof(struct_connecteur_sql);
236: longueur += ((integer8) strlen((*((struct_connecteur_sql *)
237: (*s_objet).objet)).type)) *
238: (integer8) sizeof(unsigned char);
239: longueur += (integer8) (strlen((*((struct_connecteur_sql *)
240: (*s_objet).objet)).locale)) *
241: ((integer8) sizeof(unsigned char));
242: break;
243: }
244:
245: case TBL :
246: {
247: longueur = (integer8) sizeof(struct_tableau);
248:
249: for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
250: .nombre_elements; i++)
251: {
252: longueur += occupation_memoire((*((struct_tableau *)
253: (*s_objet).objet)).elements[i]);
254: }
255:
256: break;
257: }
258:
259: case VCX :
260: {
261: longueur = (integer8) sizeof(struct_vecteur);
262: longueur += (*((struct_vecteur *) (*s_objet).objet))
263: .taille * (integer8) sizeof(complex16);
264: break;
265: }
266:
267: case VIN :
268: {
269: longueur = (integer8) sizeof(struct_vecteur);
270: longueur += (*((struct_vecteur *) (*s_objet).objet))
271: .taille * (integer8) sizeof(integer8);
272: break;
273: }
274:
275: case VRL :
276: {
277: longueur = (integer8) sizeof(struct_vecteur);
278: longueur += (*((struct_vecteur *) (*s_objet).objet))
279: .taille * (integer8) sizeof(real8);
280: break;
281: }
282:
283: default :
284: {
285: longueur = 0;
286: break;
287: }
288: }
289:
290: return(longueur / (*s_objet).nombre_occurrences);
291: }
292:
293: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>