Exemplo n.º 1
0
        CopyFrom(
            NativeLog.IKIoBuffer IoBuffer,
            UInt32 SrcOffset,
            UInt32 Size,
            byte *ResultPtr)
        {
            // Compute current source location
            var src = new KIoBufferStream(IoBuffer, SrcOffset);

            // NOTE: ctor will fast path for single element KIoBuffers
            //       and code is inlined here

            if (src._TotalSize < (SrcOffset + Size))
            {
                return(false); // Out of range request
            }

            if (src.GetBufferPointerRange() >= Size)
            {
                // Optimize for moving totally within current element
                Memcopy(src._CurrentElementBufferBase + src._CurrentElementOffset, ResultPtr, Size);
                return(true);
            }

            // Will be crossing element boundary
            return(src.Pull(ResultPtr, Size));
        }