Ejemplo n.º 1
0
        public static (long DatasetId, bool IsNew) OpenOrCreateDataset(long locationId, string datasetPath, long datasetTypeId, Func <long> createDatasetCallback)
        {
            Contract.Requires(createDatasetCallback != null);

            long datasetId            = -1;
            long datasetTypeId_actual = -1;

            bool isNew;

            try
            {
                if (IOHelper.CheckLinkExists(locationId, datasetPath))
                {
                    datasetId            = H5D.open(locationId, datasetPath);
                    datasetTypeId_actual = H5D.get_type(datasetId);

                    if (H5T.equal(datasetTypeId_actual, datasetTypeId) <= 0)
                    {
                        throw new Exception($"{ ErrorMessage.IOHelper_DataTypeMismatch } Dataset: '{ datasetPath }'.");
                    }

                    isNew = false;
                }
                else
                {
                    datasetId = createDatasetCallback.Invoke();

                    isNew = true;
                }

                if (H5I.is_valid(datasetId) <= 0)
                {
                    throw new Exception($"{ ErrorMessage.IOHelper_CouldNotOpenOrCreateDataset } Dataset: '{ datasetPath }'.");
                }
            }
            finally
            {
                if (H5I.is_valid(datasetTypeId_actual) > 0)
                {
                    H5T.close(datasetTypeId_actual);
                }
            }

            return(datasetId, isNew);
        }
Ejemplo n.º 2
0
        public static (long GroupId, bool IsNew) OpenOrCreateGroup(long locationId, string groupPath)
        {
            long groupId    = -1;
            long propertyId = -1;

            bool isNew;

            try
            {
                if (IOHelper.CheckLinkExists(locationId, groupPath))
                {
                    groupId = H5G.open(locationId, groupPath);
                    isNew   = false;
                }
                else
                {
                    propertyId = H5P.create(H5P.LINK_CREATE);
                    H5P.set_create_intermediate_group(propertyId, 1);
                    groupId = H5G.create(locationId, groupPath, propertyId);
                    isNew   = true;
                }

                if (H5I.is_valid(groupId) <= 0)
                {
                    throw new Exception($"{ ErrorMessage.IOHelper_CouldNotOpenOrCreateGroup } Group name: '{ groupPath }'.");
                }
            }
            finally
            {
                if (H5I.is_valid(propertyId) > 0)
                {
                    H5P.close(propertyId);
                }
            }

            return(groupId, isNew);
        }