void HDF5Dataset::DestroyH5Objects( HDF5GroupObjects *poH5Object ) { // Visit all objects. for( unsigned i = 0; i < poH5Object->nbObjs; i++ ) DestroyH5Objects(poH5Object->poHchild + i); if( poH5Object->poHparent ==nullptr ) return; // Erase some data. CPLFree(poH5Object->paDims); poH5Object->paDims = nullptr; CPLFree(poH5Object->pszPath); poH5Object->pszPath = nullptr; CPLFree(poH5Object->pszName); poH5Object->pszName = nullptr; CPLFree(poH5Object->pszUnderscorePath); poH5Object->pszUnderscorePath = nullptr; if( poH5Object->native > 0 ) H5Tclose(poH5Object->native); poH5Object->native = 0; // All Children are visited and can be deleted. if( poH5Object->nbObjs != 0 ) { CPLFree(poH5Object->poHchild); poH5Object->poHchild = nullptr; } }
HDF5Dataset::~HDF5Dataset() { CSLDestroy( papszMetadata ); if( hHDF5 > 0 ) H5Fclose( hHDF5 ); if( hGroupID > 0 ) H5Gclose( hGroupID ); CSLDestroy( papszSubDatasets ); if( poH5RootGroup != NULL ){ DestroyH5Objects( poH5RootGroup ); CPLFree( poH5RootGroup->pszName ); CPLFree( poH5RootGroup->pszPath ); CPLFree( poH5RootGroup->pszUnderscorePath ); CPLFree( poH5RootGroup->poHchild ); CPLFree( poH5RootGroup ); } }
void HDF5Dataset::DestroyH5Objects( HDF5GroupObjects *poH5Object ) { unsigned i; /* -------------------------------------------------------------------- */ /* Visit all objects */ /* -------------------------------------------------------------------- */ for( i=0; i < poH5Object->nbObjs; i++ ) if( poH5Object->poHchild+i != NULL ) DestroyH5Objects( poH5Object->poHchild+i ); if( poH5Object->poHparent ==NULL ) return; /* -------------------------------------------------------------------- */ /* Erase some data */ /* -------------------------------------------------------------------- */ CPLFree( poH5Object->paDims ); poH5Object->paDims = NULL; CPLFree( poH5Object->pszPath ); poH5Object->pszPath = NULL; CPLFree( poH5Object->pszName ); poH5Object->pszName = NULL; CPLFree( poH5Object->pszUnderscorePath ); poH5Object->pszUnderscorePath = NULL; if( poH5Object->native > 0 ) H5Tclose( poH5Object->native ); poH5Object->native = 0; /* -------------------------------------------------------------------- */ /* All Children are visited and can be deleted. */ /* -------------------------------------------------------------------- */ if( ( i==poH5Object->nbObjs ) && ( poH5Object->nbObjs!=0 ) ) { CPLFree( poH5Object->poHchild ); poH5Object->poHchild = NULL; } }