internal static unsafe void wstrcpy( char *dmem, char *smem, int charCount ) {
if ( charCount > 0 ) {
if ( ( ( (int)dmem ^ (int)smem ) & 3 ) == 0 ) {
while ( ( (int) dmem & 3 ) != 0 && charCount > 0) {
dmem[0] = smem[0];
dmem += 1;
smem += 1;
charCount -= 1;
}
if ( charCount >= 8 ) {
charCount -= 8;
do {
((uint*)dmem)[0] = ((uint*)smem)[0];
((uint*)dmem)[1] = ((uint*)smem)[1];
((uint*)dmem)[2] = ((uint*)smem)[2];
((uint*)dmem)[3] = ((uint*)smem)[3];
dmem += 8;
smem += 8;
charCount -= 8;
} while ( charCount >= 0 );
}
if ( ( charCount & 4 ) != 0 ) {
((uint*)dmem)[0] = ((uint*)smem)[0];
((uint*)dmem)[1] = ((uint*)smem)[1];
dmem += 4;
smem += 4;
}
if ( ( charCount & 2 ) != 0) {
((uint*)dmem)[0] = ((uint*)smem)[0];
dmem += 2;
smem += 2;
}
}
else {
if ( charCount >= 8 ) {
charCount -= 8;
do {
dmem[0] = smem[0];
dmem[1] = smem[1];
dmem[2] = smem[2];
dmem[3] = smem[3];
dmem[4] = smem[4];
dmem[5] = smem[5];
dmem[6] = smem[6];
dmem[7] = smem[7];
dmem += 8;
smem += 8;
charCount -= 8;
}
while ( charCount >= 0 );
}
if ( ( charCount & 4) != 0 ) {
dmem[0] = smem[0];
dmem[1] = smem[1];
dmem[2] = smem[2];
dmem[3] = smem[3];
dmem += 4;
smem += 4;
}
if ( ( charCount & 2 ) != 0 ) {
dmem[0] = smem[0];
dmem[1] = smem[1];
dmem += 2;
smem += 2;
}
}
if ( ( charCount & 1 ) != 0 ) {
dmem[0] = smem[0];
}
}
}