📄 portability.h
字号:
/* From Andrey Hristov based on doubleget */#define floatget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float))#define floatstore float4store#define float4store(V,M) memcpy((char*) (V),(char*) (&M),sizeof(float))#define float8store(V,M) doublestore((V),(M))#endif /* __i386__ */ #ifndef sint2korr#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ ((int16) ((int16) (A)[1]) << 8))#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ (((uint32) 255L << 24) | \ (((uint32) (uchar) (A)[2]) << 16) |\ (((uint32) (uchar) (A)[1]) << 8) | \ ((uint32) (uchar) (A)[0])) : \ (((uint32) (uchar) (A)[2]) << 16) |\ (((uint32) (uchar) (A)[1]) << 8) | \ ((uint32) (uchar) (A)[0])))#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ (((int32) ((uchar) (A)[1]) << 8)) +\ (((int32) ((uchar) (A)[2]) << 16)) +\ (((int32) ((int16) (A)[3]) << 24)))#define sint8korr(A) (longlong) uint8korr(A)#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ ((uint16) ((uchar) (A)[1]) << 8))#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16))#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24))#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24)) +\ (((ulonglong) ((uchar) (A)[4])) << 32))/* From Andrey Hristov, based on uint5korr */#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24)) +\ (((ulonglong) ((uchar) (A)[4])) << 32)) +\ (((ulonglong) ((uchar) (A)[5])) << 40))#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24)) +\ (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ (((uint32) ((uchar) (A)[5])) << 8) +\ (((uint32) ((uchar) (A)[6])) << 16) +\ (((uint32) ((uchar) (A)[7])) << 24))) << 32))#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ *((uchar*) (T)) = (uchar)(def_temp); \ *((uchar*) (T+1)) = (uchar)((def_temp >> 8)); } while (0)#define int3store(T,A) do { /*lint -save -e734 */\ *(((char *)(T))) = (char) ((A));\ *(((char *)(T))+1) = (char) (((A) >> 8));\ *(((char *)(T))+2) = (char) (((A) >> 16)); \ /*lint -restore */} while (0)#define int4store(T,A) do { \ *(((char *)(T))) = (char) ((A));\ *(((char *)(T))+1) = (char) (((A) >> 8));\ *(((char *)(T))+2) = (char) (((A) >> 16));\ *(((char *)(T))+3) = (char) (((A) >> 24)); } while (0)#define int5store(T,A) do { \ *(((char *)(T))) = (char)((A));\ *(((char *)(T))+1) = (char)(((A) >> 8));\ *(((char *)(T))+2) = (char)(((A) >> 16));\ *(((char *)(T))+3) = (char)(((A) >> 24)); \ *(((char *)(T))+4) = (char)(((A) >> 32)); } while (0)/* Based on int5store() from Andrey Hristov */#define int6store(T,A) do { \ *(((char *)(T))) = (char)((A));\ *(((char *)(T))+1) = (char)(((A) >> 8));\ *(((char *)(T))+2) = (char)(((A) >> 16));\ *(((char *)(T))+3) = (char)(((A) >> 24)); \ *(((char *)(T))+4) = (char)(((A) >> 32)); \ *(((char *)(T))+5) = (char)(((A) >> 40)); } while (0)#define int8store(T,A) { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \ int4store((T),def_temp); \ int4store((T+4),def_temp2); \ }#ifdef WORDS_BIGENDIAN#define float4store(T,A) do { \ *(((char *)(T))) = (char) ((char *) &A)[3];\ *(((char *)(T))+1) = (char) ((char *) &A)[2];\ *(((char *)(T))+2) = (char) ((char *) &A)[1];\ *(((char *)(T))+3) = (char) ((char *) &A)[0]; } while (0)#define float4get(V,M) do { float def_temp;\ ((char*) &def_temp)[0] = (M)[3];\ ((char*) &def_temp)[1] = (M)[2];\ ((char*) &def_temp)[2] = (M)[1];\ ((char*) &def_temp)[3] = (M)[0];\ (V)=def_temp; } while (0)#define float8store(T,V) do { \ *(((char *)(T))) = (char) ((char *) &(V))[7];\ *(((char *)(T))+1) = (char) ((char *) &(V))[6];\ *(((char *)(T))+2) = (char) ((char *) &(V))[5];\ *(((char *)(T))+3) = (char) ((char *) &(V))[4];\ *(((char *)(T))+4) = (char) ((char *) &(V))[3];\ *(((char *)(T))+5) = (char) ((char *) &(V))[2];\ *(((char *)(T))+6) = (char) ((char *) &(V))[1];\ *(((char *)(T))+7) = (char) ((char *) &(V))[0]; } while (0)#define float8get(V,M) do { double def_temp;\ ((char*) &def_temp)[0] = (M)[7];\ ((char*) &def_temp)[1] = (M)[6];\ ((char*) &def_temp)[2] = (M)[5];\ ((char*) &def_temp)[3] = (M)[4];\ ((char*) &def_temp)[4] = (M)[3];\ ((char*) &def_temp)[5] = (M)[2];\ ((char*) &def_temp)[6] = (M)[1];\ ((char*) &def_temp)[7] = (M)[0];\ (V) = def_temp; \ } while (0)#else#define float4get(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float))#define float4store(V,M) memcpy((char*) (V),(char*) (&M),sizeof(float))#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)#define doublestore(T,V) do { \ *(((char *)(T)))= ((char *) &(V))[4];\ *(((char *)(T))+1)=(char) ((char *) &(V))[5];\ *(((char *)(T))+2)=(char) ((char *) &(V))[6];\ *(((char *)(T))+3)=(char) ((char *) &(V))[7];\ *(((char *)(T))+4)=(char) ((char *) &(V))[0];\ *(((char *)(T))+5)=(char) ((char *) &(V))[1];\ *(((char *)(T))+6)=(char) ((char *) &(V))[2];\ *(((char *)(T))+7)=(char) ((char *) &(V))[3];} while (0)#define doubleget(V,M) do { double def_temp;\ ((char*) &def_temp)[0]=(M)[4];\ ((char*) &def_temp)[1]=(M)[5];\ ((char*) &def_temp)[2]=(M)[6];\ ((char*) &def_temp)[3]=(M)[7];\ ((char*) &def_temp)[4]=(M)[0];\ ((char*) &def_temp)[5]=(M)[1];\ ((char*) &def_temp)[6]=(M)[2];\ ((char*) &def_temp)[7]=(M)[3];\ (V) = def_temp; } while (0)#endif /* __FLOAT_WORD_ORDER */#define float8get(V,M) doubleget((V),(M))#define float8store(V,M) doublestore((V),(M))#endif /* WORDS_BIGENDIAN */#endif /* sint2korr *//* Define-funktions for reading and storing in machine format from/to short/long to/from some place in memory V should be a (not register) variable, M is a pointer to byte */#ifdef WORDS_BIGENDIAN#define ushortget(V,M) { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ ((uint16) ((uint16) (M)[0]) << 8)); }#define shortget(V,M) { V = (short) (((short) ((uchar) (M)[1]))+\ ((short) ((short) (M)[0]) << 8)); }#define longget(V,M) do { int32 def_temp;\ ((char*) &def_temp)[0]=(M)[0];\ ((char*) &def_temp)[1]=(M)[1];\ ((char*) &def_temp)[2]=(M)[2];\ ((char*) &def_temp)[3]=(M)[3];\ (V)=def_temp; } while (0)#define ulongget(V,M) do { uint32 def_temp;\ ((char*) &def_temp)[0]=(M)[0];\ ((char*) &def_temp)[1]=(M)[1];\ ((char*) &def_temp)[2]=(M)[2];\ ((char*) &def_temp)[3]=(M)[3];\ (V)=def_temp; } while (0)#define shortstore(T,A) do { \ uint def_temp=(uint) (A) ;\ *(((char *)(T))+1)=(char)(def_temp); \ *(((char *)(T))+0)=(char)(def_temp >> 8); } while (0)#define longstore(T,A) do { \ *(((char *)(T))+3)=(char)((A));\ *(((char *)(T))+2)=(char)(((A) >> 8));\ *(((char *)(T))+1)=(char)(((A) >> 16));\ *(((char *)(T))+0)=(char)(((A) >> 24)); } while (0)#define doubleget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(double))#define doublestore(T,V) memcpy((char*) (T),(char*) &(V),sizeof(double))#define longlongget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(ulonglong))#define longlongstore(T,V) memcpy((char*) (T),(char*) &(V),sizeof(ulonglong))#else#define ushortget(V,M) { V = uint2korr((M)); }#define shortget(V,M) { V = sint2korr((M)); }#define longget(V,M) { V = sint4korr((M)); }#define ulongget(V,M) { V = uint4korr((M)); }#define shortstore(T,V) int2store((T),(V))#define longstore(T,V) int4store((T),(V))#ifndef doubleget#define doubleget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(double))#define doublestore(T,V) memcpy((char*) (T),(char*) &(V),sizeof(double))#endif /* doubleget */#define longlongget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(ulonglong))#define longlongstore(T,V) memcpy((char*) (T),(char*) &(V),sizeof(ulonglong))#endif /* WORDS_BIGENDIAN */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -