Annotation of rpl/src/occupation_memoire.c, revision 1.55

1.1       bertrand    1: /*
                      2: ================================================================================
1.55    ! bertrand    3:   RPL/2 (R) version 4.1.25
        !             4:   Copyright (C) 1989-2016 Dr. BERTRAND Joël
1.1       bertrand    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: 
1.11      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   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: {
1.41      bertrand   42:    integer8                    i;
1.1       bertrand   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:        {
1.41      bertrand   56:            longueur = (integer8) sizeof(integer8);
1.1       bertrand   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:        {
1.41      bertrand   76:            longueur = (integer8) sizeof(logical8);
1.1       bertrand   77:            break;
                     78:        }
                     79: 
                     80:        case CHN :
                     81:        {
1.41      bertrand   82:            longueur = (integer8) (strlen((unsigned char *) (*s_objet).objet)) *
                     83:                    (integer8) sizeof(unsigned char);
1.1       bertrand   84:            break;
                     85:        }
                     86: 
                     87:        case CPL :
                     88:        {
1.41      bertrand   89:            longueur = (integer8) sizeof(complex16);
1.1       bertrand   90:            break;
                     91:        }
                     92: 
                     93:        case FCH :
                     94:        {
                     95:            longueur = sizeof(struct_fonction);
1.41      bertrand   96:            longueur += (integer8) (strlen((*((struct_fichier *)
                     97:                    (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
1.1       bertrand   98:            longueur += occupation_memoire((*((struct_fichier *) 
                     99:                    (*s_objet).objet)).format);
                    100:            break;
                    101:        }
                    102: 
                    103:        case FCT :
                    104:        {
                    105:            longueur = sizeof(struct_fonction);
1.41      bertrand  106:            longueur += ((integer8) (strlen((*((struct_fonction *)
                    107:                    (*s_objet).objet)).nom_fonction)) *
                    108:                    (integer8) sizeof(unsigned char));
1.1       bertrand  109:            break;
                    110:        }
                    111: 
                    112:        case INT :
                    113:        {
1.41      bertrand  114:            longueur = (integer8) sizeof(integer8);
1.1       bertrand  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:        {
1.41      bertrand  134:            longueur = (integer8) sizeof(struct_matrice);
1.1       bertrand  135:            longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
                    136:                    (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
1.41      bertrand  137:                    (integer8) sizeof(complex16);
1.1       bertrand  138:            break;
                    139:        }
                    140: 
                    141:        case MIN :
                    142:        {
1.41      bertrand  143:            longueur = (integer8) sizeof(struct_matrice);
1.1       bertrand  144:            longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
                    145:                    (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
1.41      bertrand  146:                    (integer8) sizeof(integer8);
1.1       bertrand  147:            break;
                    148:        }
                    149: 
                    150:        case MRL :
                    151:        {
1.41      bertrand  152:            longueur = (integer8) sizeof(struct_matrice);
1.1       bertrand  153:            longueur += (*((struct_matrice *) (*s_objet).objet)).nombre_lignes *
                    154:                    (*((struct_matrice *) (*s_objet).objet)).nombre_colonnes *
1.41      bertrand  155:                    (integer8) sizeof(real8);
1.1       bertrand  156:            break;
                    157:        }
                    158: 
                    159:        case MTX :
                    160:        {
                    161:            longueur = sizeof(struct_mutex);
                    162:            break;
                    163:        }
                    164: 
                    165:        case NOM :
                    166:        {
1.41      bertrand  167:            longueur = ((integer8) strlen((*((struct_nom *) (*s_objet).objet))
                    168:                    .nom)) * (integer8) sizeof(unsigned char);
1.1       bertrand  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:        {
1.41      bertrand  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);
1.1       bertrand  212:            longueur += occupation_memoire((*((struct_fichier *) 
                    213:                    (*s_objet).objet)).format);
                    214:            break;
                    215:        }
                    216: 
                    217:        case SLB :
                    218:        {
1.41      bertrand  219:            longueur = (integer8) sizeof(struct_bibliotheque);
                    220:            longueur += ((integer8) strlen((*((struct_bibliotheque *)
                    221:                    (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
1.1       bertrand  222:            break;
                    223:        }
                    224: 
                    225:        case SPH :
                    226:        {
1.41      bertrand  227:            longueur = (integer8) sizeof(struct_semaphore);
                    228:            longueur += ((integer8) strlen((*((struct_semaphore *)
                    229:                    (*s_objet).objet)).nom)) * (integer8) sizeof(unsigned char);
1.1       bertrand  230:            break;
                    231:        }
                    232: 
                    233:        case SQL :
                    234:        {
1.41      bertrand  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));
1.1       bertrand  242:            break;
                    243:        }
                    244: 
                    245:        case TBL :
                    246:        {
1.41      bertrand  247:            longueur = (integer8) sizeof(struct_tableau);
1.1       bertrand  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:        {
1.41      bertrand  261:            longueur = (integer8) sizeof(struct_vecteur);
1.1       bertrand  262:            longueur += (*((struct_vecteur *) (*s_objet).objet))
1.41      bertrand  263:                    .taille * (integer8) sizeof(complex16);
1.1       bertrand  264:            break;
                    265:        }
                    266: 
                    267:        case VIN :
                    268:        {
1.41      bertrand  269:            longueur = (integer8) sizeof(struct_vecteur);
1.1       bertrand  270:            longueur += (*((struct_vecteur *) (*s_objet).objet))
1.41      bertrand  271:                    .taille * (integer8) sizeof(integer8);
1.1       bertrand  272:            break;
                    273:        }
                    274: 
                    275:        case VRL :
                    276:        {
1.41      bertrand  277:            longueur = (integer8) sizeof(struct_vecteur);
1.1       bertrand  278:            longueur += (*((struct_vecteur *) (*s_objet).objet))
1.41      bertrand  279:                    .taille * (integer8) sizeof(real8);
1.1       bertrand  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>