Home Manual Reference Source Test Repository

src/0-legacy/others/wrap/wrapbin.js

/**
 * Wrapper for binary operator.
 * Ensures
 *
 *     i >= j
 *     i0, j0, k0 >= 0
 *
 */

export function wrapbin (fn){

	return function(a, i0, i1, b, j0, j1, c, k0, k1){

		var i, j, k;

		k0 = Math.max(0, k0);
		k = k1 - k0;

		i0 = Math.max(0, i0, i1 - k);
		j0 = Math.max(0, j0, j1 - k);
		i = i1 - i0;
		j = j1 - j0;

		if(i < j)
		return fn(b, j0, j1, a, i0, i1, c, k0, k1);

		else
		return fn(a, i0, i1, b, j0, j1, c, k0, k1);
	};
}