private EBXNodeType ReadTypeNode(Stream s, EBXTypeDesc desc, bool hasGUID, bool isInstance = false) { //NEWSTUFF if (debug) { log.AppendLine(s.Position.ToString("X8") + " : Read Type " + keywords[desc.nameHash]); } EBXNodeType node = new EBXNodeType(); node.Text = keywords[desc.nameHash]; if (hasGUID) { //NEWSTUFF if (debug) { log.AppendLine(s.Position.ToString("X8") + " : Read GUID"); } node.guid = new FBGuid(s); } node.typeDesc = desc; node.fields = new List <EBXNodeField>(); int off = (!isInstance || (desc.alignment != 4)) ? 0 : 8; long pos = s.Position - off; for (int i = 0; i < desc.fieldCount; i++) { s.Seek(pos + lDescriptors[desc.layoutDescIndex + i].fieldOffset, SeekOrigin.Begin); node.fields.Add(ReadFieldNode(s, lDescriptors[desc.layoutDescIndex + i])); } s.Seek(pos + desc.instanceSize, SeekOrigin.Begin); return(node); }
private EBXNodeType ReadTypeNode2(Stream s, EBXTypeDesc desc, bool hasGUID) { EBXNodeType node = new EBXNodeType(); node.Text = keywords[desc.nameHash]; if (hasGUID) { node.guid = new FBGuid(s); } node.typeDesc = desc; node.fields = new List <EBXNodeField>(); for (int i = 0; i < desc.fieldCount; i++) { node.fields.Add(ReadFieldNode2(s, lDescriptors[desc.layoutDescIndex + i])); } Helpers.AlignStream(s, desc.alignment); return(node); }