/// <summary> /// Generate an XmlElement representation of the BattleStepTarget for saving to file. /// </summary> /// <param name="xmldoc">The parent XmlDocument.</param> /// <returns>An XmlElement representing the BattleStepTarget.</returns> public new XmlElement ToXml(XmlDocument xmldoc) { XmlElement xmlelBattleStepTarget = xmldoc.CreateElement("BattleStepTarget"); xmlelBattleStepTarget.AppendChild(base.ToXml(xmldoc)); Global.SaveData(xmldoc, xmlelBattleStepTarget, "StackKey", StackKey.ToString("X")); Global.SaveData(xmldoc, xmlelBattleStepTarget, "TargetKey", TargetKey.ToString("X")); return(xmlelBattleStepTarget); }
public void UpdateMemorySegements() { if (null == TypeInfoOrNull || null == TypeInfoOrNull.PureName) { return; } List <MemorySegmentViewModel> segments; var stackKeys = new Stack <StackKey>(); { TypeInfo pureType = PureTypeManager.GetType(TypeInfoOrNull.PureName); uint sizePerSegment = TypeInfoOrNull.PointerLevel > 0 ? TypeInfo.POINTER_SIZE : pureType.Size; uint totalLength = Size / sizePerSegment; uint remainSegment = Size % sizePerSegment; segments = new List <MemorySegmentViewModel>((int)totalLength); for (uint i = 0; i < totalLength; ++i) { var vm = new MemorySegmentViewModel() { TypeName = TypeInfoOrNull.FullNameOrNull, MemberNameOrNull = TypeInfoOrNull.MemberNameOrNull, Memory = new ArraySegment <byte>(ByteValues, (int)(i * sizePerSegment), (int)sizePerSegment), Address = Address + i * sizePerSegment, AncestorOrNull = null, Children = new ObservableCollection <List <MemorySegmentViewModel> >() }; segments.Add(vm); stackKeys.Push(new StackKey() { ViewModel = vm, Type = TypeInfoOrNull }); } } while (stackKeys.Count > 0) { StackKey popKey = stackKeys.Pop(); if (popKey.Type.PointerLevel > 0 || popKey.Type.ArrayOrFunctionPointerLevels.Count > 0) { continue; } foreach (TypeInfo memberType in popKey.Type.Members) { uint totalLength = memberType.GetTotalLength(); uint sizePerSegment = memberType.Size / totalLength; TypeInfo elementOfArrayType = memberType.GetElementOfArray(); var memberArray = new List <MemorySegmentViewModel>((int)totalLength); for (uint i = 0; i < totalLength; ++i) { var vm = new MemorySegmentViewModel() { TypeName = totalLength > 1 ? elementOfArrayType.FullNameOrNull : memberType.FullNameOrNull, MemberNameOrNull = memberType.MemberNameOrNull, Memory = new ArraySegment <byte>(ByteValues, popKey.ViewModel.Memory.Offset + (int)((memberType.Offset - popKey.Type.Offset) + i * sizePerSegment), (int)sizePerSegment), Address = popKey.ViewModel.Address + (memberType.Offset - popKey.Type.Offset) + i * sizePerSegment, AncestorOrNull = popKey.ViewModel, Children = new ObservableCollection <List <MemorySegmentViewModel> >() }; stackKeys.Push(new StackKey() { ViewModel = vm, Type = memberType }); memberArray.Add(vm); } popKey.ViewModel.Children.Add(memberArray); } } MemorySegments = segments; }