template< typename I, typename SZ, typename O > inline O copy_n( I first, SZ n, O dest ) {
if( n > 0 ) { *dest = *first;
int n8 = --n / 8; switch( n % 8 ) { case 0: while( n8-- ) { *++dest = *++first; case 7: *++dest = *++first; case 6: *++dest = *++first; case 5: *++dest = *++first; case 4: *++dest = *++first; case 3: *++dest = *++first; case 2: *++dest = *++first; case 1: *++dest = *++first; } ; }
++dest; } return( dest );}
The funny switch is named duff's device. It makes the algorithmus 20-40% faster then a simple for-loop. (Werner Salomon, 6.5.2005)