2.2.1.5.3 8-bit Stream Object Header End
Inheritance: StreamObjectHeader
 /// <summary>
 /// Parse the IntermediateNodeObjectData structure.
 /// </summary>
 /// <param name="s">An stream containing IntermediateNodeObjectData structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.IntermediateNodeStart = new bit16StreamObjectHeaderStart();
     this.IntermediateNodeStart.Parse(s);
     this.SignatureHeader = new bit16StreamObjectHeaderStart();
     this.SignatureHeader.Parse(s);
     this.SignatureData = new BinaryItem();
     this.SignatureData.Parse(s);
     this.DataSizeHeader = new bit16StreamObjectHeaderStart();
     this.DataSizeHeader.Parse(s);
     this.DataSize = ReadUlong();
     this.IntermediateNodeEnd = new bit8StreamObjectHeaderEnd();
     this.IntermediateNodeEnd.Parse(s);
 }
        /// <summary>
        /// Parse the CellKnowLedge structure.
        /// </summary>
        /// <param name="s">An stream containing CellKnowLedge structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.CellKnowledgeStart = new bit16StreamObjectHeaderStart();
            this.CellKnowledgeStart.Parse(s);
            if (ContainsStreamObjectHeader(0x0F))
            {
                List<CellKnowledgeRange> tempCell = new List<CellKnowledgeRange>();
                do
                {
                    CellKnowledgeRange cellknowledge = new CellKnowledgeRange();
                    cellknowledge.Parse(s);
                    tempCell.Add(cellknowledge);
                } while (ContainsStreamObjectHeader(0x0F));
                this.CellKnowledgeData = tempCell.ToArray();
            }
            else if (ContainsStreamObjectHeader(0x17))
            {
                List<CellKnowledgeEntry> tempCell = new List<CellKnowledgeEntry>();
                do
                {
                    CellKnowledgeEntry cellknowledge = new CellKnowledgeEntry();
                    cellknowledge.Parse(s);
                    tempCell.Add(cellknowledge);
                } while (ContainsStreamObjectHeader(0x0F));
                this.CellKnowledgeData = tempCell.ToArray();
            }

            this.CellKnowledgeEnd = new bit8StreamObjectHeaderEnd();
            this.CellKnowledgeEnd.Parse(s);
        }
 /// <summary>
 /// Parse the WaterlineKnowledge structure.
 /// </summary>
 /// <param name="s">An stream containing WaterlineKnowledge structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.WaterlineKnowledgeStart = new bit16StreamObjectHeaderStart();
     this.WaterlineKnowledgeStart.Parse(s);
     List<WaterlineKnowledgeEntry> tempWaterline = new List<WaterlineKnowledgeEntry>();
     do
     {
         WaterlineKnowledgeEntry Waterlineknowledge = new WaterlineKnowledgeEntry();
         Waterlineknowledge.Parse(s);
         tempWaterline.Add(Waterlineknowledge);
     } while (ContainsStreamObjectHeader(0x04));
     this.WaterlineKnowledgeData = tempWaterline.ToArray();
     this.WaterlineKnowledgeEnd = new bit8StreamObjectHeaderEnd();
     this.WaterlineKnowledgeEnd.Parse(s);
 }
        /// <summary>
        /// Parse the StreamObjectHeader structure.
        /// </summary>
        /// <param name="s">An stream containing StreamObjectHeader structure.</param>
        public StreamObjectHeader TryParse(Stream s)
        {
            base.Parse(s);
            byte temp = ReadByte();
            s.Position -= 1;
            StreamObjectHeader streamObjectHeader = new StreamObjectHeader();
            if ((temp & 0x03) == 0x0)
            {
                streamObjectHeader = new bit16StreamObjectHeaderStart();
                streamObjectHeader.Parse(s);
            }
            else if ((temp & 0x03) == 0x02)
            {
                streamObjectHeader = new bit32StreamObjectHeaderStart();
                streamObjectHeader.Parse(s);
            }
            else if ((temp & 0x03) == 0x01)
            {
                streamObjectHeader = new bit8StreamObjectHeaderEnd();
                streamObjectHeader.Parse(s);
            }
            else if ((temp & 0x03) == 0x03)
            {
                streamObjectHeader = new bit16StreamObjectHeaderEnd();
                streamObjectHeader.Parse(s);
            }

            return streamObjectHeader;
        }
 /// <summary>
 /// Parse the StorageManifestDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing StorageManifestDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.StorageManifestSchemaGUID = new bit16StreamObjectHeaderStart();
     this.StorageManifestSchemaGUID.Parse(s);
     this.GUID = ReadGuid();
     List<StorageManifestRootDeclareValues> StorageManifestRootDeclareList = new List<StorageManifestRootDeclareValues>();
     while ((CurrentByte() & 0x03) == 0x0 && ((CurrentByte() >> 3) & 0x3F) == 0x07)
     {
         StorageManifestRootDeclareValues tempStorageManifestRootDeclare = new StorageManifestRootDeclareValues();
         tempStorageManifestRootDeclare.Parse(s);
         StorageManifestRootDeclareList.Add(tempStorageManifestRootDeclare);
     }
     this.StorageManifestRootDeclare = StorageManifestRootDeclareList.ToArray();
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
        /// <summary>
        /// Parse the StorageIndexDataElement structure.
        /// </summary>
        /// <param name="s">An stream containing StorageIndexDataElement structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);

            int StorageIndexType = (CurrentByte() >> 3) & 0x3F;
            List<object> DataList = new List<object>();
            while ((CurrentByte() & 0x03) == 0x0 && (StorageIndexType == 0x11 || StorageIndexType == 0x0E || StorageIndexType == 0x0D))
            {
                switch (StorageIndexType)
                {
                    case 0x11:
                        StorageIndexManifestMappingValues ManifestMappingValue = new StorageIndexManifestMappingValues();
                        ManifestMappingValue.Parse(s);
                        DataList.Add(ManifestMappingValue);
                        break;
                    case 0x0E:
                        StorageIndexCellMappingValues CellMappingValue = new StorageIndexCellMappingValues();
                        CellMappingValue.Parse(s);
                        DataList.Add(CellMappingValue);
                        break;
                    case 0x0D:
                        StorageIndexRevisionMappingValues RevisionMappingValue = new StorageIndexRevisionMappingValues();
                        RevisionMappingValue.Parse(s);
                        DataList.Add(RevisionMappingValue);
                        break;
                    default:
                        throw new Exception("The StorageIndexType is not right.");
                }
                StorageIndexType = (CurrentByte() >> 3) & 0x3F;
            }
            this.StorageIndexDataElementData = DataList.ToArray();
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
        /// <summary>
        /// Parse the RevisionManifestDataElement structure.
        /// </summary>
        /// <param name="s">An stream containing RevisionManifestDataElement structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);
            this.RevisionManifest = new bit16StreamObjectHeaderStart();
            this.RevisionManifest.Parse(s);
            this.RevisionID = new ExtendedGUID();
            this.RevisionID = this.RevisionID.TryParse(s);
            this.BaseRevisionID = new ExtendedGUID();
            this.BaseRevisionID = this.BaseRevisionID.TryParse(s);

            int RevisionType = (CurrentByte() >> 3) & 0x3F;
            List<object> DataList = new List<object>();
            while ((CurrentByte() & 0x03) == 0x0 && (RevisionType == 0x0A || RevisionType == 0x19))
            {
                switch (RevisionType)
                {
                    case 0x0A:
                        {
                            RevisionManifestRootDeclareValues RootDeclareValue = new RevisionManifestRootDeclareValues();
                            RootDeclareValue.Parse(s);
                            DataList.Add(RootDeclareValue);
                            break;
                        }
                    case 0x19:
                        {
                            RevisionManifestObjectGroupReferencesValues ObjectGroupReferencesValue = new RevisionManifestObjectGroupReferencesValues();
                            ObjectGroupReferencesValue.Parse(s);
                            DataList.Add(ObjectGroupReferencesValue);
                            break;
                        }
                    default:
                        throw new Exception("The RevisionType is not right.");
                }
                RevisionType = (CurrentByte() >> 3) & 0x3F;
            }

            this.RevisionManifestDataElementsData = DataList.ToArray();
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
        /// <summary>
        /// Parse the ObjectGroupDataElements structure.
        /// </summary>
        /// <param name="s">An stream containing ObjectGroupDataElements structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementStart = new bit16StreamObjectHeaderStart();
            this.DataElementStart.Parse(s);
            this.DataElementExtendedGUID = new ExtendedGUID();
            this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
            this.SerialNumber = new SerialNumber();
            this.SerialNumber = this.SerialNumber.TryParse(s);
            this.DataElementType = new CompactUnsigned64bitInteger();
            this.DataElementType = this.DataElementType.TryParse(s);

            if (ContainsStreamObjectHeader(0x06))
            {
                this.DataElementHash = new DataElementHash();
                this.DataElementHash.Parse(s);
            }
            this.ObjectGroupDeclarationsStart = new StreamObjectHeader();
            this.ObjectGroupDeclarationsStart = this.ObjectGroupDeclarationsStart.TryParse(s);

            List<object> DeclarationList = new List<object>();
            while (ContainsStreamObjectHeader(0x18) || ContainsStreamObjectHeader(0x05))
            {
                if (ContainsStreamObjectHeader(0x18))
                {
                    ObjectDeclaration Declaration = new ObjectDeclaration();
                    Declaration.Parse(s);
                    DeclarationList.Add(Declaration);
                }
                else if (ContainsStreamObjectHeader(0x05))
                {
                    ObjectDataBLOBDeclaration DeclarationBLOB = new ObjectDataBLOBDeclaration();
                    DeclarationBLOB.Parse(s);
                    DeclarationList.Add(DeclarationBLOB);
                }
            }
            this.ObjectDeclarationOrObjectDataBLOBDeclaration = DeclarationList.ToArray();
            this.ObjectGroupDeclarationsEnd = new bit8StreamObjectHeaderEnd();
            this.ObjectGroupDeclarationsEnd.Parse(s);

            if (ContainsStreamObjectHeader(0x79))
            {
                this.ObjectMetadataDeclaration = new ObjectMetadataDeclaration();
                this.ObjectMetadataDeclaration.Parse(s);
            }

            this.ObjectGroupDataStart = new StreamObjectHeader();
            this.ObjectGroupDataStart = this.ObjectGroupDataStart.TryParse(s);

            List<object> ObjectDataList = new List<object>();
            while (ContainsStreamObjectHeader(0x16) || ContainsStreamObjectHeader(0x1C))
            {
                if (ContainsStreamObjectHeader(0x16))
                {
                    ObjectData data = new ObjectData();
                    data.Parse(s);
                    ObjectDataList.Add(data);
                }
                else if (ContainsStreamObjectHeader(0x1C))
                {
                    ObjectDataBLOBReference DataBLOB = new ObjectDataBLOBReference();
                    DataBLOB.Parse(s);
                    ObjectDataList.Add(DataBLOB);
                }
            }
            this.ObjectDataOrObjectDataBLOBReference = ObjectDataList.ToArray();

            this.ObjectGroupDataEnd = new bit8StreamObjectHeaderEnd();
            this.ObjectGroupDataEnd.Parse(s);
            this.DataElementEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementEnd.Parse(s);
        }
 /// <summary>
 /// Parse the ObjectDataBLOBDataElements structure.
 /// </summary>
 /// <param name="s">An stream containing ObjectDataBLOBDataElements structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.ObjectDataBLOB = new StreamObjectHeader();
     this.ObjectDataBLOB = this.ObjectDataBLOB.TryParse(s);
     this.Data = new BinaryItem();
     this.Data.Parse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
        /// <summary>
        /// Parse the Knowledge structure.
        /// </summary>
        /// <param name="s">An stream containing Knowledge structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.KnowledgeStart = new bit16StreamObjectHeaderStart();
            this.KnowledgeStart.Parse(s);

            List<SpecializedKnowledge> tempSpecializedKnowledge = new List<SpecializedKnowledge>();
            while (ContainsStreamObjectHeader(0x44))
            {
                SpecializedKnowledge knowledge = new SpecializedKnowledge();
                knowledge.Parse(s);
                tempSpecializedKnowledge.Add(knowledge);
            };
            this.SpecializedKnowledge = tempSpecializedKnowledge.ToArray();
            this.KnowledgeEnd = new bit8StreamObjectHeaderEnd();
            this.KnowledgeEnd.Parse(s);
        }
        /// <summary>
        /// Parse the DataElementPackage structure.
        /// </summary>
        /// <param name="s">An stream containing DataElementPackage structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.DataElementPackageStart = new bit16StreamObjectHeaderStart();
            this.DataElementPackageStart.Parse(s);
            this.Reserved = ReadByte();

            long DataElementPackageType = PreReadDataElementPackageType();
            List<object> DataElementsList = new List<object>();

            while (ContainsStreamObjectHeader(0x01) && (DataElementPackageType == 0x01 || DataElementPackageType == 0x02 ||
                   DataElementPackageType == 0x03 || DataElementPackageType == 0x04 || DataElementPackageType == 0x05 ||
                   DataElementPackageType == 0x06 || DataElementPackageType == 0x0A))
            {

                switch (DataElementPackageType)
                {
                    case 0x01:
                        {
                            StorageIndexDataElement StorageIndex = new StorageIndexDataElement();
                            StorageIndex.Parse(s);
                            DataElementsList.Add(StorageIndex);
                            break;
                        }
                    case 0x02:
                        {
                            StorageManifestDataElement StorageManifest = new StorageManifestDataElement();
                            StorageManifest.Parse(s);
                            DataElementsList.Add(StorageManifest);
                            break;
                        }
                    case 0x03:
                        {
                            CellManifestDataElement CellManifest = new CellManifestDataElement();
                            CellManifest.Parse(s);
                            DataElementsList.Add(CellManifest);
                            break;
                        }
                    case 0x04:
                        {
                            RevisionManifestDataElement RevisionManifest = new RevisionManifestDataElement();
                            RevisionManifest.Parse(s);
                            DataElementsList.Add(RevisionManifest);
                            break;
                        }
                    case 0x05:
                        {
                            ObjectGroupDataElements ObjectGroup = new ObjectGroupDataElements();
                            ObjectGroup.Parse(s);
                            DataElementsList.Add(ObjectGroup);
                            break;
                        }
                    case 0x06:
                        {
                            DataElementFragmentDataElement DataElementFragment = new DataElementFragmentDataElement();
                            DataElementFragment.Parse(s);
                            DataElementsList.Add(DataElementFragment);
                            break;
                        }
                    case 0x0A:
                        {
                            ObjectDataBLOBDataElements ObjectDataBLOB = new ObjectDataBLOBDataElements();
                            ObjectDataBLOB.Parse(s);
                            DataElementsList.Add(ObjectDataBLOB);
                            break;
                        }
                    default:
                        throw new Exception("The DataElementPackageType is not right.");
                }
                DataElementPackageType = PreReadDataElementPackageType();
            }
            this.DataElements = DataElementsList.ToArray();
            this.DataElementPackageEnd = new bit8StreamObjectHeaderEnd();
            this.DataElementPackageEnd.Parse(s);
        }
 /// <summary>
 /// Parse the DataElementFragmentDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing DataElementFragmentDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.DataElementFragment = new bit32StreamObjectHeaderStart();
     this.DataElementFragment.Parse(s);
     this.FragmentExtendedGUID = new ExtendedGUID();
     this.FragmentExtendedGUID = this.FragmentExtendedGUID.TryParse(s);
     this.FragmentDataElementSize = new CompactUnsigned64bitInteger();
     this.FragmentDataElementSize = this.FragmentDataElementSize.TryParse(s);
     this.FragmentFileChunkReference = new FileChunkReference();
     this.FragmentFileChunkReference.Parse(s);
     this.FragmentData = new BinaryItem();
     this.FragmentData.Parse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }
 /// <summary>
 /// Parse the WaterlineKnowledge structure.
 /// </summary>
 /// <param name="s">An stream containing WaterlineKnowledge structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.ContentTagKnowledgeStart = new bit16StreamObjectHeaderStart();
     this.ContentTagKnowledgeStart.Parse(s);
     List<ContentTagKnowledgeEntry> tempContentTag = new List<ContentTagKnowledgeEntry>();
     while (ContainsStreamObjectHeader(0x2E))
     {
         ContentTagKnowledgeEntry ContentTagknowledge = new ContentTagKnowledgeEntry();
         ContentTagknowledge.Parse(s);
         tempContentTag.Add(ContentTagknowledge);
     };
     this.ContentTagKnowledgeEntryArray = tempContentTag.ToArray();
     this.ContentTagKnowledgeEnd = new bit8StreamObjectHeaderEnd();
     this.ContentTagKnowledgeEnd.Parse(s);
 }
 /// <summary>
 /// Parse the CellManifestDataElement structure.
 /// </summary>
 /// <param name="s">An stream containing CellManifestDataElement structure.</param>
 public override void Parse(Stream s)
 {
     base.Parse(s);
     this.DataElementStart = new bit16StreamObjectHeaderStart();
     this.DataElementStart.Parse(s);
     this.DataElementExtendedGUID = new ExtendedGUID();
     this.DataElementExtendedGUID = this.DataElementExtendedGUID.TryParse(s);
     this.SerialNumber = new SerialNumber();
     this.SerialNumber = this.SerialNumber.TryParse(s);
     this.DataElementType = new CompactUnsigned64bitInteger();
     this.DataElementType = this.DataElementType.TryParse(s);
     this.CellManifestCurrentRevision = new bit16StreamObjectHeaderStart();
     this.CellManifestCurrentRevision.Parse(s);
     this.CellManifestCurrentRevisionExtendedGUID = new ExtendedGUID();
     this.CellManifestCurrentRevisionExtendedGUID = this.CellManifestCurrentRevisionExtendedGUID.TryParse(s);
     this.DataElementEnd = new bit8StreamObjectHeaderEnd();
     this.DataElementEnd.Parse(s);
 }