CPLErr HDF5Dataset::HDF5ListGroupObjects( HDF5GroupObjects *poRootGroup, int bSUBDATASET ) { int i; char szTemp[8192]; char szDim[8192]; HDF5Dataset *poDS; poDS=this; if( poRootGroup->nbObjs >0 ) for( i=0; i < poRootGroup->nbObjs; i++ ) { poDS->HDF5ListGroupObjects( poRootGroup->poHchild+i, bSUBDATASET ); } if( poRootGroup->nType == H5G_GROUP ) { CreateMetadata( poRootGroup, H5G_GROUP ); } /* -------------------------------------------------------------------- */ /* Create Sub dataset list */ /* -------------------------------------------------------------------- */ if( (poRootGroup->nType == H5G_DATASET ) && bSUBDATASET && poDS->GetDataType( poRootGroup->native ) == GDT_Unknown ) { CPLDebug( "HDF5", "Skipping unsupported %s of type %s", poRootGroup->pszUnderscorePath, poDS->GetDataTypeName( poRootGroup->native ) ); } else if( (poRootGroup->nType == H5G_DATASET ) && bSUBDATASET ) { szDim[0]='\0'; switch( poRootGroup->nRank ) { case 3: sprintf( szTemp,"%dx%dx%d", (int)poRootGroup->paDims[0], (int)poRootGroup->paDims[1], (int)poRootGroup->paDims[2] ); break; case 2: sprintf( szTemp,"%dx%d", (int)poRootGroup->paDims[0], (int)poRootGroup->paDims[1] ); break; default: return CE_None; } strcat( szDim,szTemp ); sprintf( szTemp, "SUBDATASET_%d_NAME", ++(poDS->nSubDataCount) ); poDS->papszSubDatasets = CSLSetNameValue( poDS->papszSubDatasets, szTemp, CPLSPrintf( "HDF5:\"%s\":%s", poDS->GetDescription(), poRootGroup->pszUnderscorePath ) ); sprintf( szTemp, "SUBDATASET_%d_DESC", poDS->nSubDataCount ); poDS->papszSubDatasets = CSLSetNameValue( poDS->papszSubDatasets, szTemp, CPLSPrintf( "[%s] %s (%s)", szDim, poRootGroup->pszUnderscorePath, poDS->GetDataTypeName ( poRootGroup->native ) ) ); } return CE_None; }
CPLErr HDF5Dataset::HDF5ListGroupObjects( HDF5GroupObjects *poRootGroup, int bSUBDATASET ) { HDF5Dataset *poDS = this; if( poRootGroup->nbObjs > 0 ) for( hsize_t i = 0; i < poRootGroup->nbObjs; i++ ) { poDS->HDF5ListGroupObjects(poRootGroup->poHchild + i, bSUBDATASET); } if( poRootGroup->nType == H5G_GROUP ) { CreateMetadata(poRootGroup, H5G_GROUP); } // Create Sub dataset list. if( poRootGroup->nType == H5G_DATASET && bSUBDATASET && poDS->GetDataType(poRootGroup->native) == GDT_Unknown ) { CPLDebug("HDF5", "Skipping unsupported %s of type %s", poRootGroup->pszUnderscorePath, poDS->GetDataTypeName(poRootGroup->native)); } else if( poRootGroup->nType == H5G_DATASET && bSUBDATASET ) { CreateMetadata(poRootGroup, H5G_DATASET); char szTemp[8192]; // TODO(schwehr): Get this off of the stack. switch( poRootGroup->nRank ) { case 2: snprintf(szTemp, sizeof(szTemp), "%dx%d", static_cast<int>(poRootGroup->paDims[0]), static_cast<int>(poRootGroup->paDims[1])); break; case 3: snprintf(szTemp, sizeof(szTemp), "%dx%dx%d", static_cast<int>(poRootGroup->paDims[0]), static_cast<int>(poRootGroup->paDims[1]), static_cast<int>(poRootGroup->paDims[2])); break; default: return CE_None; } const std::string osDim = szTemp; snprintf(szTemp, sizeof(szTemp), "SUBDATASET_%d_NAME", ++(poDS->nSubDataCount)); poDS->papszSubDatasets = CSLSetNameValue(poDS->papszSubDatasets, szTemp, CPLSPrintf("HDF5:\"%s\":%s", poDS->GetDescription(), poRootGroup->pszUnderscorePath)); snprintf(szTemp, sizeof(szTemp), "SUBDATASET_%d_DESC", poDS->nSubDataCount); poDS->papszSubDatasets = CSLSetNameValue( poDS->papszSubDatasets, szTemp, CPLSPrintf("[%s] %s (%s)", osDim.c_str(), poRootGroup->pszUnderscorePath, poDS->GetDataTypeName(poRootGroup->native))); } return CE_None; }