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));
114template<
typename T_
int>
121template<
typename T_
int>
123 ZF_IN T_int
const &start
124 ,
ZF_IN T_int
const &end
126 return start + (T_int)((end - start) *
zfmRand());
130template<
typename T_Element,
typename T_Holder>
132 ZF_IN T_Holder &holder
139 T_Element pivot = holder[left];
141 while(left < right) {
142 while(left < right) {
143 cmpTmp = comparer(pivot, holder[right]);
145 holder[left] = pivot;
148 else if(cmpTmp == cmpToken) {
153 holder[left] = holder[right];
154 while(left < right) {
155 cmpTmp = comparer(holder[left], pivot);
157 holder[right] = pivot;
160 else if(cmpTmp == cmpToken) {
165 holder[right] = holder[left];
167 holder[left] = pivot;
173template<
typename T_Element,
typename T_Holder>
175 ZF_IN T_Holder &holder
181 zfindex mid = _ZFP_zfmSort<T_Element>(holder, left, right, comparer,
zftrue);
199template<
typename T_Element,
typename T_Holder>
201 ZF_IN T_Holder &holder
207 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
zfint zfmRand(void)
return a random integer in range [0, zfmRandMax]
zfint zfmRandMax(void)
max value for zfmRand
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:200
T_Number zfmAbs(T_Number const &n0)
well known ABS
Definition ZFCoreUtilMath.h:37
zffloat zfmRandFloat(void)
return a random float in range [0, 1]
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:174
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