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