Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfloatobj.h
Go to the documentation of this file.
00001 #pragma once 00002 00003 #if defined(_M_IX86) 00004 00005 FORCEINLINE 00006 BOOL 00007 _FLOATOBJ_Equal(FLOATOBJ *pf1, FLOATOBJ *pf2) 00008 { 00009 EFLOAT_S *pef1 = (EFLOAT_S*)pf1; 00010 EFLOAT_S *pef2 = (EFLOAT_S*)pf2; 00011 return (pef1->lMant == pef2->lMant && pef1->lExp == pef2->lExp); 00012 } 00013 00014 FORCEINLINE 00015 LONG 00016 _FLOATOBJ_GetLong(FLOATOBJ *pf) 00017 { 00018 EFLOAT_S *pef = (EFLOAT_S*)pf; 00019 return pef->lMant >> (32 - pef->lExp); 00020 } 00021 00022 FORCEINLINE 00023 LONG 00024 _FLOATOBJ_GetFix(FLOATOBJ *pf) 00025 { 00026 EFLOAT_S *pef = (EFLOAT_S*)pf; 00027 LONG Shift = (28 - pef->lExp); 00028 return (Shift >= 0 ? pef->lMant >> Shift : pef->lMant << -Shift); 00029 } 00030 00031 FORCEINLINE 00032 BOOL 00033 _FLOATOBJ_IsLong(FLOATOBJ *pf) 00034 { 00035 EFLOAT_S *pef = (EFLOAT_S*)pf; 00036 ULONG Shift = 32 - pef->lExp; 00037 if (Shift > 31) return FALSE; 00038 return (((pef->lMant >> Shift) << Shift) == pef->lMant); 00039 } 00040 00041 FORCEINLINE 00042 BOOL 00043 _FLOATOBJ_Equal0(FLOATOBJ *pf) 00044 { 00045 EFLOAT_S *pef = (EFLOAT_S*)pf; 00046 return (pef->lMant == 0 && pef->lExp == 0); 00047 } 00048 00049 FORCEINLINE 00050 BOOL 00051 _FLOATOBJ_Equal1(FLOATOBJ *pf) 00052 { 00053 EFLOAT_S *pef = (EFLOAT_S*)pf; 00054 return (pef->lMant == 0x40000000 && pef->lExp == 2); 00055 } 00056 00057 extern const FLOATOBJ gef0; 00058 extern const FLOATOBJ gef1; 00059 extern const FLOATOBJ gef16; 00060 00061 #define FLOATOBJ_0 {0x00000000, 0x00000000} 00062 #define FLOATOBJ_1 {0x40000000, 0x00000002} 00063 #define FLOATOBJ_16 {0x40000000, 0x00000006} 00064 #define FLOATOBJ_1_16 {0x40000000, 0xfffffffe} 00065 00066 #define FLOATOBJ_Set0(fo) (fo)->ul1 = 0; (fo)->ul2 = 0; 00067 #define FLOATOBJ_Set1(fo) (fo)->ul1 = 0x40000000; (fo)->ul2 = 2; 00068 00069 #else 00070 00071 #define _FLOATOBJ_Equal(pf,pf1) (*(pf) == *(pf1)) 00072 #define _FLOATOBJ_GetLong(pf) ((LONG)*(pf)) 00073 #define _FLOATOBJ_IsLong(pf) ((FLOAT)((LONG)*(pf)) == *(pf)) 00074 #define _FLOATOBJ_Equal0(pf) (*(pf) == 0.) 00075 #define _FLOATOBJ_Equal1(pf) (*(pf) == 1.) 00076 #define _FLOATOBJ_GetFix(pf) ((LONG)(*(pf) * 16.)) 00077 00078 #define FLOATOBJ_0 0. 00079 #define FLOATOBJ_1 1. 00080 #define FLOATOBJ_16 16. 00081 #define FLOATOBJ_1_16 (1./16.) 00082 00083 #define gef0 FLOATOBJ_0 00084 #define gef1 FLOATOBJ_1 00085 #define gef16 FLOATOBJ_16 00086 00087 #define FLOATOBJ_Set0(fo) *(fo) = 0; 00088 #define FLOATOBJ_Set1(fo) *(fo) = 1; 00089 00090 #endif Generated on Fri May 25 2012 04:36:30 for ReactOS by
1.7.6.1
|