Annotation of rpl/src/occupation_memoire.c, revision 1.1
1.1 ! bertrand 1: /*
! 2: ================================================================================
! 3: RPL/2 (R) version 4.0.9
! 4: Copyright (C) 1989-2010 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 longueur;
! 43:
! 44: unsigned long i;
! 45:
! 46: struct_liste_chainee *l_element_courant;
! 47:
! 48: if (s_objet == NULL)
! 49: {
! 50: return(0);
! 51: }
! 52:
! 53: switch((*s_objet).type)
! 54: {
! 55: case ADR :
! 56: {
! 57: longueur = sizeof(unsigned long);
! 58: break;
! 59: }
! 60:
! 61: case ALG :
! 62: {
! 63: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
! 64: longueur = 0;
! 65:
! 66: while(l_element_courant != NULL)
! 67: {
! 68: longueur += occupation_memoire((*l_element_courant).donnee);
! 69: l_element_courant = (*l_element_courant).suivant;
! 70: }
! 71:
! 72: break;
! 73: }
! 74:
! 75: case BIN :
! 76: {
! 77: longueur = sizeof(logical8);
! 78: break;
! 79: }
! 80:
! 81: case CHN :
! 82: {
! 83: longueur = strlen((unsigned char *) (*s_objet).objet) *
! 84: sizeof(unsigned char);
! 85: break;
! 86: }
! 87:
! 88: case CPL :
! 89: {
! 90: longueur = sizeof(complex16);
! 91: break;
! 92: }
! 93:
! 94: case FCH :
! 95: {
! 96: longueur = sizeof(struct_fonction);
! 97: longueur += strlen((*((struct_fichier *) (*s_objet).objet))
! 98: .nom) * sizeof(unsigned char);
! 99: longueur += occupation_memoire((*((struct_fichier *)
! 100: (*s_objet).objet)).format);
! 101: break;
! 102: }
! 103:
! 104: case FCT :
! 105: {
! 106: longueur = sizeof(struct_fonction);
! 107: longueur += strlen((*((struct_fonction *) (*s_objet).objet))
! 108: .nom_fonction) * sizeof(unsigned char);
! 109: break;
! 110: }
! 111:
! 112: case INT :
! 113: {
! 114: longueur = 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 = sizeof(struct_matrice);
! 135: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
! 136: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
! 137: sizeof(complex16);
! 138: break;
! 139: }
! 140:
! 141: case MIN :
! 142: {
! 143: longueur = sizeof(struct_matrice);
! 144: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
! 145: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
! 146: sizeof(integer8);
! 147: break;
! 148: }
! 149:
! 150: case MRL :
! 151: {
! 152: longueur = sizeof(struct_matrice);
! 153: longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
! 154: (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
! 155: 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 = strlen((*((struct_nom *) (*s_objet).objet)).nom) *
! 168: 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 = strlen((*((struct_socket *) (*s_objet).objet))
! 207: .adresse) * sizeof(unsigned char);
! 208: longueur += strlen((*((struct_socket *) (*s_objet).objet))
! 209: .adresse_distante) * sizeof(unsigned char);
! 210: longueur += occupation_memoire((*((struct_fichier *)
! 211: (*s_objet).objet)).format);
! 212: break;
! 213: }
! 214:
! 215: case SLB :
! 216: {
! 217: longueur = sizeof(struct_bibliotheque);
! 218: longueur += strlen((*((struct_bibliotheque *) (*s_objet).objet))
! 219: .nom) * sizeof(unsigned char);
! 220: break;
! 221: }
! 222:
! 223: case SPH :
! 224: {
! 225: longueur = sizeof(struct_semaphore);
! 226: longueur += strlen((*((struct_semaphore *) (*s_objet).objet))
! 227: .nom) * sizeof(unsigned char);
! 228: break;
! 229: }
! 230:
! 231: case SQL :
! 232: {
! 233: longueur = sizeof(struct_connecteur_sql);
! 234: longueur += strlen((*((struct_connecteur_sql *) (*s_objet).objet))
! 235: .type) * sizeof(unsigned char);
! 236: longueur += strlen((*((struct_connecteur_sql *) (*s_objet).objet))
! 237: .locale) * sizeof(unsigned char);
! 238: break;
! 239: }
! 240:
! 241: case TBL :
! 242: {
! 243: longueur = sizeof(struct_tableau);
! 244:
! 245: for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
! 246: .nombre_elements; i++)
! 247: {
! 248: longueur += occupation_memoire((*((struct_tableau *)
! 249: (*s_objet).objet)).elements[i]);
! 250: }
! 251:
! 252: break;
! 253: }
! 254:
! 255: case VCX :
! 256: {
! 257: longueur = sizeof(struct_vecteur);
! 258: longueur += (*((struct_vecteur *) (*s_objet).objet))
! 259: .taille * sizeof(complex16);
! 260: break;
! 261: }
! 262:
! 263: case VIN :
! 264: {
! 265: longueur = sizeof(struct_vecteur);
! 266: longueur += (*((struct_vecteur *) (*s_objet).objet))
! 267: .taille * sizeof(integer8);
! 268: break;
! 269: }
! 270:
! 271: case VRL :
! 272: {
! 273: longueur = sizeof(struct_vecteur);
! 274: longueur += (*((struct_vecteur *) (*s_objet).objet))
! 275: .taille * sizeof(real8);
! 276: break;
! 277: }
! 278:
! 279: default :
! 280: {
! 281: longueur = 0;
! 282: break;
! 283: }
! 284: }
! 285:
! 286: return(longueur / (*s_objet).nombre_occurrences);
! 287: }
! 288:
! 289: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>