Mercurial > projects > dwt2
comparison base/src/java/lang/System.d @ 38:2e09b0e6857a
work on phobosfication
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 25 Mar 2009 11:18:25 +0100 |
parents | 1bf55a6eb092 |
children | 6be48cf9f95c |
comparison
equal
deleted
inserted
replaced
37:46c5f8f56b41 | 38:2e09b0e6857a |
---|---|
78 // items ~= arr2; // item replace the arrr2[0] here | 78 // items ~= arr2; // item replace the arrr2[0] here |
79 items = arr1 ~ item ~ arr2; | 79 items = arr1 ~ item ~ arr2; |
80 } | 80 } |
81 } | 81 } |
82 | 82 |
83 static void arraycopy(T[] src, uint srcPos, T[] dest, uint destPos, uint len) | 83 version(D_Version2){ |
84 mixin("alias const(T) CT;"); | |
85 } else { // D1 | |
86 alias T CT; | |
87 } | |
88 static void arraycopy(CT[] src, uint srcPos, T[] dest, uint destPos, uint len) | |
84 { | 89 { |
85 if(len == 0) return; | 90 if(len == 0) return; |
86 | 91 |
87 assert(src); | 92 assert(src); |
88 assert(dest); | 93 assert(dest); |
89 debug{validCheck(src.length - srcPos, dest.length - destPos, len);} | 94 debug{validCheck(src.length - srcPos, dest.length - destPos, len);} |
90 | 95 |
91 if(src is dest){ | 96 // overlapping? |
97 if((src.ptr <= dest.ptr && src.ptr + len > dest.ptr) | |
98 ||(src.ptr >= dest.ptr && src.ptr < dest.ptr + len)){ | |
92 if( destPos < srcPos ){ | 99 if( destPos < srcPos ){ |
93 for(int i=0; i<len; ++i){ | 100 for(int i=0; i<len; ++i){ |
94 dest[destPos+i] = src[srcPos+i]; | 101 dest[destPos+i] = cast(T)src[srcPos+i]; |
95 } | 102 } |
96 } | 103 } |
97 else{ | 104 else{ |
98 for(int i=len-1; i>=0; --i){ | 105 for(int i=len-1; i>=0; --i){ |
99 dest[destPos+i] = src[srcPos+i]; | 106 dest[destPos+i] = cast(T)src[srcPos+i]; |
100 } | 107 } |
101 } | 108 } |
102 }else{ | 109 }else{ |
103 dest[destPos..(len+destPos)] = src[srcPos..(len+srcPos)]; | 110 dest[destPos..(len+destPos)] = cast(T[])src[srcPos..(len+srcPos)]; |
104 } | 111 } |
105 } | 112 } |
106 } | 113 } |
107 | 114 |
108 | 115 |