示例#1
0
        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);
        }
示例#2
0
        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);
        }