Macaulay2 Engine
Loading...
Searching...
No Matches

◆ unchecked_mult()

void ResMonoidSparse::unchecked_mult ( res_const_packed_monomial a,
res_const_packed_monomial b,
res_packed_monomial result ) const
inline

Definition at line 337 of file res-moninfo-sparse.hpp.

340 {
341 // a: mFirstVar + degA
342 // b: mFirstVar + degB
343 // result size is mFirstVar + degA + degB = size(a) + size(b) - mFirstVar
344 ncalls_mult++;
345 result[0] = a[0] + b[0] - mFirstVar;
346 for (int i = 1; i < mFirstVar; ++i) result[i] = a[i] + b[i];
347 // Now we merge the rest
348 const int* v1 = a + mFirstVar;
349 const int* v2 = b + mFirstVar;
350 const int* end1 = a + *a;
351 const int* end2 = b + *b;
352 int* res = result + mFirstVar;
353 if (v1 == end1)
354 {
355 while (v2 != end2) *res++ = *v2++;
356 return;
357 }
358 if (v2 == end2)
359 {
360 while (v1 != end1) *res++ = *v1++;
361 return;
362 }
363 for (;;)
364 {
365 if (*v1 >= *v2)
366 {
367 *res++ = *v1;
368 v1++;
369 if (v1 == end1)
370 {
371 while (v2 != end2) *res++ = *v2++;
372 return;
373 }
374 }
375 else
376 {
377 *res++ = *v2;
378 v2++;
379 if (v2 == end2)
380 {
381 while (v1 != end1) *res++ = *v1++;
382 return;
383 }
384 }
385 }
386 }
unsigned long ncalls_mult
VALGRIND_MAKE_MEM_DEFINED & result(result)

References mFirstVar, ncalls_mult, and result().

Referenced by mult().