private void TypeTreeBlobRead(TypeTree m_Type) { int numberOfNodes = reader.ReadInt32(); int stringBufferSize = reader.ReadInt32(); for (int i = 0; i < numberOfNodes; i++) { var typeTreeNode = new TypeTreeNode(); m_Type.m_Nodes.Add(typeTreeNode); typeTreeNode.m_Version = reader.ReadUInt16(); typeTreeNode.m_Level = reader.ReadByte(); typeTreeNode.m_TypeFlags = reader.ReadByte(); typeTreeNode.m_TypeStrOffset = reader.ReadUInt32(); typeTreeNode.m_NameStrOffset = reader.ReadUInt32(); typeTreeNode.m_ByteSize = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32(); if (header.m_Version >= SerializedFileFormatVersion.kTypeTreeNodeWithTypeFlags) { typeTreeNode.m_RefTypeHash = reader.ReadUInt64(); } } m_Type.m_StringBuffer = reader.ReadBytes(stringBufferSize); using (var stringBufferReader = new BinaryReader(new MemoryStream(m_Type.m_StringBuffer))) { for (int i = 0; i < numberOfNodes; i++) { var m_Node = m_Type.m_Nodes[i]; m_Node.m_Type = ReadString(stringBufferReader, m_Node.m_TypeStrOffset); m_Node.m_Name = ReadString(stringBufferReader, m_Node.m_NameStrOffset); } } string ReadString(BinaryReader stringBufferReader, uint value) { var isOffset = (value & 0x80000000) == 0; if (isOffset) { stringBufferReader.BaseStream.Position = value; return(stringBufferReader.ReadStringToNull()); } var offset = value & 0x7FFFFFFF; if (CommonString.StringBuffer.TryGetValue(offset, out var str)) { return(str); } return(offset.ToString()); } }
private void TypeTreeBlobRead(List <TypeTreeNode> typeTree) { int numberOfNodes = reader.ReadInt32(); int stringBufferSize = reader.ReadInt32(); for (int i = 0; i < numberOfNodes; i++) { var typeTreeNode = new TypeTreeNode(); typeTree.Add(typeTreeNode); typeTreeNode.m_Version = reader.ReadUInt16(); typeTreeNode.m_Level = reader.ReadByte(); typeTreeNode.m_IsArray = reader.ReadBoolean() ? 1 : 0; typeTreeNode.m_TypeStrOffset = reader.ReadUInt32(); typeTreeNode.m_NameStrOffset = reader.ReadUInt32(); typeTreeNode.m_ByteSize = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32(); if (header.m_Version >= 19) { typeTreeNode.m_RefTypeHash = reader.ReadUInt64(); } } var m_StringBuffer = reader.ReadBytes(stringBufferSize); using (var stringBufferReader = new BinaryReader(new MemoryStream(m_StringBuffer))) { for (int i = 0; i < numberOfNodes; i++) { var typeTreeNode = typeTree[i]; typeTreeNode.m_Type = ReadString(stringBufferReader, typeTreeNode.m_TypeStrOffset); typeTreeNode.m_Name = ReadString(stringBufferReader, typeTreeNode.m_NameStrOffset); } } string ReadString(BinaryReader stringBufferReader, uint value) { var isOffset = (value & 0x80000000) == 0; if (isOffset) { stringBufferReader.BaseStream.Position = value; return(stringBufferReader.ReadStringToNull()); } var offset = value & 0x7FFFFFFF; if (CommonString.StringBuffer.TryGetValue(offset, out var str)) { return(str); } return(offset.ToString()); } }
private void ReadTypeTree5(List <TypeTreeNode> typeTree) { int numberOfNodes = reader.ReadInt32(); int stringBufferSize = reader.ReadInt32(); reader.Position += numberOfNodes * 24; using (var stringBufferReader = new BinaryReader(new MemoryStream(reader.ReadBytes(stringBufferSize)))) { reader.Position -= numberOfNodes * 24 + stringBufferSize; for (int i = 0; i < numberOfNodes; i++) { var typeTreeNode = new TypeTreeNode(); typeTree.Add(typeTreeNode); typeTreeNode.m_Version = reader.ReadUInt16(); typeTreeNode.m_Level = reader.ReadByte(); typeTreeNode.m_IsArray = reader.ReadBoolean() ? 1 : 0; var m_TypeStrOffset = reader.ReadUInt16(); var temp = reader.ReadUInt16(); if (temp == 0) { stringBufferReader.BaseStream.Position = m_TypeStrOffset; typeTreeNode.m_Type = stringBufferReader.ReadStringToNull(); } else { typeTreeNode.m_Type = CommonString.StringBuffer.ContainsKey(m_TypeStrOffset) ? CommonString.StringBuffer[m_TypeStrOffset] : m_TypeStrOffset.ToString(); } var m_NameStrOffset = reader.ReadUInt16(); temp = reader.ReadUInt16(); if (temp == 0) { stringBufferReader.BaseStream.Position = m_NameStrOffset; typeTreeNode.m_Name = stringBufferReader.ReadStringToNull(); } else { typeTreeNode.m_Name = CommonString.StringBuffer.ContainsKey(m_NameStrOffset) ? CommonString.StringBuffer[m_NameStrOffset] : m_NameStrOffset.ToString(); } typeTreeNode.m_ByteSize = reader.ReadInt32(); typeTreeNode.m_Index = reader.ReadInt32(); typeTreeNode.m_MetaFlag = reader.ReadInt32(); } reader.Position += stringBufferSize; } }