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 Write(IO.EndianWriter s) { var context = s.UserData as XmbFileContext; s.Write(kSignature); if (context.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } #region Elements header s.Write(mElements.Count); if (context.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } var elements_offset_pos = s.MarkVirtualAddress(context.PointerSize); #endregion #region Pool header s.Write(mPool.Size); if (context.PointerSize == Shell.ProcessorSize.x64) { s.Pad32(); } var pool_offset_pos = s.MarkVirtualAddress(context.PointerSize); #endregion if (context.PointerSize == Shell.ProcessorSize.x64) { s.Pad64(); } var elements_offset = s.PositionPtr; foreach (var e in mElements) { e.Write(s); } foreach (var e in mElements) { e.WriteAttributes(s); e.WriteChildren(s); } var pool_offset = s.PositionPtr; mPool.Write(s); s.Seek((long)elements_offset_pos); s.WriteVirtualAddress(elements_offset); s.Seek((long)pool_offset_pos); s.WriteVirtualAddress(pool_offset); }
public void WriteChildren(IO.EndianWriter s) { if (ChildrenIndices.Count == 0) { return; } mChildrenOffset = s.PositionPtr; foreach (int ci in ChildrenIndices) { s.Write(ci); } // Update element entry var pos = s.BaseStream.Position; s.Seek((long)mChildrenOffsetPos); s.WriteVirtualAddress(mChildrenOffset); s.Seek(pos); }
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); }