public void Write(IO.EndianWriter s) { var xmbContext = s.UserData as XmbFileContext; s.Write(RootElementIndex); XmbVariantSerialization.Write(s, NameVariant); XmbVariantSerialization.Write(s, InnerTextVariant); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } #region Attributes header s.Write(Attributes.Count); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } mAttributesOffsetPos = s.PositionPtr; s.WriteVirtualAddress(Values.PtrHandle.InvalidHandle32); #endregion #region Children header s.Write(ChildrenIndices.Count); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } mChildrenOffsetPos = s.PositionPtr; s.WriteVirtualAddress(Values.PtrHandle.InvalidHandle32); #endregion }
public void WriteAttributes(IO.EndianWriter s) { if (Attributes.Count == 0) { return; } mAttributesOffset = s.PositionPtr; foreach (var kv in Attributes) { XmbVariantSerialization.Write(s, kv.Key); XmbVariantSerialization.Write(s, kv.Value); } // Update element entry var pos = s.BaseStream.Position; s.Seek((long)mAttributesOffsetPos); s.WriteVirtualAddress(mAttributesOffset); s.Seek(pos); }
public void ReadAttributes(XmbFile xmb, IO.EndianReader s) { if (mAttributesOffset.IsInvalidHandle) { return; } s.Seek((long)mAttributesOffset); for (int x = 0; x < Attributes.Capacity; x++) { XmbVariant k; XmbVariantSerialization.Read(s, out k); XmbVariant v; XmbVariantSerialization.Read(s, out v); var kv = new KeyValuePair <XmbVariant, XmbVariant>(k, v); Attributes.Add(kv); if (k.HasUnicodeData || v.HasUnicodeData) { xmb.mHasUnicodeStrings = true; } } }
public void Read(XmbFile xmb, XmbFileContext xmbContext, IO.EndianReader s) { s.Read(out RootElementIndex); XmbVariantSerialization.Read(s, out NameVariant); XmbVariantSerialization.Read(s, out InnerTextVariant); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } #region Attributes header int count; s.Read(out count); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } s.ReadVirtualAddress(out mAttributesOffset); Attributes = new List <KeyValuePair <XmbVariant, XmbVariant> >(count); #endregion #region Children header s.Read(out count); if (xmbContext.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } s.ReadVirtualAddress(out mChildrenOffset); ChildrenIndices = new List <int>(count); #endregion if (NameVariant.HasUnicodeData || InnerTextVariant.HasUnicodeData) { xmb.mHasUnicodeStrings = true; } }