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