File:  [local] / rpl / src / occupation_memoire.c
Revision 1.65: download - view: text, annotated - select for diffs - revision graph
Fri Jan 10 11:15:50 2020 UTC (4 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_32, HEAD
Modification du copyright.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.32
    4:   Copyright (C) 1989-2020 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>