From 7853d6a462b2fb8834719f8ed5a3a10ff6446a77 Mon Sep 17 00:00:00 2001 From: morkt Date: Sun, 19 Jul 2015 15:29:00 +0400 Subject: [PATCH] (Binary.CopyOverlapped): use Buffer.BlockCopy when destination precedes source. --- GameRes/Utility.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/GameRes/Utility.cs b/GameRes/Utility.cs index 1dd599a5..f2d53fcb 100644 --- a/GameRes/Utility.cs +++ b/GameRes/Utility.cs @@ -74,14 +74,21 @@ namespace GameRes.Utility public static void CopyOverlapped (byte[] data, int src, int dst, int count) { int preceding = dst-src; - while (count > 0) + if (preceding > 0) { - if (preceding > count) - preceding = count; - System.Buffer.BlockCopy (data, src, data, dst, preceding); - src = dst; - dst += preceding; - count -= preceding; + while (count > 0) + { + if (preceding > count) + preceding = count; + System.Buffer.BlockCopy (data, src, data, dst, preceding); + src = dst; + dst += preceding; + count -= preceding; + } + } + else + { + System.Buffer.BlockCopy (data, src, data, dst, count); } }