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"); } } }
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"); } }
/** @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; }