From c81e90d0f6c0feec1443d711833ea382a1c10ec6 Mon Sep 17 00:00:00 2001 From: zecke Date: Sat, 18 Sep 2004 16:43:47 +0000 Subject: A proposal for making the memory copy functions build with g++3.4.2. Please review the patch, specially the casts it makes, and also the boundaries and sizes. -Shouldn't we use unsigned char* instead of char*. For arm it is already unsigned? -Check again the casts --- diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.cpp b/noncore/multimedia/opieplayer2/xinevideowidget.cpp index b55750a..15c611f 100644 --- a/noncore/multimedia/opieplayer2/xinevideowidget.cpp +++ b/noncore/multimedia/opieplayer2/xinevideowidget.cpp @@ -46,39 +46,67 @@ // 180 deg rot: copy a line from src to dst reversed -static inline void memcpy_rev ( void *dst, void *src, size_t len ) +/* + * This code relies the len be a multiply of 16bit + */ +static inline void memcpy_rev ( void *_dst, void *_src, size_t len ) { - len >>= 1; - - ((char *) src ) += ( len << 1 ); + /* + * move the source to the end + */ + char *src_c = static_cast(_src) + len; + + /* + * as we copy by 16bit and not 8bit + * devide the length by two + */ + len >>= 1; + + short int* dst = static_cast( _dst ); + short int* src = reinterpret_cast( src_c ); + + /* + * Increment dst after assigning + * Decrement src before assigning becase we move backwards + */ + while ( len-- ) + *dst++ = *--src; - while ( len-- ) - *((short int *) dst )++ = *--((short int *) src ); } // 90 deg rot: copy a column from src to dst -static inline void memcpy_step ( void *dst, void *src, size_t len, size_t step ) +static inline void memcpy_step ( void *_dst, void *_src, size_t len, size_t step ) { - len >>= 1; - while ( len-- ) { - *((short int *) dst )++ = *((short int *) src ); - ((char *) src ) += step; - } + short int *dst = static_cast( _dst ); + short int *src = static_cast( _src ); + + len >>= 1; + + /* + * Copy 16bit from src to dst and move to the next address + */ + while ( len-- ) { + *dst++ = *src; + src = reinterpret_cast(reinterpret_cast(src)+step); + } } // 270 deg rot: copy a column from src to dst reversed -static inline void memcpy_step_rev ( void *dst, void *src, size_t len, size_t step ) +static inline void memcpy_step_rev ( void *_dst, void *_src, size_t len, size_t step ) { - len >>= 1; + len >>= 1; - ((char *) src ) += ( len * step ); + char *src_c = static_cast( _src ) + (len*step); + short int* dst = static_cast( _dst ); + short int* src = reinterpret_cast( src_c ); - while ( len-- ) { - ((char *) src ) -= step; - *((short int *) dst )++ = *((short int *) src ); - } + while ( len-- ) { + src_c -= step; + src = reinterpret_cast( src_c ); + *dst++ = *src; + } } -- cgit v0.9.0.2