From: eap Date: Thu, 30 Nov 2017 16:57:54 +0000 (+0300) Subject: 23514: EDF 16031 - SMESH freezes X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=5878e4448a587bf3f73289323ce72d3e7bd4c5d5;p=modules%2Fyacs.git 23514: EDF 16031 - SMESH freezes Optimize loading a study with multiple mesh groups --- diff --git a/src/HDFPersist/HDFgroup.cc b/src/HDFPersist/HDFgroup.cc index 288763975..c609828f7 100644 --- a/src/HDFPersist/HDFgroup.cc +++ b/src/HDFPersist/HDFgroup.cc @@ -31,9 +31,9 @@ herr_t group_attr(hid_t loc_id, const char *attr_name, void *operator_data) { - *(char**)operator_data = new char[strlen(attr_name)+1]; - strcpy(*(char**)operator_data, attr_name); - return 1; + *(char**)operator_data = new char[strlen(attr_name)+1]; + strcpy(*(char**)operator_data, attr_name); + return 1; } HDFgroup::HDFgroup(const char *name, HDFcontainerObject *father) @@ -104,17 +104,31 @@ int HDFgroup::ExistInternalObject(const char *object_name) n = this->nInternalObjects(); for (i=0;iInternalObjectIndentify(i,name); + if (!strcmp(name,object_name)) { - this->InternalObjectIndentify(i,name); - if (!strcmp(name,object_name)) - { - ret = 1; - break; - } - } + ret = 1; + break; + } + } return ret; } +void HDFgroup::GetAllObjects(std::vector< std::string > & object_names ) +{ + int n,i; + char name[HDF_NAME_MAX_LEN+1]; + + n = this->nInternalObjects(); + object_names.reserve( object_names.size() + n ); + for (i=0;iInternalObjectIndentify(i,name); + object_names.push_back( name ); + } +} + hdf_object_type HDFgroup::InternalObjectType(char *object_name) { hdf_object_type type; @@ -145,10 +159,10 @@ void HDFgroup::FileUnMount() hdf_err ret; if ((ret = HDFfileUmount(_fid,_name)) < 0) - throw HDFexception("Can't unmount the file"); + throw HDFexception("Can't unmount the file"); if ((ret = HDFfileClose(_mid)) < 0) - throw HDFexception("Can't unmount the file"); + throw HDFexception("Can't unmount the file"); _mid = -1; } diff --git a/src/HDFPersist/HDFgroup.hxx b/src/HDFPersist/HDFgroup.hxx index 6f6a42a01..18cbb437b 100644 --- a/src/HDFPersist/HDFgroup.hxx +++ b/src/HDFPersist/HDFgroup.hxx @@ -31,14 +31,17 @@ #include "HDFcontainerObject.hxx" #include "HDFexport.hxx" +#include +#include + class HDFPERSIST_EXPORT HDFgroup : public HDFcontainerObject { -private : + private : HDFcontainerObject *_father; hdf_idt _fid; hdf_idt _mid; char* _attribute; -public : + public : HDFgroup(const char *name, HDFcontainerObject *father); void CreateOnDisk(); @@ -49,12 +52,13 @@ public : void FileUnMount(); HDFcontainerObject *GetFather(); - hdf_object_type GetObjectType(); + hdf_object_type GetObjectType(); - int nInternalObjects(); + int nInternalObjects(); void InternalObjectIndentify(int rank, char *object_name); - int ExistInternalObject(const char *object_name); + int ExistInternalObject(const char *object_name); hdf_object_type InternalObjectType(char *object_name); + void GetAllObjects( std::vector< std::string > & object_names ); int nAttributes(); char* GetAttributeName(unsigned idx);