Пример #1
0
        public static Hdf5Dataset CreateDatasetAddToDatasets(
            ReadonlyNamedItemList <Hdf5Dataset> _datasets,
            Hdf5Identifier _fileId,
            Hdf5Path _parentPath,
            string _name,
            Hdf5DataTypes _datatype,
            int _numberOfDimensions,
            List <Hdf5DimensionProperty> _properties,
            Hdf5CompressionProperty _compressionProperty = null)
        {
            Hdf5Dataset dataset = CreateDataset(
                _fileId,
                _parentPath,
                _name,
                _datatype,
                _numberOfDimensions,
                _properties,
                _compressionProperty);

            if (dataset != null)
            {
                _datasets.Add(dataset);
            }

            return(dataset);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static Hdf5Dataspace GetDataspace(Hdf5Identifier _datasetId)
        {
            var dataspaceId = H5D.get_space(_datasetId.Value).ToId();

            int rank = H5S.get_simple_extent_ndims(dataspaceId.Value);

            ulong[] dims    = new ulong[rank];
            ulong[] maxDims = new ulong[rank];
            H5S.get_simple_extent_dims(dataspaceId.Value, dims, maxDims);

            Hdf5Dataspace dataspace = new Hdf5Dataspace
            {
                Id = dataspaceId,
                NumberOfDimensions = rank
            };

            for (int i = 0; i < dims.Length; i++)
            {
                Hdf5DimensionProperty property = new Hdf5DimensionProperty
                {
                    CurrentSize = dims[i],
                    //MaximumSize = maxDims[i]
                };
                dataspace.DimensionProperties.Add(property);
            }

            H5S.close(dataspaceId.Value);

            return(dataspace);
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_objectId"></param>
        /// <param name="_attribute"></param>
        public static void UpdateAttribute(Hdf5Identifier _objectId, Hdf5Attribute _attribute)
        {
            Hdf5Identifier attributeId = H5A.open(_objectId.Value, _attribute.Name).ToId();

            if (attributeId.Value > 0)
            {
                Hdf5DataType  type     = TypeHelper.GetDataTypeFromAttribute(attributeId);
                Hdf5DataTypes enumType = TypeHelper.GetDataTypesEnum(_attribute.Value.GetType());

                if (type.Type == enumType)
                {
                    if (enumType == Hdf5DataTypes.String)
                    {
                        H5A.close(attributeId.Value);
                        DeleteAttribute(_objectId, _attribute.Name);
                        Hdf5Attribute attribute = CreateAttribute(_objectId, _attribute.Name, _attribute.Value);

                        if (attribute != null)
                        {
                            _attribute.Id    = attribute.Id;
                            _attribute.Name  = attribute.Name;
                            _attribute.Value = attribute.Value;
                        }
                    }
                    else
                    {
                        WriteObjectValue(type, attributeId, _attribute.Value);
                    }
                }
                else
                {
                    throw new Hdf5TypeMismatchException();
                }
            }
        }
Пример #4
0
        public static object GetObject(Hdf5Identifier _fileId, AbstractHdf5Object _parent, string _objectName)
        {
            Hdf5Path combinedPath = _parent.Path.Append(_objectName);
            object   output       = null;

            if (combinedPath != null)
            {
                string fullPath = combinedPath.FullPath;

                H5O.info_t gInfo = new H5O.info_t();
                H5O.get_info_by_name(_fileId.Value, fullPath, ref gInfo);

                var id = H5O.open(_fileId.Value, fullPath).ToId();
                if (id.Value > 0)
                {
                    if (gInfo.type == H5O.type_t.DATASET)
                    {
                        output = DatasetHelper.LoadDataset(_fileId, id, fullPath);
                    }

                    if (gInfo.type == H5O.type_t.GROUP)
                    {
                        Hdf5Group group = new Hdf5Group(_fileId, id, fullPath);
                        group.FileId = _fileId;
                        group.LoadChildObjects();
                        output = group;
                    }

                    H5O.close(id.Value);
                }
            }

            return(output);
        }
Пример #5
0
        public static Hdf5Identifier ToId(this Int32 value)
#endif
        {
            var id = new Hdf5Identifier(value);

            return(id);
        }
Пример #6
0
        public static Hdf5Identifier ToId(this long _value)
#endif
        {
            var id = new Hdf5Identifier(_value);

            return(id);
        }
Пример #7
0
        public static Hdf5Dataset CreateDataset(
            Hdf5Identifier _fileId,
            Hdf5Path _parentPath,
            string _name,
            Hdf5DataTypes _datatype,
            int _numberOfDimensions,
            List <Hdf5DimensionProperty> _properties)
        {
            Hdf5Path path = _parentPath.Append(_name);

            UInt64[] dimensionSize = new UInt64[_numberOfDimensions];
            UInt64[] maxSize       = null; // new UInt64[_numberOfDimensions];

            int i = 0;

            foreach (var property in _properties)
            {
                dimensionSize[i] = property.CurrentSize;

                //if (property.MaximumSize == UInt64.MaxValue)
                //{
                //    maxSize[i] = H5S.UNLIMITED;
                //}
                //else
                //{
                //    maxSize[i] = property.MaximumSize;
                //}

                i++;
            }

            Hdf5Identifier dataspaceId = H5S.create_simple(_numberOfDimensions, dimensionSize, maxSize).ToId();

            //TODO handle string datasets
            Hdf5Identifier typeId = H5T.copy(TypeHelper.GetNativeType(_datatype).Value).ToId();
            var            status = H5T.set_order(typeId.Value, H5T.order_t.LE);

            Hdf5Identifier datasetId = H5D.create(_fileId.Value, path.FullPath, typeId.Value, dataspaceId.Value).ToId();

            Hdf5Dataset dataset = null;

            if (datasetId.Value > 0)
            {
                dataset = new Hdf5Dataset(_fileId, datasetId, path.FullPath)
                {
                    DataType  = TypeHelper.GetDataTypeFromDataset(datasetId),
                    Dataspace = DataspaceHelper.GetDataspace(datasetId)
                };

                H5D.close(datasetId.Value);
            }

            H5T.close(typeId.Value);

            FileHelper.FlushToFile(_fileId);

            return(dataset);
        }
Пример #8
0
        /// <summary>
        /// Routes to generic read method based on correct data type
        /// </summary>
        /// <param name="_dataType"></param>
        /// <param name="_attributeId"></param>
        /// <returns></returns>
        public static Object ReadValue(
            Hdf5DataType _dataType,
            Hdf5Identifier _attributeId)
        {
            if (_dataType.Type == Hdf5DataTypes.Int8)
            {
                return(ReadValue <sbyte>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.Int16)
            {
                return(ReadValue <Int16>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.Int32)
            {
                return(ReadValue <Int32>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.Int64)
            {
                return(ReadValue <Int64>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.UInt8)
            {
                return(ReadValue <byte>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.UInt16)
            {
                return(ReadValue <UInt16>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.UInt32)
            {
                return(ReadValue <UInt32>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.UInt64)
            {
                return(ReadValue <UInt64>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.Single)
            {
                return(ReadValue <Single>(_dataType, _attributeId));
            }

            if (_dataType.Type == Hdf5DataTypes.Double)
            {
                return(ReadValue <Double>(_dataType, _attributeId));
            }

            throw new Hdf5UnknownDataType();
        }
Пример #9
0
        public static void PopulateChildrenObjects <T>(Hdf5Identifier _fileId, T _parentObject)  where T : AbstractHdf5Object
        {
            ulong pos = 0;

            List <string> groupNames = new List <string>();

            var id = H5G.open(_fileId.Value, _parentObject.Path.FullPath).ToId();

            if (id.Value > 0)
            {
                ArrayList al      = new ArrayList();
                GCHandle  hnd     = GCHandle.Alloc(al);
                IntPtr    op_data = (IntPtr)hnd;

                H5L.iterate(_parentObject.Id.Value, H5.index_t.NAME, H5.iter_order_t.NATIVE, ref pos,
                            delegate(int _objectId, IntPtr _namePtr, ref H5L.info_t _info, IntPtr _data)
                {
                    string objectName = Marshal.PtrToStringAnsi(_namePtr);

                    groupNames.Add(objectName);

                    return(0);
                }, op_data);

                hnd.Free();

                H5G.close(id.Value);

                foreach (var groupName in groupNames)
                {
                    Object hdf5Obj = GetObject(_fileId, _parentObject, groupName);

                    if (hdf5Obj != null)
                    {
                        if (hdf5Obj is Hdf5Dataset)
                        {
                            var parent = _parentObject as IHasDatasets;

                            if (parent != null)
                            {
                                parent.Datasets.Add(hdf5Obj as Hdf5Dataset);
                            }
                        }
                        else if (hdf5Obj is Hdf5Group)
                        {
                            var parent = _parentObject as IHasGroups;

                            if (parent != null)
                            {
                                parent.Groups.Add(hdf5Obj as Hdf5Group);
                            }
                        }
                    }
                }
            }
        }
Пример #10
0
        public static Hdf5DataType GetDataTypeFromAttribute(Hdf5Identifier _objectId)
        {
            var typeId = H5A.get_type(_objectId.Value).ToId();

            if (typeId.Value > 0)
            {
                return(GetDataTypeByType(typeId));
            }

            return(null);
        }
Пример #11
0
        private static Array SingleDimension(Hdf5Identifier _datasetIdentifer, Hdf5Dataset _dataset)
        {
            if (_dataset.DataType.Type == Hdf5DataTypes.Int8)
            {
                return(Read1DArray <sbyte>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.Int16)
            {
                return(Read1DArray <Int16>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.Int32)
            {
                return(Read1DArray <Int32>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.Int64)
            {
                return(Read1DArray <Int64>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.UInt8)
            {
                return(Read1DArray <byte>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.UInt16)
            {
                return(Read1DArray <UInt16>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.UInt32)
            {
                return(Read1DArray <UInt32>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.UInt64)
            {
                return(Read1DArray <UInt64>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.Single)
            {
                return(Read1DArray <Single>(_datasetIdentifer, _dataset));
            }

            if (_dataset.DataType.Type == Hdf5DataTypes.Double)
            {
                return(Read1DArray <Double>(_datasetIdentifer, _dataset));
            }

            return(null);
        }
Пример #12
0
        internal Hdf5Dataset(Hdf5Identifier _fileId, Hdf5Identifier _id, string _path)
        {
            FileId = _fileId;
            Id     = _id;

            Path = new Hdf5Path(_path);
            Name = Path.Name;

            m_Attributes = new Hdf5Attributes(this);
            AttributeHelper.LoadAttributes(m_Attributes);
        }
Пример #13
0
        /// <summary>
        /// Assumes that dataset already open
        /// </summary>
        /// <param name="_fileId"></param>
        /// <param name="_datasetId"></param>
        /// <param name="_fullPath"></param>
        /// <returns></returns>
        public static Hdf5Dataset LoadDataset(Hdf5Identifier _fileId, Hdf5Identifier _datasetId, string _fullPath)
        {
            Hdf5DataType  datatype  = TypeHelper.GetDataTypeFromDataset(_datasetId);
            Hdf5Dataspace dataspace = DataspaceHelper.GetDataspace(_datasetId);

            Hdf5Dataset dataset = new Hdf5Dataset(_fileId, _datasetId, _fullPath)
            {
                Dataspace = dataspace,
                DataType  = datatype
            };

            return(dataset);
        }
Пример #14
0
        /// <summary>
        /// Reads a non-string attribute
        /// Assumes the parent object is already open
        /// </summary>
        /// <param name="_attributeId"></param>
        /// <param name="_title"></param>
        /// <param name="_type"></param>
        /// <returns></returns>
        public static Hdf5Attribute GetAttribute(Hdf5Identifier _attributeId, string _title, Hdf5DataType _type)
        {
            Object value = ReadValue(_type, _attributeId);

            var attribute = new Hdf5Attribute
            {
                Id    = _attributeId,
                Name  = _title,
                Value = value
            };

            return(attribute);
        }
Пример #15
0
        public static Hdf5Group CreateGroupAddToList(
            ReadonlyNamedItemList <Hdf5Group> _groups,
            Hdf5Identifier _fileId,
            Hdf5Path _parentPath,
            string _name)
        {
            Hdf5Group group = CreateGroup(_fileId, _parentPath, _name);

            if (group != null)
            {
                _groups.Add(group);
            }
            return(group);
        }
Пример #16
0
        public static Hdf5Group CreateGroup(Hdf5Identifier _fileId, Hdf5Path _parentPath, string _name)
        {
            Hdf5Path path = _parentPath.Append(_name);
            var      id   = H5G.create(_fileId.Value, path.FullPath);

            if (id > 0)
            {
                Hdf5Group group = new Hdf5Group(_fileId, id.ToId(), path.FullPath);
                H5G.close(id);
                FileHelper.FlushToFile(_fileId);
                return(group);
            }
            return(null);
        }
Пример #17
0
        /// <summary>
        /// Creates the attribute then adds to the supplied attribute list.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="_objectId"></param>
        /// <param name="_attributes"></param>
        /// <param name="_title"></param>
        /// <param name="_value"></param>
        /// <returns></returns>
        public static Hdf5Attribute CreateAttributeAddToList <T>(
            Hdf5Identifier _objectId,
            ReadonlyNamedItemList <Hdf5Attribute> _attributes,
            string _title,
            T _value)
        {
            Hdf5Attribute attribute = CreateAttribute(_objectId, _title, _value);

            if (attribute != null)
            {
                _attributes.Add(attribute);
            }

            return(attribute);
        }
Пример #18
0
        public static Hdf5File Create(string _filename)
        {
            if (File.Exists(_filename))
            {
                throw new Hdf5FileExistsException();
            }

            Hdf5Identifier fileId = H5F.create(_filename, H5F.ACC_EXCL).ToId();

            if (fileId.Value > 0)
            {
                H5F.close(fileId.Value);
                return(new Hdf5File(_filename));
            }

            throw new Hdf5UnknownException();
        }
Пример #19
0
        internal Hdf5Group(
            Hdf5Identifier _fileId,
            Hdf5Identifier _groupId,
            string _path)
        {
            FileId = _fileId;
            Id     = _groupId;

            Path = new Hdf5Path(_path);
            Name = Path.Name;

            Groups   = new Hdf5Groups(this);
            Datasets = new Hdf5Datasets(this);

            Attributes = new Hdf5Attributes(this);
            AttributeHelper.LoadAttributes(Attributes);
        }
Пример #20
0
        /// <summary>
        /// Reads from the hdf file
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="_dataType"></param>
        /// <param name="_attributeId"></param>
        /// <returns></returns>
        private static T ReadValue <T>(
            Hdf5DataType _dataType,
            Hdf5Identifier _attributeId)
        {
            T[] value = new T[1];

            GCHandle arrayHandle = GCHandle.Alloc(value, GCHandleType.Pinned);

            var dataType = H5T.copy(_dataType.NativeType.Value).ToId();

            int result = H5A.read(_attributeId.Value, dataType.Value, arrayHandle.AddrOfPinnedObject());

            arrayHandle.Free();

            H5T.close(dataType.Value);

            return(value[0]);
        }
Пример #21
0
        /// <summary>
        /// Writes the specified value to the file
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="_dataType"></param>
        /// <param name="_attributeId"></param>
        /// <param name="_value"></param>
        private static void WriteValue <T>(
            Hdf5DataType _dataType,
            Hdf5Identifier _attributeId,
            T _value)
        {
            T[] value = new T[1];
            value[0] = _value;

            GCHandle arrayHandle = GCHandle.Alloc(value, GCHandleType.Pinned);

            var dataType = H5T.copy(_dataType.NativeType.Value).ToId();

            int result = H5A.write(_attributeId.Value, dataType.Value, arrayHandle.AddrOfPinnedObject());

            arrayHandle.Free();

            H5T.close(dataType.Value);
        }
Пример #22
0
        /// <summary>
        /// Reads a string scalar attribute value.
        /// Assumes that the parent object is already open.
        /// </summary>
        /// <param name="_objectId"></param>
        /// <param name="_title"></param>
        /// <returns></returns>
        public static Hdf5Attribute GetStringAttribute(Hdf5Identifier _objectId, string _title)
        {
            int attributeId = 0;
            int typeId      = 0;

            attributeId = H5A.open(_objectId.Value, _title);
            typeId      = H5A.get_type(attributeId);
            var sizeData = H5T.get_size(typeId);
            var size     = sizeData.ToInt32();

            byte[] strBuffer = new byte[size];

            var      aTypeMem    = H5T.get_native_type(typeId, H5T.direction_t.ASCEND);
            GCHandle pinnedArray = GCHandle.Alloc(strBuffer, GCHandleType.Pinned);

            H5A.read(attributeId, aTypeMem, pinnedArray.AddrOfPinnedObject());
            pinnedArray.Free();
            H5T.close(aTypeMem);

            string value = System.Text.Encoding.ASCII.GetString(strBuffer, 0, strBuffer.Length - 1);

            var attribute = new Hdf5Attribute
            {
                Id    = attributeId.ToId(),
                Name  = _title,
                Value = value
            };

            if (attributeId > 0)
            {
                H5A.close(attributeId);
            }

            if (typeId > 0)
            {
                H5T.close(typeId);
            }

            return(attribute);
        }
Пример #23
0
        /// <summary>
        /// Assumes dataset is already open
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="_datasetIdentifer"></param>
        /// <param name="_dataset"></param>
        /// <returns></returns>
        public static T[] Read1DArray <T>(Hdf5Identifier _datasetIdentifer, Hdf5Dataset _dataset)
        {
            T[] dataArray = new T[_dataset.Dataspace.DimensionProperties[0].CurrentSize];

            GCHandle arrayHandle = GCHandle.Alloc(dataArray, GCHandleType.Pinned);

            var dataType = H5T.copy(_dataset.DataType.NativeType.Value).ToId();

            int result = H5D.read(
                _datasetIdentifer.Value,
                dataType.Value,
                H5S.ALL,
                H5S.ALL,
                H5P.DEFAULT,
                arrayHandle.AddrOfPinnedObject());

            arrayHandle.Free();

            H5T.close(dataType.Value);

            return(dataArray);
        }
Пример #24
0
        public static Hdf5Dataset CreateDataset(
            Hdf5Identifier _fileId,
            Hdf5Path _parentPath,
            string _name,
            Hdf5DataTypes _datatype,
            int _numberOfDimensions,
            List <Hdf5DimensionProperty> _properties,
            Hdf5CompressionProperty _compressionProperty = null)
        {
            Hdf5Path path = _parentPath.Append(_name);

            UInt64[] dimensionSize = new UInt64[_numberOfDimensions];
            UInt64[] maxSize       = null; // new UInt64[_numberOfDimensions];

            if (_numberOfDimensions != _properties.Count ||
                (_compressionProperty != null && _numberOfDimensions != _compressionProperty.ChunkDimensions.Length))
            {
                throw new Hdf5ArrayDimensionsMismatchException();
            }

            int i = 0;

            foreach (var property in _properties)
            {
                dimensionSize[i] = property.CurrentSize;

                if (_compressionProperty != null && _compressionProperty.ChunkDimensions[i] > property.CurrentSize)
                {
                    throw new Hdf5ArraySizeMismatchException();
                }

                i++;
            }

            Hdf5Identifier dataspaceId = H5S.create_simple(_numberOfDimensions, dimensionSize, maxSize).ToId();

            //TODO handle string datasets
            Hdf5Identifier typeId = H5T.copy(TypeHelper.GetNativeType(_datatype).Value).ToId();
            var            status = H5T.set_order(typeId.Value, H5T.order_t.LE);

            var plist_id = _compressionProperty != null?H5P.create(H5P.DATASET_CREATE) : 0;

            if (plist_id != 0)
            {
                H5P.set_chunk(plist_id, _compressionProperty.ChunkDimensions.Length, _compressionProperty.ChunkDimensions);
                H5P.set_deflate(plist_id, _compressionProperty.CompressionLevel);
            }

            Hdf5Identifier datasetId = H5D.create(_fileId.Value, path.FullPath, typeId.Value, dataspaceId.Value, dcpl_id: plist_id).ToId();

            Hdf5Dataset dataset = null;

            if (datasetId.Value > 0)
            {
                dataset = new Hdf5Dataset(_fileId, datasetId, path.FullPath)
                {
                    DataType  = TypeHelper.GetDataTypeFromDataset(datasetId),
                    Dataspace = DataspaceHelper.GetDataspace(datasetId)
                };

                H5D.close(datasetId.Value);
            }

            H5T.close(typeId.Value);
            if (plist_id != 0)
            {
                H5P.close(plist_id);
            }

            FileHelper.FlushToFile(_fileId);

            return(dataset);
        }
Пример #25
0
        public static Hdf5DataType GetDataTypeByType(Hdf5Identifier _typeId)
        {
            var typeClass = H5T.get_class(_typeId.Value);
            var typeSize  = (int)H5T.get_size(_typeId.Value);
            var typeSign  = H5T.get_sign(_typeId.Value);
            var typeOrder = H5T.get_order(_typeId.Value);

            Hdf5DataType dt = new Hdf5DataType
            {
                Id   = _typeId,
                Size = typeSize,
            };

            if (typeOrder == H5T.order_t.BE)
            {
                dt.ByteOrder = Hdf5ByteOrder.BigEndian;
            }
            else if (typeOrder == H5T.order_t.LE)
            {
                dt.ByteOrder = Hdf5ByteOrder.LittleEndian;
            }
            else if (typeOrder == H5T.order_t.ONE)
            {
                dt.ByteOrder = Hdf5ByteOrder.None;
            }

            if (typeClass == H5T.class_t.INTEGER)
            {
                if (typeSign == H5T.sign_t.NONE)
                {
                    if (typeSize == 1)
                    {
                        dt.Type       = Hdf5DataTypes.UInt8;
                        dt.NativeType = H5T.NATIVE_UINT8.ToId();
                    }
                    else if (typeSize == 2)
                    {
                        dt.Type       = Hdf5DataTypes.UInt16;
                        dt.NativeType = H5T.NATIVE_UINT16.ToId();
                    }
                    else if (typeSize == 4)
                    {
                        dt.Type       = Hdf5DataTypes.UInt32;
                        dt.NativeType = H5T.NATIVE_UINT32.ToId();
                    }
                    else if (typeSize == 8)
                    {
                        dt.Type       = Hdf5DataTypes.UInt64;
                        dt.NativeType = H5T.NATIVE_UINT64.ToId();
                    }
                }
                else
                {
                    if (typeSize == 1)
                    {
                        dt.Type       = Hdf5DataTypes.Int8;
                        dt.NativeType = H5T.NATIVE_INT8.ToId();
                    }
                    else if (typeSize == 2)
                    {
                        dt.Type       = Hdf5DataTypes.Int16;
                        dt.NativeType = H5T.NATIVE_INT16.ToId();
                    }
                    else if (typeSize == 4)
                    {
                        dt.Type       = Hdf5DataTypes.Int32;
                        dt.NativeType = H5T.NATIVE_INT32.ToId();
                    }
                    else if (typeSize == 8)
                    {
                        dt.Type       = Hdf5DataTypes.Int64;
                        dt.NativeType = H5T.NATIVE_INT64.ToId();
                    }
                }
            }
            else if (typeClass == H5T.class_t.FLOAT)
            {
                if (typeSize == 4)
                {
                    dt.Type       = Hdf5DataTypes.Single;
                    dt.NativeType = H5T.NATIVE_FLOAT.ToId();
                }
                else if (typeSize == 8)
                {
                    dt.Type       = Hdf5DataTypes.Double;
                    dt.NativeType = H5T.NATIVE_DOUBLE.ToId();
                }
            }
            else if (typeClass == H5T.class_t.STRING)
            {
                dt.Type       = Hdf5DataTypes.String;
                dt.NativeType = H5T.C_S1.ToId();
            }

            return(dt);
        }
Пример #26
0
 public static void FlushToFile(Hdf5Identifier _fileId)
 {
     H5F.flush(_fileId.Value, H5F.scope_t.GLOBAL);
 }
Пример #27
0
 /// <summary>
 /// Deletes the attribute from the file.
 /// Assumes that parent object is already open
 /// </summary>
 /// <param name="_objectId"></param>
 /// <param name="_title"></param>
 public static void DeleteAttribute(Hdf5Identifier _objectId, string _title)
 {
     int result = H5A.delete(_objectId.Value, _title);
 }
Пример #28
0
        public static void WriteObjectValue(
            Hdf5DataType _dataType,
            Hdf5Identifier _attributeId,
            object _value)
        {
            if (_dataType.Type == Hdf5DataTypes.Int8)
            {
                WriteValue(_dataType, _attributeId, (sbyte)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.Int16)
            {
                WriteValue(_dataType, _attributeId, (Int16)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.Int32)
            {
                WriteValue(_dataType, _attributeId, (Int32)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.Int64)
            {
                WriteValue(_dataType, _attributeId, (Int64)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.UInt8)
            {
                WriteValue(_dataType, _attributeId, (byte)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.UInt16)
            {
                WriteValue(_dataType, _attributeId, (UInt16)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.UInt32)
            {
                WriteValue(_dataType, _attributeId, (UInt32)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.UInt64)
            {
                WriteValue(_dataType, _attributeId, (UInt64)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.Single)
            {
                WriteValue(_dataType, _attributeId, (Single)_value);
                return;
            }

            if (_dataType.Type == Hdf5DataTypes.Double)
            {
                WriteValue(_dataType, _attributeId, (Double)_value);
                return;
            }

            throw new Hdf5UnknownDataType();
        }
Пример #29
0
        /// <summary>
        /// Currently does not support arrays
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="_objectId"></param>
        /// <param name="_title"></param>
        /// <param name="_value"></param>
        /// <returns></returns>
        public static Hdf5Attribute CreateAttribute <T>(Hdf5Identifier _objectId, string _title, T _value)
        {
            ulong[] sizes = new ulong[1] {
                1
            };
            Hdf5Identifier dataspaceId;
            Hdf5Identifier attributeId;
            Hdf5Identifier typeId;
            Hdf5Attribute  attribute = null;

            Type type     = _value.GetType();
            var  datatype = TypeHelper.GetDataTypesEnum(type);

            if (datatype != Hdf5DataTypes.String)
            {
                var tempType = TypeHelper.GetNativeType(datatype);

                typeId = H5T.copy(tempType.Value).ToId();
                var dataTypeObject = TypeHelper.GetDataTypeByType(typeId);

                var status = H5T.set_order(typeId.Value, H5T.order_t.LE);

                dataspaceId = H5S.create_simple(1, sizes, null).ToId();

                attributeId = H5A.create(_objectId.Value, _title, typeId.Value, dataspaceId.Value).ToId();

                if (attributeId.Value > 0)
                {
                    WriteValue(dataTypeObject, attributeId, _value);
                }
            }
            else
            {
                string tempValue = Convert.ToString(_value);

                dataspaceId = H5S.create(H5S.class_t.SCALAR).ToId();
                typeId      = H5T.copy(H5T.C_S1).ToId();
                int length = tempValue.Length + 1;
                var result = H5T.set_size(typeId.Value, new IntPtr(length));

                attributeId = H5A.create(_objectId.Value, _title, typeId.Value, dataspaceId.Value).ToId();

                IntPtr valueArray = Marshal.StringToHGlobalAnsi(tempValue);

                result = H5A.write(attributeId.Value, typeId.Value, valueArray);

                Marshal.FreeHGlobal(valueArray);
            }

            H5S.close(dataspaceId.Value);
            H5T.close(typeId.Value);
            H5A.close(attributeId.Value);

            if (attributeId.Value > 0)
            {
                attribute = new Hdf5Attribute
                {
                    Value = _value,
                    Name  = _title,
                    Id    = attributeId
                };
            }

            return(attribute);
        }