コード例 #1
0
            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
            }
コード例 #2
0
            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);
            }
コード例 #3
0
            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;
                    }
                }
            }
コード例 #4
0
            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;
                }
            }