
Untitled
By: a guest on
Jul 20th, 2012 | syntax:
Diff | size: 1.46 KB | hits: 11 | expires: Never
Index: Memory.cs
===================================================================
--- Memory.cs (revision 3343)
+++ Memory.cs (working copy)
@@ -88,18 +88,34 @@
#if AXIOM_SAFE_ONLY
dest.Copy( src, srcOffset, destOffset, length );
#else
- unsafe
- {
- var pSrc = src.ToBytePointer();
- var pDest = dest.ToBytePointer();
+ unsafe
+ {
+ var pSrc = src.ToBytePointer();
+ var pDest = dest.ToBytePointer();
- for ( var i = 0; i < length; i++ )
- {
- pDest[ i + destOffset ] = pSrc[ i + srcOffset ];
- }
- }
+ //Following code snippet was taken from http://msdn.microsoft.com/en-us/library/28k1s2k6(v=vs.80).aspx
+
+ var ps = pSrc;
+ var pd = pDest;
+
+ // Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
+ for ( var i = 0; i < length / 4; i++ )
+ {
+ *( (int*)pd + destOffset ) = *( (int*)ps + srcOffset );
+ pd += 4;
+ ps += 4;
+ }
+
+ // Complete the copy by moving any bytes that weren't moved in blocks of 4:
+ for ( var i = 0; i < length % 4; i++ )
+ {
+ *pd = *ps;
+ pd++;
+ ps++;
+ }
+ }
#endif
- }
+ }
#endregion Copy Method