示例#1
0
        private static void SerialOffsetting(Span <byte> span, Int32 sizeChange, Int32 sizeChangeOffset)
        {
            Int32 exportsCount     = DOLib.Int32FromSpanOffset(span, exportsCountOffset);
            Int32 exportsMapOffset = DOLib.Int32FromSpanOffset(span, exportsMapOffsetOffset);

            Int32 currentReferenceOffset = exportsMapOffset;
            bool  applyOffsetChange      = false;
            int   processedReferences    = 0;

            while (processedReferences < exportsCount)
            {
                if (!applyOffsetChange)
                {
                    RelativeSizeChangeDirection direction = CheckOffsetAffected(span, sizeChangeOffset, currentReferenceOffset);
                    if (direction == RelativeSizeChangeDirection.here)
                    {
                        ApplySerialSizeChange(span, sizeChange, currentReferenceOffset);
                        applyOffsetChange = true;
                    }

                    if (direction == RelativeSizeChangeDirection.before)
                    {
                        ApplySerialOffsetChange(span, sizeChange, currentReferenceOffset);
                        applyOffsetChange = true;
                    }
                }
                else
                {
                    ApplySerialOffsetChange(span, sizeChange, currentReferenceOffset);
                }

                currentReferenceOffset += exportReferenceSize;
                processedReferences++;
            }
        }
示例#2
0
        private static RelativeSizeChangeDirection CheckOffsetAffected(Span <byte> span, Int32 sizeChangeSerialOffset, Int32 referenceOffset)
        {
            Int32 serialOffset = DOLib.Int32FromSpanOffset(span, referenceOffset + relativeSerialOffsetOffset);

            if (serialOffset > sizeChangeSerialOffset)
            {
                return(RelativeSizeChangeDirection.before);
            }
            else if (serialOffset == sizeChangeSerialOffset)
            {
                return(RelativeSizeChangeDirection.here);
            }
            else /*if (serialOffset < sizeChangeSerialOffset)*/ return {
                (RelativeSizeChangeDirection.after);
            }
        }