add HLH_Ref
[HLH_utils.git] / HLH_RoundU32.h
blob04e44168a9b294ba58d963e1de1cfda9c112a883
1 /*******************************************************************************
2 * File : ..\utils\HLH_RoundU32.h
3 *
4 * Author : Henry He
5 * Created : 2009-10-14 14:26:15
6 * Description :
7 ******************************************************************************/
9 #ifndef __HLH_ROUNDU32_INC_20091014_142615_HENRY__
10 #define __HLH_ROUNDU32_INC_20091014_142615_HENRY__
13 /*******************************************************************************
14 * Desc : Includes Files
15 ******************************************************************************/
16 #include "HLH_utils/typedef.h"
19 /*******************************************************************************
20 * Desc : Macro Definations
21 ******************************************************************************/
22 #define HLH_ROUNDU32_RANGE ( ~ ( (UINT32) 0 ) )
23 #define HLH_ROUNDU32_HALF ( HLH_ROUNDU32_RANGE / 2 )
26 /*******************************************************************************
27 * Desc : Type Definations
28 ******************************************************************************/
31 /*******************************************************************************
32 * Desc : Global Variables
33 ******************************************************************************/
36 /*******************************************************************************
37 * Desc : Classes
38 ******************************************************************************/
40 ////////////////////////////////////////////////////////////////////////////////
41 // Class to handle round up counter
43 class HLH_RoundU32
45 public:
46 /******************************************************************************
47 * Desc : Constructor / Deconstructor
48 ******************************************************************************/
49 HLH_RoundU32 (UINT32 unVal = 0) { m_unVal = unVal; }
51 ~HLH_RoundU32 () {}
53 public:
54 /******************************************************************************
55 * Desc : Convertions
56 ******************************************************************************/
57 UINT32 GetUINT32 ();
58 operator UINT32 () const { return m_unVal; }
59 operator float () const { return (float) m_unVal; }
60 operator double () const { return (double) m_unVal; }
62 public:
63 /******************************************************************************
64 * Desc : Operators
65 ******************************************************************************/
66 // Preposed add
67 HLH_RoundU32 &operator ++ () { ++m_unVal; return *this; }
69 // Preposed sub
70 HLH_RoundU32 &operator -- () { --m_unVal; return *this; }
72 // Postpositioned add
73 HLH_RoundU32 operator ++ (int) { return HLH_RoundU32 (m_unVal++); }
75 // Postpositioned sub
76 HLH_RoundU32 operator -- (int) { return HLH_RoundU32 (m_unVal--); }
78 HLH_RoundU32 operator + (const HLH_RoundU32 &zhrVal) const { return HLH_RoundU32 (m_unVal + zhrVal.m_unVal); }
79 HLH_RoundU32 operator - (const HLH_RoundU32 &zhrVal) const { return HLH_RoundU32 (m_unVal - zhrVal.m_unVal); }
80 HLH_RoundU32 operator * (const HLH_RoundU32 &zhrVal) const { return HLH_RoundU32 (m_unVal * zhrVal.m_unVal); }
81 HLH_RoundU32 operator / (const HLH_RoundU32 &zhrVal) const { return HLH_RoundU32 (m_unVal / zhrVal.m_unVal); }
82 HLH_RoundU32 operator % (const HLH_RoundU32 &zhrVal) const { return HLH_RoundU32 (m_unVal % zhrVal.m_unVal); }
84 HLH_RoundU32 &operator = (UINT32 unVal) { m_unVal = unVal; return *this; }
86 HLH_RoundU32 &operator += (const HLH_RoundU32 &zhrVal) { m_unVal += zhrVal.m_unVal; return *this; }
87 HLH_RoundU32 &operator -= (const HLH_RoundU32 &zhrVal) { m_unVal -= zhrVal.m_unVal; return *this; }
88 HLH_RoundU32 &operator *= (const HLH_RoundU32 &zhrVal) { m_unVal *= zhrVal.m_unVal; return *this; }
89 HLH_RoundU32 &operator /= (const HLH_RoundU32 &zhrVal) { m_unVal /= zhrVal.m_unVal; return *this; }
90 HLH_RoundU32 &operator %= (const HLH_RoundU32 &zhrVal) { m_unVal %= zhrVal.m_unVal; return *this; }
92 bool operator < (const HLH_RoundU32 &zhrVal) const;
93 bool operator > (const HLH_RoundU32 &zhrVal) const;
94 bool operator <= (const HLH_RoundU32 &zhrVal) const;
95 bool operator >= (const HLH_RoundU32 &zhrVal) const;
97 bool operator == (const HLH_RoundU32 &zhrVal) const { return ( m_unVal == zhrVal.m_unVal ); }
98 bool operator != (const HLH_RoundU32 &zhrVal) const { return ( m_unVal != zhrVal.m_unVal ); }
100 public:
101 UINT32 m_unVal;
107 /******************************************************************************
108 * Desc : Operators
109 ******************************************************************************/
112 inline bool HLH_RoundU32::operator < (const HLH_RoundU32 &zhrVal) const
115 UINT32 unDivide;
116 UINT32 unVal;
118 unVal = zhrVal.m_unVal;
119 unDivide = unVal + HLH_ROUNDU32_HALF;
121 if (unVal < unDivide) {
122 return ( (m_unVal < unVal) || (m_unVal > unDivide) );
123 } else {
124 return (m_unVal > unDivide && m_unVal < unVal);
129 inline bool HLH_RoundU32::operator > (const HLH_RoundU32 &zhrVal) const
132 UINT32 unDivide;
133 UINT32 unVal;
135 unVal = zhrVal.m_unVal;
136 unDivide = unVal + HLH_ROUNDU32_HALF;
138 if (unVal < unDivide) {
139 return ( m_unVal > unVal && m_unVal <= unDivide );
140 } else {
141 return ( m_unVal <= unDivide || m_unVal > unVal );
146 inline bool HLH_RoundU32::operator <= (const HLH_RoundU32 &zhrVal) const
149 UINT32 unDivide;
150 UINT32 unVal;
152 unVal = zhrVal.m_unVal;
153 unDivide = unVal + HLH_ROUNDU32_HALF;
155 if (unVal < unDivide) {
156 return ( (m_unVal <= unVal) || (m_unVal > unDivide) );
157 } else {
158 return (m_unVal > unDivide && m_unVal <= unVal);
163 inline bool HLH_RoundU32::operator >= (const HLH_RoundU32 &zhrVal) const
166 UINT32 unDivide;
167 UINT32 unVal;
169 unVal = zhrVal.m_unVal;
170 unDivide = unVal + HLH_ROUNDU32_HALF;
172 if (unVal < unDivide) {
173 return ( m_unVal >= unVal && m_unVal <= unDivide );
174 } else {
175 return ( m_unVal <= unDivide || m_unVal >= unVal);
184 #endif /* __HLH_ROUNDU32_INC_20091014_142615_HENRY__ */