コード例 #1
0
ファイル: matdump.c プロジェクト: agramfort/matio-openmeeg
static void
print_default_numeric_3d(matvar_t *matvar)
{
    size_t i, j, k, l, stride;
    stride = Mat_SizeOf(matvar->data_type);
    if ( matvar->isComplex ) {
        mat_complex_split_t *complex_data = matvar->data;
        char *rp = complex_data->Re;
        char *ip = complex_data->Im;
        for ( k = 0; k < matvar->dims[2]; k++ ) {
            Mat_Message("%s(:,:,%lu) = ",matvar->name,k);
            indent++;
            for ( i = 0; i < matvar->dims[0]; i++ ) {
                for ( l = 0; l < indent; l++ )
                    printf("    ");
                for ( j = 0; j < matvar->dims[1]; j++ ) {
                    size_t idx = matvar->dims[0]*matvar->dims[1]*k+matvar->dims[0]*j+i;
                    print_default_number(matvar->data_type,rp+idx*stride);
                    printf(" + ");
                    print_default_number(matvar->data_type,ip+idx*stride);
                    printf("i ");
                }
                printf("\n");
            }
            indent--;
            printf("\n");
        }
    } else {
        char *data = matvar->data;
        for ( k = 0; k < matvar->dims[2]; k++ ) {
            Mat_Message("%s(:,:,%lu) = ",matvar->name,k);
            indent++;
            for ( i = 0; i < matvar->dims[0]; i++ ) {
                for ( l = 0; l < indent; l++ )
                    printf("    ");
                for ( j = 0; j < matvar->dims[1]; j++ ) {
                    size_t idx = matvar->dims[0]*matvar->dims[1]*k+matvar->dims[0]*j+i;
                    print_default_number(matvar->data_type,
                                    data+idx*stride);
                    printf(" ");
                }
                printf("\n");
            }
            indent--;
            printf("\n");
        }
    }
}
コード例 #2
0
ファイル: matdump.c プロジェクト: agramfort/matio-openmeeg
static void
print_default(matvar_t *matvar)
{
    if ( NULL == matvar )
        return;

    switch ( matvar->class_type ) {
        case MAT_C_DOUBLE:
        case MAT_C_SINGLE:
        case MAT_C_INT64:
        case MAT_C_UINT64:
        case MAT_C_INT32:
        case MAT_C_UINT32:
        case MAT_C_INT16:
        case MAT_C_UINT16:
        case MAT_C_INT8:
        case MAT_C_UINT8:
        {
            if ( matvar->rank == 2 )
                print_default_numeric_2d(matvar);
            else if ( matvar->rank == 3 )
                print_default_numeric_3d(matvar);
            break;
        }
        case MAT_C_CHAR:
        case MAT_C_SPARSE:
            Mat_VarPrint(matvar, printdata);
            break;
        case MAT_C_STRUCT:
        {
            matvar_t **fields = (matvar_t **)matvar->data;
            int        nfields;
            int        i;
            size_t     nmemb;

            if ( matvar->name )
                Mat_Message("      Name: %s", matvar->name);
            Mat_Message("      Rank: %d", matvar->rank);
            if ( matvar->rank == 0 )
                return;
            Mat_Message("Class Type: Structure");
            nfields = Mat_VarGetNumberOfFields(matvar);
            nmemb = matvar->dims[0];
            for ( i = 1; i < matvar->rank; i++ )
                nmemb *= matvar->dims[i];
            if ( nfields > 0 && nmemb < 1 ) {
                char * const *fieldnames = Mat_VarGetStructFieldnames(matvar);
                Mat_Message("Fields[%d] {", nfields);
                indent++;
                for ( i = 0; i < nfields; i++ )
                    Mat_Message("    Name: %s", fieldnames[i]);
                indent--;
                Mat_Message("}");
            } else if ( nfields > 0 && nmemb > 0 ) {
                Mat_Message("Fields[%d] {", nfields);
                indent++;
                for ( i = 0; i < nfields*nmemb; i++ )
                    print_default(fields[i]);
                indent--;
                Mat_Message("}");
            }
            break;
        }
        case MAT_C_CELL:
        {
            matvar_t **cells = (matvar_t **)matvar->data;
            size_t     ncells;
            int        i;

            if ( matvar->name )
                Mat_Message("      Name: %s", matvar->name);
            Mat_Message("      Rank: %d", matvar->rank);
            if ( matvar->rank == 0 )
                return;
            ncells = matvar->dims[0];
            for ( i = 1; i < matvar->rank; i++ )
                ncells *= matvar->dims[i];
            Mat_Message("Class Type: Cell Array");
            Mat_Message("{");
            indent++;
            for ( i = 0; i < ncells; i++ )
                print_default(cells[i]);
            indent--;
            Mat_Message("}");
            break;
        }
        default:
            Mat_Message("Empty");
    }
}
コード例 #3
0
ファイル: mat4.c プロジェクト: alharbin/dpix
/** @if mat_devman
 * @brief Prints the variable from a MAT version 4 file
 *
 * @ingroup mat_internal
 * @param mat MAT file pointer
 * @param matvar pointer to the mat variable
 * @endif
 */
