blind

suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log | Files | Refs | README | LICENSE

commit c91c5cb8e892f1c19c970cef033cc03c9f47f98a
parent b3042abffb9f4e4c7edd16934af99716bcdc2901
Author: Mattias Andrée <maandree@kth.se>
Date:   Sun,  2 Jul 2017 17:30:22 +0200

Add mod to blind-arithm

Signed-off-by: Mattias Andrée <maandree@kth.se>

Diffstat:
man/blind-arithm.1 | 4++++
src/blind-arithm.c | 1+
src/video-math.h | 16++++++++++++++++
3 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/man/blind-arithm.1 b/man/blind-arithm.1 @@ -41,6 +41,10 @@ Calculate the product of the operands. .B div Divide the left-hand operand by the right-hand operand. .TP +.B mod +Calculate the modulus of left-hand operand and the right-hand operand. +The result is always non-negative. +.TP .B exp Raise the left-hand operand to the .IR n th diff --git a/src/blind-arithm.c b/src/blind-arithm.c @@ -16,6 +16,7 @@ typedef void (*process_func)(struct stream *left, struct stream *right, size_t n X(sub, *lh -= rh, PIXFMT, TYPE)\ X(mul, *lh *= rh, PIXFMT, TYPE)\ X(div, *lh /= rh, PIXFMT, TYPE)\ + X(mod, *lh = posmod(*lh, rh), PIXFMT, TYPE)\ X(exp, *lh = pow(*lh, rh), PIXFMT, TYPE)\ X(log, *lh = log2(*lh) / log2(rh), PIXFMT, TYPE)\ X(min, *lh = MIN(*lh, rh), PIXFMT, TYPE)\ diff --git a/src/video-math.h b/src/video-math.h @@ -17,6 +17,20 @@ nnpowf(float a, float b) return neg ? -a : a; } +static inline double +posmod(double a, double b) +{ + double x = fmod(a, b); + return x < 0 ? x + b : x; +} + +static inline float +posmodf(float a, float b) +{ + float x = fmodf(a, b); + return x < 0 ? x + b : x; +} + #define GENERIC(TYPE, FUNC, ...)\ TYPE: FUNC(__VA_ARGS__),\ TYPE *: FUNC(__VA_ARGS__),\ @@ -52,6 +66,8 @@ nnpowf(float a, float b) #define g_isinf(...) MATH_GENERIC_1(isinf, __VA_ARGS__) #define g_isfinite(...) MATH_GENERIC_1(isfinite, __VA_ARGS__) #define nnpow(...) MATH_GENERIC_N(nnpow, __VA_ARGS__) +#define mod(...) MATH_GENERIC_N(fmod, __VA_ARGS__) +#define posmod(...) MATH_GENERIC_N(posmod, __VA_ARGS__) #define srgb_encode(...) BLIND_GENERIC_1(srgb_encode, __VA_ARGS__) #define srgb_decode(...) BLIND_GENERIC_1(srgb_decode, __VA_ARGS__)