Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        protected ArrayRunPointerSegment GetSegment(ITableRun table, int pointerAddress)
        {
            var offsets = table.ConvertByteOffsetToArrayOffset(pointerAddress);

            return((ArrayRunPointerSegment)table.ElementContent[offsets.SegmentIndex]);
        }