void
Mat_VarPrint4(matvar_t *matvar,int printdata)
{
    int i, j;

    if ( matvar == NULL )
        return;
    if ( matvar->name )
        Mat_Message("      Name: %s", matvar->name);
    Mat_Message("      Rank: %d", matvar->rank);
    if ( matvar->rank == 0 )
        return;
    if ( matvar->isComplex )
        Mat_Message("Class Type: %s (complex)",v4_class_type_desc[matvar->class_type]);
    else
        Mat_Message("Class Type: %s",v4_class_type_desc[matvar->class_type]);
    if ( matvar->data_type )
        Mat_Message(" Data Type: %s",v4_data_type_desc[matvar->data_type]);
    if ( matvar->data != NULL && matvar->data_size > 0 ) {
        switch( matvar->class_type ) {
            case MAT_C_DOUBLE:
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    double *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%f + %fi ",re[matvar->dims[0]*j+i],
                                               im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%f ", ((double*)matvar->data)[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    double *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%f + %fi ",re[matvar->dims[0]*j+i],
                                               im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%f ", ((double*)matvar->data)[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            case MAT_C_SINGLE:
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    float *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%f + %fi",
                                re[matvar->dims[0]*j+i],
                                im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%f ", ((float*)matvar->data)[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    float *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%f + %fi ",re[matvar->dims[0]*j+i],
                                               im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%f ", ((float*)matvar->data)[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            case MAT_C_INT32:
            {
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int32_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%d + %di ",re[matvar->dims[0]*j+i],
                                               im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    mat_int32_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%d ",data[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int32_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%d + %di ",re[matvar->dims[0]*j+i],
                                               im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    mat_int32_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%d ", data[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            }
            case MAT_C_INT16:
            {
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int16_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hd + %hdi ",re[matvar->dims[0]*j+i],
                                   im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    mat_int16_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hd ",data[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int16_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hd + %hdi ",re[matvar->dims[0]*j+i],
                                im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    mat_int16_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hd ", data[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            }
            case MAT_C_UINT16:
            {
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_uint16_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hu + %hui ",re[matvar->dims[0]*j+i],
                                                 im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    mat_int16_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hu ",data[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_uint16_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hu + %hui ",re[matvar->dims[0]*j+i],
                                                 im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    mat_int16_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hu ", data[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            }
            case MAT_C_UINT8:
            {
                if ( !printdata )
                    break;
                if ( matvar->rank > 2 ) {
                    printf("I can't print more than 2 dimensions\n");
                } else if ( matvar->rank == 1 && matvar->dims[0] > 15 ) {
                    printf("I won't print more than 15 elements in a vector\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) && 
                           matvar->isComplex ) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int8_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hu + %hui ",re[matvar->dims[0]*j+i],
                                                 im[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if (matvar->rank == 2 &&
                           (matvar->dims[0] > 15 || matvar->dims[1] > 15) ) {
                    mat_int8_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0] && i < 15; i++ ) {
                        for ( j = 0; j < matvar->dims[1] && j < 15; j++ )
                            printf("%hu ",(mat_uint16_t)data[matvar->dims[0]*j+i]);
                        if ( j < matvar->dims[1] )
                            printf("...");
                        printf("\n");
                    }
                    if ( i < matvar->dims[0] )
                        printf(".\n.\n.\n");
                } else if ( matvar->rank == 2 && matvar->isComplex) {
                    int N;
                    struct ComplexSplit *cdata = matvar->data;
                    mat_int8_t *re = cdata->Re,*im = cdata->Im;
                    N = matvar->dims[0]*matvar->dims[1];
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hu + %hui ",re[matvar->dims[0]*j+i],
                                                 im[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                } else if ( matvar->rank == 2 ) {
                    mat_int8_t *data = matvar->data;
                    for ( i = 0; i < matvar->dims[0]; i++ ) {
                        for ( j = 0; j < matvar->dims[1]; j++ )
                            printf("%hu ",(mat_uint16_t)data[matvar->dims[0]*j+i]);
                        printf("\n");
                    }
                }
                break;
            }
			default:
				break;
        }
    }
    return;
}