private void UpdateParents(ModelDelta token, ITableRun parent, int segmentIndex, int newValue, IReadOnlyList <int> pointerSources) { var segmentOffset = parent.ElementContent.Take(segmentIndex).Sum(segment => segment.Length); var segmentLength = parent.ElementContent[segmentIndex].Length; foreach (var source in pointerSources) { var offsets = parent.ConvertByteOffsetToArrayOffset(source); if (offsets.ElementIndex < 0 || offsets.ElementIndex > parent.ElementCount) { continue; } if (model.ReadMultiByteValue(parent.Start + offsets.ElementIndex * parent.ElementLength + segmentOffset, segmentLength) != newValue) { model.WriteMultiByteValue(parent.Start + offsets.ElementIndex * parent.ElementLength + segmentOffset, segmentLength, token, newValue); } } }
protected ArrayRunPointerSegment GetSegment(ITableRun table, int pointerAddress) { var offsets = table.ConvertByteOffsetToArrayOffset(pointerAddress); return((ArrayRunPointerSegment)table.ElementContent[offsets.SegmentIndex]); }