CigiSwapping.cpp

Go to the documentation of this file.
00001 
00061 #define _EXPORT_CCL_
00062 
00063 #include "CigiTypes.h"
00064 
00065 union _SWAP_UNION
00066 {
00067     Cigi_uint32 i;
00068     Cigi_uint8 b[4];
00069 };
00070 typedef union _SWAP_UNION SWAP_UNION;
00071 
00072 
00073 // ====================================================================
00074 // CigiSwap2
00075 // ====================================================================
00076 CIGI_SPEC void CigiSwap2( void *dest, const void *src)
00077 {
00078     static Cigi_uint16 d, s;
00079     
00080     s = *( ( Cigi_uint16 *)src);
00081     
00082     d = s << 8;
00083     d |= s >> 8;
00084     
00085     *( ( Cigi_uint16 *)dest) = d;
00086 }
00087 
00088 // ====================================================================
00089 // CigiSwap4
00090 // ====================================================================
00091 CIGI_SPEC void CigiSwap4( void *dest, const void *src)
00092 {
00093     static SWAP_UNION d, s;
00094     
00095     s.i = *( ( Cigi_uint32 *)src);
00096     
00097     d.b[0] = s.b[3];
00098     d.b[1] = s.b[2];
00099     d.b[2] = s.b[1];
00100     d.b[3] = s.b[0];
00101     
00102     *( ( Cigi_uint32 *)dest) = d.i;
00103 }
00104 
00105 // ====================================================================
00106 // CigiSwap8
00107 // ====================================================================
00108 CIGI_SPEC void CigiSwap8( void *dest, const void *src)
00109 {
00110     static SWAP_UNION d1, s1;
00111     static SWAP_UNION d2, s2;
00112     
00113     /* Do each word separately.  Each pair of variables should be enclosed within 
00114      * braces to minimize the number of variables declared as "register."
00115      */    
00116     
00117     s1.i = *( ( Cigi_uint32 *)src);
00118     s2.i = *( ( Cigi_uint32 *)src + 1);
00119     
00120     d1.b[0] = s1.b[3];
00121     d1.b[1] = s1.b[2];
00122     d1.b[2] = s1.b[1];
00123     d1.b[3] = s1.b[0];     
00124     
00125     d2.b[0] = s2.b[3];
00126     d2.b[1] = s2.b[2];
00127     d2.b[2] = s2.b[1];
00128     d2.b[3] = s2.b[0];
00129     
00130     *( ( Cigi_uint32 *)dest) = d2.i;
00131     *( ( Cigi_uint32 *)dest + 1) = d1.i;
00132 }
00133 
00134 // ====================================================================
00135 // CigiSwap8
00136 // ====================================================================
00137 CIGI_SPEC void CigiCopy8( void *dest, const void *src)
00138 {
00139    Cigi_uint32 *tDest = (Cigi_uint32 *)dest;
00140    Cigi_uint32 *tSrc = (Cigi_uint32 *)src;
00141 
00142    *tDest++ = *tSrc++;
00143    *tDest = *tSrc;
00144 }
00145 

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7