-:    0:Source:/home/MPI/testing/mpich2/mpich2/src/mpid/common/datatype/mpid_ext32_datatype.c
        -:    0:Graph:mpid_ext32_datatype.gcno
        -:    0:Data:mpid_ext32_datatype.gcda
        -:    0:Runs:510
        -:    0:Programs:137
        -:    1:/* -*- Mode: C; c-basic-offset:4 ; -*- */
        -:    2:
        -:    3:/*
        -:    4: *  (C) 2001 by Argonne National Laboratory.
        -:    5: *      See COPYRIGHT in top-level directory.
        -:    6: */
        -:    7:
        -:    8:#include <stdio.h>
        -:    9:#include <stdlib.h>
        -:   10:
        -:   11:#include <mpichconf.h>
        -:   12:#include <mpiimpl.h>
        -:   13:#include <mpid_dataloop.h>
        -:   14:
        -:   15:
        -:   16:typedef struct external32_basic_size
        -:   17:{
        -:   18:    MPI_Datatype el_type;
        -:   19:    MPI_Aint el_size;
        -:   20:} external32_basic_size_t;
        -:   21:
        -:   22:static external32_basic_size_t external32_basic_size_array[] =
        -:   23:{
        -:   24:    { MPI_PACKED, 1 },
        -:   25:    { MPI_BYTE, 1 },
        -:   26:    { MPI_CHAR, 1 },
        -:   27:    { MPI_UNSIGNED_CHAR, 1 },
        -:   28:    { MPI_SHORT, 2 },
        -:   29:    { MPI_UNSIGNED_SHORT, 2 },
        -:   30:    { MPI_INT, 4 },
        -:   31:    { MPI_UNSIGNED, 4 },
        -:   32:    { MPI_LONG, 4 },
        -:   33:    { MPI_UNSIGNED_LONG, 4 },
        -:   34:    { MPI_FLOAT, 4 },
        -:   35:    { MPI_DOUBLE, 8 },
        -:   36:    { MPI_LONG_DOUBLE, 16 },
        -:   37:    { MPI_CHARACTER, 1 },
        -:   38:    { MPI_INT8_T, 1 },
        -:   39:    { MPI_INT16_T, 2 },
        -:   40:    { MPI_INT32_T, 4 },
        -:   41:    { MPI_INT64_T, 8 },
        -:   42:    { MPI_UINT8_T, 1 },
        -:   43:    { MPI_UINT16_T, 2 },
        -:   44:    { MPI_UINT32_T, 4 },
        -:   45:    { MPI_UINT64_T, 8 },
        -:   46:    { MPI_C_BOOL, 4 },
        -:   47:    { MPI_C_FLOAT_COMPLEX, 2*4 },
        -:   48:    { MPI_C_DOUBLE_COMPLEX, 2*8 },
        -:   49:    { MPI_C_LONG_DOUBLE_COMPLEX, 2*16 },
        -:   50:    { MPI_LOGICAL, 4 },
        -:   51:    { MPI_INTEGER, 4 },
        -:   52:    { MPI_REAL, 4 },
        -:   53:    { MPI_DOUBLE_PRECISION, 8 },
        -:   54:    { MPI_COMPLEX, 8 },
        -:   55:    { MPI_DOUBLE_COMPLEX, 16 },
        -:   56:#ifdef HAVE_FORTRAN_BINDING
        -:   57:    { MPI_SIGNED_CHAR, 1 },
        -:   58:    { MPI_WCHAR, 2 },
        -:   59:    { MPI_INTEGER1, 1 },
        -:   60:    { MPI_INTEGER2, 2 },
        -:   61:    { MPI_INTEGER4, 4 },
        -:   62:    { MPI_INTEGER8, 8 },
        -:   63:    { MPI_UNSIGNED_LONG_LONG, 8 },
        -:   64:    { MPI_REAL4, 4 },
        -:   65:    { MPI_REAL8, 8 },
        -:   66:    { MPI_REAL16, 16 },
        -:   67:#endif
        -:   68:    { MPI_LONG_LONG, 8 }
        -:   69:};
        -:   70:
        -:   71:MPI_Aint MPIDI_Datatype_get_basic_size_external32(MPI_Datatype el_type)
       25:   72:{
       25:   73:    MPI_Aint ret = (MPI_Aint) 0;
       25:   74:    unsigned int i = 0;
      721:   75:    for(i = 0; i < (sizeof(external32_basic_size_array) /
      671:   76:                    sizeof(external32_basic_size_t)); i++)
        -:   77:    {
      696:   78:        if (external32_basic_size_array[i].el_type == el_type)
        -:   79:        {
       25:   80:            ret = external32_basic_size_array[i].el_size;
       25:   81:            break;
        -:   82:        }
        -:   83:    }
       25:   84:    return ret;
        -:   85:}
        -:   86:
        -:   87:MPI_Aint MPID_Datatype_size_external32(MPI_Datatype type)
        9:   88:{
        9:   89:    if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {
        9:   90:	return MPIDI_Datatype_get_basic_size_external32(type);
        -:   91:    }
        -:   92:    else {
    #####:   93:	MPID_Dataloop *dlp = NULL;
        -:   94:
    #####:   95:	MPID_Datatype_get_loopptr_macro(type, dlp, MPID_DATALOOP_HETEROGENEOUS);
        -:   96:
    #####:   97:	return MPID_Dataloop_stream_size(dlp,
        -:   98:					 MPIDI_Datatype_get_basic_size_external32);
        -:   99:    }
        -:  100:}
        -:  101: