public ExternalFileListMessage(H5BinaryReader reader, Superblock superblock) : base(reader) { _superblock = superblock; // version this.Version = reader.ReadByte(); // reserved reader.ReadBytes(3); #warning Its value must be at least as large as the value contained in the Used Slots field. // allocated slot count this.AllocatedSlotCount = reader.ReadUInt16(); // used slot count this.UsedSlotCount = reader.ReadUInt16(); // heap address this.HeapAddress = superblock.ReadOffset(reader); // slot definitions this.SlotDefinitions = new ExternalFileListSlot[this.UsedSlotCount]; for (int i = 0; i < this.UsedSlotCount; i++) { this.SlotDefinitions[i] = new ExternalFileListSlot(reader, superblock); } }
public GlobalHeapObject(H5BinaryReader reader, Superblock superblock) : base(reader) { // heap object index this.HeapObjectIndex = reader.ReadUInt16(); if (this.HeapObjectIndex == 0) { return; } // reference count this.ReferenceCount = reader.ReadUInt16(); // reserved reader.ReadBytes(4); // object size var objectSize = superblock.ReadLength(reader); // object data this.ObjectData = reader.ReadBytes((int)objectSize); var paddedSize = (int)(Math.Ceiling(objectSize / 8.0) * 8); var remainingSize = paddedSize - (int)objectSize; reader.ReadBytes(remainingSize); }
public FreeSpaceManagerHeader(H5BinaryReader reader, Superblock superblock) : base(reader) { // signature var signature = reader.ReadBytes(4); H5Utils.ValidateSignature(signature, FreeSpaceManagerHeader.Signature); // version this.Version = reader.ReadByte(); // client ID this.ClientId = (ClientId)reader.ReadByte(); // total space tracked this.TotalSpaceTracked = superblock.ReadLength(reader); // total sections count this.TotalSectionsCount = superblock.ReadLength(reader); // serialized sections count this.SerializedSectionsCount = superblock.ReadLength(reader); // un-serialized sections count this.UnSerializedSectionsCount = superblock.ReadLength(reader); // section classes count this.SectionClassesCount = reader.ReadUInt16(); // shrink percent this.ShrinkPercent = reader.ReadUInt16(); // expand percent this.ExpandPercent = reader.ReadUInt16(); // address space size this.AddressSpaceSize = reader.ReadUInt16(); // maximum section size this.MaximumSectionSize = superblock.ReadLength(reader); // serialized section list address this.SerializedSectionListAddress = superblock.ReadOffset(reader); // serialized section list used this.SerializedSectionListUsed = superblock.ReadLength(reader); // serialized section list allocated size this.SerializedSectionListAllocatedSize = superblock.ReadLength(reader); // checksum this.Checksum = reader.ReadUInt32(); }
public BTreeKValuesMessage(H5BinaryReader reader) : base(reader) { // version this.Version = reader.ReadByte(); // indexed stroage internal node k this.IndexedStorageInternalNodeK = reader.ReadUInt16(); // group internal node k this.GroupInternalNodeK = reader.ReadUInt16(); // group leaf node k this.GroupLeafNodeK = reader.ReadUInt16(); }
public AttributeInfoMessage(H5BinaryReader reader, Superblock superblock) : base(reader) { _superblock = superblock; // version this.Version = reader.ReadByte(); // flags this.Flags = (CreationOrderFlags)reader.ReadByte(); // maximum creation index if (this.Flags.HasFlag(CreationOrderFlags.TrackCreationOrder)) { this.MaximumCreationIndex = reader.ReadUInt16(); } // fractal heap address this.FractalHeapAddress = superblock.ReadOffset(reader); // b-tree 2 name index address this.BTree2NameIndexAddress = superblock.ReadOffset(reader); // b-tree 2 creation order index address if (this.Flags.HasFlag(CreationOrderFlags.IndexCreationOrder)) { this.BTree2CreationOrderIndexAddress = superblock.ReadOffset(reader); } }
public BTree1Node(H5BinaryReader reader, Superblock superblock, Func <T> decodeKey) { _reader = reader; _superblock = superblock; _decodeKey = decodeKey; var signature = reader.ReadBytes(4); H5Utils.ValidateSignature(signature, BTree1Node <T> .Signature); this.NodeType = (BTree1NodeType)reader.ReadByte(); this.NodeLevel = reader.ReadByte(); this.EntriesUsed = reader.ReadUInt16(); this.LeftSiblingAddress = superblock.ReadOffset(reader); this.RightSiblingAddress = superblock.ReadOffset(reader); this.Keys = new T[this.EntriesUsed + 1]; this.ChildAddresses = new ulong[this.EntriesUsed]; for (int i = 0; i < this.EntriesUsed; i++) { this.Keys[i] = decodeKey(); this.ChildAddresses[i] = superblock.ReadOffset(reader); } this.Keys[this.EntriesUsed] = decodeKey(); }
public GroupInfoMessage(H5BinaryReader reader) : base(reader) { // version this.Version = reader.ReadByte(); // flags this.Flags = (GroupInfoMessageFlags)reader.ReadByte(); // maximum compact value and minimum dense value if (this.Flags.HasFlag(GroupInfoMessageFlags.StoreLinkPhaseChangeValues)) { this.MaximumCompactValue = reader.ReadUInt16(); this.MinimumDenseValue = reader.ReadUInt16(); } // estimated entry count and estimated entry link name length if (this.Flags.HasFlag(GroupInfoMessageFlags.StoreNonDefaultEntryInformation)) { this.EstimatedEntryCount = reader.ReadUInt16(); this.EstimatedEntryLinkNameLength = reader.ReadUInt16(); } }
public FilterDescription(H5BinaryReader reader, byte version) : base(reader) { // filter identifier this.Identifier = (FilterIdentifier)reader.ReadInt16(); // name length this.NameLength = version switch { 1 => reader.ReadUInt16(), 2 when(ushort) this.Identifier >= 256 => reader.ReadUInt16(), 2 when(ushort) this.Identifier < 256 => 0, _ => throw new NotSupportedException($"Only version 1 or 2 instances of the {nameof(FilterDescription)} type are supported.") }; // flags this.Flags = (FilterFlags)reader.ReadUInt16(); // client data value count var clientDataValueCount = reader.ReadUInt16(); // name this.Name = this.NameLength > 0 ? H5Utils.ReadNullTerminatedString(reader, pad: true) : string.Empty; // client data this.ClientData = new uint[clientDataValueCount]; for (ushort i = 0; i < clientDataValueCount; i++) { this.ClientData[i] = reader.ReadUInt32(); } // padding if (version == 1 && clientDataValueCount % 2 != 0) { reader.ReadBytes(4); } }
public ExternalLinkInfo(H5BinaryReader reader) : base(reader) { // value length this.ValueLength = reader.ReadUInt16(); // version and flags var data = reader.ReadByte(); this.Version = (byte)((data & 0xF0) >> 4); // take only upper 4 bits this.Flags = (byte)((data & 0x0F) >> 0); // take only lower 4 bits // file name this.FilePath = H5Utils.ReadNullTerminatedString(reader, pad: false); // full object path this.FullObjectPath = H5Utils.ReadNullTerminatedString(reader, pad: false); }
public DriverInfoMessage(H5BinaryReader reader) : base(reader) { // version this.Version = reader.ReadByte(); // driver id this.DriverId = H5Utils.ReadFixedLengthString(reader, 8); // driver info size this.DriverInfoSize = reader.ReadUInt16(); // driver info this.DriverInfo = this.DriverId switch { "NCSAmulti" => new MultiDriverInfo(reader), "NCSAfami" => new FamilyDriverInfo(reader), _ => throw new NotSupportedException($"The driver ID '{this.DriverId}' is not supported.") }; }
public SymbolTableNode(H5BinaryReader reader, Superblock superblock) : base(reader) { // signature var signature = reader.ReadBytes(4); H5Utils.ValidateSignature(signature, SymbolTableNode.Signature); // version this.Version = reader.ReadByte(); // reserved reader.ReadByte(); // symbol count this.SymbolCount = reader.ReadUInt16(); // group entries this.GroupEntries = new List <SymbolTableEntry>(); for (int i = 0; i < this.SymbolCount; i++) { this.GroupEntries.Add(new SymbolTableEntry(reader, superblock)); } }
public FractalHeapHeader(H5BinaryReader reader, Superblock superblock) : base(reader) { _superblock = superblock; // signature var signature = reader.ReadBytes(4); H5Utils.ValidateSignature(signature, FractalHeapHeader.Signature); // version this.Version = reader.ReadByte(); // heap ID length this.HeapIdLength = reader.ReadUInt16(); // I/O filter encoder length this.IOFilterEncodedLength = reader.ReadUInt16(); // flags this.Flags = (FractalHeapHeaderFlags)reader.ReadByte(); /* next group */ // managed objects maximum size this.ManagedObjectsMaximumSize = reader.ReadUInt32(); // next huge object id this.NextHugeObjectId = superblock.ReadLength(reader); // huge objects BTree2 address this.HugeObjectsBTree2Address = superblock.ReadOffset(reader); // managed blocks free space amount this.ManagedBlocksFreeSpaceAmount = superblock.ReadLength(reader); // managed block free space manager address this.ManagedBlockFreeSpaceManagerAddress = superblock.ReadOffset(reader); // heap managed space amount this.HeapManagedSpaceAmount = superblock.ReadLength(reader); // heap allocated managed space amount this.HeapAllocatedManagedSpaceAmount = superblock.ReadLength(reader); // managed space direct block allocation iterator offset this.ManagedSpaceDirectBlockAllocationIteratorOffset = superblock.ReadLength(reader); // heap managed objects count this.HeapManagedObjectsCount = superblock.ReadLength(reader); // heap huge objects size this.HeapHugeObjectsSize = superblock.ReadLength(reader); // heap huge objects cound this.HeapHugeObjectsCount = superblock.ReadLength(reader); // heap tiny objects size this.HeapTinyObjectsSize = superblock.ReadLength(reader); // heap tiny objects count this.HeapTinyObjectsCount = superblock.ReadLength(reader); /* next group */ // table width this.TableWidth = reader.ReadUInt16(); // starting block size this.StartingBlockSize = superblock.ReadLength(reader); // maximum direct block size this.MaximumDirectBlockSize = superblock.ReadLength(reader); // maximum heap size this.MaximumHeapSize = reader.ReadUInt16(); // root indirect block rows starting number this.RootIndirectBlockRowsStartingNumber = reader.ReadUInt16(); // root block address this.RootBlockAddress = superblock.ReadOffset(reader); // root indirect block rows count this.RootIndirectBlockRowsCount = reader.ReadUInt16(); /* next group */ // filtered root direct block size, I/O filter mask and I/O filter info if (this.IOFilterEncodedLength > 0) { this.FilteredRootDirectBlockSize = superblock.ReadLength(reader); this.IOFilterMask = reader.ReadUInt32(); this.IOFilterInfo = new FilterPipelineMessage(reader); } // checksum this.Checksum = reader.ReadUInt32(); // cache some values this.CalculateBlockSizeTables(); this.CalculateHugeObjectsData(); }
public AttributeMessage(H5BinaryReader reader, Superblock superblock) : base(reader) { //var a = reader.ReadBytes(200); // version this.Version = reader.ReadByte(); if (this.Version == 1) { reader.ReadByte(); } else { this.Flags = (AttributeMessageFlags)reader.ReadByte(); } // name size var nameSize = reader.ReadUInt16(); // datatype size var datatypeSize = reader.ReadUInt16(); // dataspace size var dataspaceSize = reader.ReadUInt16(); // name character set encoding if (this.Version == 3) { _nameEncoding = (CharacterSetEncoding)reader.ReadByte(); } // name if (this.Version == 1) { this.Name = H5Utils.ReadNullTerminatedString(reader, pad: true, encoding: _nameEncoding); } else { this.Name = H5Utils.ReadNullTerminatedString(reader, pad: false, encoding: _nameEncoding); } // datatype this.Datatype = new DatatypeMessage(reader); if (this.Version == 1) { var paddedSize = (int)(Math.Ceiling(datatypeSize / 8.0) * 8); var remainingSize = paddedSize - datatypeSize; reader.ReadBytes(remainingSize); } // dataspace this.Dataspace = new DataspaceMessage(reader, superblock); if (this.Version == 1) { var paddedSize = (int)(Math.Ceiling(dataspaceSize / 8.0) * 8); var remainingSize = paddedSize - dataspaceSize; this.Reader.Seek(remainingSize, SeekOrigin.Current); } // data var byteSize = H5Utils.CalculateSize(this.Dataspace.DimensionSizes, this.Dataspace.Type) * this.Datatype.Size; this.Data = reader.ReadBytes((int)byteSize); }
public BTree2Header(H5BinaryReader reader, Superblock superblock, Func <T> decodeKey) : base(reader) { _superblock = superblock; _decodeKey = decodeKey; // signature var signature = reader.ReadBytes(4); H5Utils.ValidateSignature(signature, BTree2Header <T> .Signature); // version this.Version = reader.ReadByte(); // type this.Type = (BTree2Type)reader.ReadByte(); // node size this.NodeSize = reader.ReadUInt32(); // record size this.RecordSize = reader.ReadUInt16(); // depth this.Depth = reader.ReadUInt16(); // split percent this.SplitPercent = reader.ReadByte(); // merge percent this.MergePercent = reader.ReadByte(); // root node address this.RootNodePointer = new BTree2NodePointer() { Address = superblock.ReadOffset(reader), RecordCount = reader.ReadUInt16(), TotalRecordCount = superblock.ReadLength(reader) }; // checksum this.Checksum = reader.ReadUInt32(); // from H5B2hdr.c this.NodeInfos = new BTree2NodeInfo[this.Depth + 1]; /* Initialize leaf node info */ var fixedSizeOverhead = 4U + 1U + 1U + 4U; // signature, version, type, checksum var maxLeafRecordCount = (this.NodeSize - fixedSizeOverhead) / this.RecordSize; this.NodeInfos[0].MaxRecordCount = maxLeafRecordCount; this.NodeInfos[0].SplitRecordCount = (this.NodeInfos[0].MaxRecordCount * this.SplitPercent) / 100; this.NodeInfos[0].MergeRecordCount = (this.NodeInfos[0].MaxRecordCount * this.MergePercent) / 100; this.NodeInfos[0].CumulatedTotalRecordCount = this.NodeInfos[0].MaxRecordCount; this.NodeInfos[0].CumulatedTotalRecordCountSize = 0; /* Compute size to store # of records in each node */ /* (uses leaf # of records because its the largest) */ this.MaxRecordCountSize = (byte)H5Utils.FindMinByteCount(this.NodeInfos[0].MaxRecordCount);; /* Initialize internal node info */ if (this.Depth > 0) { for (int i = 1; i < this.Depth + 1; i++) { var pointerSize = (uint)(superblock.OffsetsSize + this.MaxRecordCountSize + this.NodeInfos[i - 1].CumulatedTotalRecordCountSize); var maxInternalRecordCount = (this.NodeSize - (fixedSizeOverhead + pointerSize)) / this.RecordSize + pointerSize; this.NodeInfos[i].MaxRecordCount = maxInternalRecordCount; this.NodeInfos[i].SplitRecordCount = (this.NodeInfos[i].MaxRecordCount * this.SplitPercent) / 100; this.NodeInfos[i].MergeRecordCount = (this.NodeInfos[i].MaxRecordCount * this.MergePercent) / 100; this.NodeInfos[i].CumulatedTotalRecordCount = (this.NodeInfos[i].MaxRecordCount + 1) * this.NodeInfos[i - 1].MaxRecordCount + this.NodeInfos[i].MaxRecordCount; this.NodeInfos[i].CumulatedTotalRecordCountSize = (byte)H5Utils.FindMinByteCount(this.NodeInfos[i].CumulatedTotalRecordCount); } } }