|
|
|
@@ -47,6 +47,10 @@ AVInteger av_sub_i(AVInteger a, AVInteger b){ |
|
|
|
return a; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* returns the rounded down value of the logarithm of base 2 of the given AVInteger. |
|
|
|
* this is simply the index of the most significant bit which is 1. Or 0 of all bits are 0 |
|
|
|
*/ |
|
|
|
int av_log2_i(AVInteger a){ |
|
|
|
int i; |
|
|
|
|
|
|
|
@@ -78,6 +82,9 @@ AVInteger av_mul_i(AVInteger a, AVInteger b){ |
|
|
|
return out; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* returns 0 if a==b, 1 if a>b and -1 if a<b. |
|
|
|
*/ |
|
|
|
int av_cmp_i(AVInteger a, AVInteger b){ |
|
|
|
int i; |
|
|
|
int v= (int16_t)a.v[AV_INTEGER_SIZE-1] - (int16_t)b.v[AV_INTEGER_SIZE-1]; |
|
|
|
@@ -90,6 +97,10 @@ int av_cmp_i(AVInteger a, AVInteger b){ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* bitwise shift. |
|
|
|
* @param s the number of bits by which the value should be shifted right, may be negative for shifting left |
|
|
|
*/ |
|
|
|
AVInteger av_shr_i(AVInteger a, int s){ |
|
|
|
AVInteger out; |
|
|
|
int i; |
|
|
|
@@ -104,6 +115,10 @@ AVInteger av_shr_i(AVInteger a, int s){ |
|
|
|
return out; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* returns a % b. |
|
|
|
* @param quot a/b will be stored here |
|
|
|
*/ |
|
|
|
AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ |
|
|
|
int i= av_log2_i(a) - av_log2_i(b); |
|
|
|
AVInteger quot_temp; |
|
|
|
@@ -128,12 +143,18 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ |
|
|
|
return a; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* returns a/b. |
|
|
|
*/ |
|
|
|
AVInteger av_div_i(AVInteger a, AVInteger b){ |
|
|
|
AVInteger quot; |
|
|
|
av_mod_i(", a, b); |
|
|
|
return quot; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* converts the given int64_t to an AVInteger. |
|
|
|
*/ |
|
|
|
AVInteger av_int2i(int64_t a){ |
|
|
|
AVInteger out; |
|
|
|
int i; |
|
|
|
@@ -145,6 +166,11 @@ AVInteger av_int2i(int64_t a){ |
|
|
|
return out; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* converts the given AVInteger to an int64_t. |
|
|
|
* if the AVInteger is too large to fit into an int64_t, |
|
|
|
* then only the least significant 64bit will be used |
|
|
|
*/ |
|
|
|
int64_t av_i2int(AVInteger a){ |
|
|
|
int i; |
|
|
|
int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1]; |
|
|
|
|