/* Copyright (C) 2017 Daniel Schultz This file is part of FLINT. FLINT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See . */ #include #include #include "flint.h" #include "mpoly.h" void mpoly_pack_monomials_tight(ulong * exp1, const ulong * exp2, slong len, const slong * mults, slong nfields, slong bits) { slong i, j, shift; ulong e, mask = (-UWORD(1)) >> (FLINT_BITS - bits); for (i = 0; i < len; i++) { shift = (nfields - 1)*bits; e = (exp2[i] >> shift) & mask; for (j = nfields - 2; j >= 0; j--) { shift -= bits; e *= mults[j]; e += (exp2[i] >> shift) & mask; } exp1[i] = e; } }