6#ifndef _ZFI_ZFCoreUtilMath_h_
7#define _ZFI_ZFCoreUtilMath_h_
16template<
typename T_Number>
18 ZF_IN T_Number
const &n0
19 ,
ZF_IN T_Number
const &n1
21 return ((n0 > n1) ? n0 : n1);
26template<
typename T_Number>
28 ZF_IN T_Number
const &n0
29 ,
ZF_IN T_Number
const &n1
31 return ((n0 < n1) ? n0 : n1);
36template<
typename T_Number>
38 return ((n0 < 0) ? (T_Number)(0 - n0) : n0);
45template<
typename T_Number>
47 ZF_IN T_Number
const &n
48 ,
ZF_IN T_Number
const &nMin
49 ,
ZF_IN T_Number
const &nMax
65template<
typename T_Number>
67 ZF_IN T_Number
const &start
68 ,
ZF_IN T_Number
const &end
71 return (T_Number)(start + (end - start) * progress);
77template<
typename T_zf
float>
79 return (T_zffloat)((v >= 0)
85template<
typename T_zf
float>
87 return (T_zffloat)((v >= 0)
93template<
typename T_zf
float>
95 return (T_zffloat)(
zfint)((v >= 0) ? (v + 0.5f) : (v - 0.5f));
106template<
typename T_
int>
108 return (T_int)(range *
zfmRand());
113template<
typename T_
int>
115 ZF_IN T_int
const &start
116 ,
ZF_IN T_int
const &end
118 return start + (T_int)((end - start) *
zfmRand());
122template<
typename T_Element,
typename T_Holder>
124 ZF_IN T_Holder &holder
131 T_Element pivot = holder[left];
133 while(left < right) {
134 while(left < right) {
135 cmpTmp = comparer(pivot, holder[right]);
137 holder[left] = pivot;
140 else if(cmpTmp == cmpToken) {
145 holder[left] = holder[right];
146 while(left < right) {
147 cmpTmp = comparer(holder[left], pivot);
149 holder[right] = pivot;
152 else if(cmpTmp == cmpToken) {
157 holder[right] = holder[left];
159 holder[left] = pivot;
165template<
typename T_Element,
typename T_Holder>
167 ZF_IN T_Holder &holder
173 zfindex mid = _ZFP_zfmSort<T_Element>(holder, left, right, comparer,
zftrue);
191template<
typename T_Element,
typename T_Holder>
193 ZF_IN T_Holder &holder
199 zfindex mid = _ZFP_zfmSort<T_Element>(holder, left, right, comparer,
zffalse);
common comparer for ZFFramework
#define ZFComparerDefault
default comparer for common types, see ZFComparer
Definition ZFComparer.h:250
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define ZF_IN_OPT
dummy macro that shows the param used as optional input
Definition ZFCoreTypeDef_ClassType.h:184
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
#define zftrue
bool true type
Definition ZFCoreTypeDef_CoreType.h:107
_ZFT_t_zfint zfint
same as int, see zfindex
Definition ZFCoreTypeDef_CoreType.h:165
#define zfindexMax()
(zfindex)-1, indicate a max index value, see zfindex
Definition ZFCoreTypeDef_CoreType.h:159
_zft_zffloat zffloat
same as float, see zfindex
Definition ZFCoreTypeDef_CoreType.h:183
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
ZFCompareResult
compare result of two ZFObjects
Definition ZFCoreTypeDef_OtherType.h:28
@ ZFCompareSmaller
Definition ZFCoreTypeDef_OtherType.h:30
@ ZFCompareUncomparable
Definition ZFCoreTypeDef_OtherType.h:29
@ ZFCompareGreater
Definition ZFCoreTypeDef_OtherType.h:32
T_Number const & zfmMin(T_Number const &n0, T_Number const &n1)
well known MIN
Definition ZFCoreUtilMath.h:27
zffloat zfmRand(void)
return a random float in range [0, 1]
T_zffloat zfmRoundDown(const T_zffloat &v)
util method to round up/down or round a float value
Definition ZFCoreUtilMath.h:86
zfbool zfmSortReversely(T_Holder &holder, zfindex left, zfindex right, typename ZFComparer< T_Element >::Comparer comparer=_ZFP_ZFComparerDefault)
sort with custom comparer in range [left, right], holder must support operator []
Definition ZFCoreUtilMath.h:192
T_Number zfmAbs(T_Number const &n0)
well known ABS
Definition ZFCoreUtilMath.h:37
T_Number zfmApplyProgress(T_Number const &start, T_Number const &end, zffloat progress)
return value at progress in range [start, end], progress must in range [0, 1]
Definition ZFCoreUtilMath.h:66
T_Number zfmApplyRange(T_Number const &n, T_Number const &nMin, T_Number const &nMax)
return n if in range [nMin, nMax], return edge value otherwise
Definition ZFCoreUtilMath.h:46
T_zffloat zfmRoundUp(const T_zffloat &v)
util method to round up/down or round a float value
Definition ZFCoreUtilMath.h:78
zfbool zfmSort(T_Holder &holder, zfindex left, zfindex right, typename ZFComparer< T_Element >::Comparer comparer=_ZFP_ZFComparerDefault)
sort with custom comparer in range [left, right], holder must support operator []
Definition ZFCoreUtilMath.h:166
T_Number const & zfmMax(T_Number const &n0, T_Number const &n1)
well known MAX
Definition ZFCoreUtilMath.h:17
T_zffloat zfmRound(const T_zffloat &v)
util method to round up/down or round a float value
Definition ZFCoreUtilMath.h:94
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
ZFCompareResult(* Comparer)(T_Comparable const &e0, T_Comparable2 const &e1)
see ZFComparer
Definition ZFCoreTypeDef_OtherType.h:130
static T_zffloat v(void)
template version of zffloatEpsilon
Definition ZFCoreTypeDef_CoreIntType.h:159