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

◆ vec_interchange_rows()

template<typename CoeffRing>
void SMat< CoeffRing >::vec_interchange_rows ( sparsevec *& v,
size_t r1,
size_t r2 ) const
private

Definition at line 383 of file smat.hpp.

386{
387 sparsevec *p;
388 if (i == j) return;
389 if (v == 0) return;
390 if (i < j)
391 {
392 size_t tmp = i;
393 i = j;
394 j = tmp;
395 }
396 // So now i > j.
398 head.next = v;
401 for (p = &head; p->next != 0; p = p->next)
402 if (p->next->row <= i) break;
403 vec1 = p;
404 for (; p->next != 0; p = p->next)
405 if (p->next->row <= j) break;
406 vec2 = p;
407 if (vec1->next != 0 && vec1->next->row == i)
408 {
409 if (vec2->next != 0 && vec2->next->row == j)
410 {
411 std::swap(vec1->next->coeff, vec2->next->coeff);
412 return;
413 }
414 }
415 else if (vec2->next != 0 && vec2->next->row == j)
416 {
417 sparsevec *tmp = vec1;
418 vec1 = vec2;
419 vec2 = tmp;
420 j = i; // Used below.
421 }
422 else
423 return;
424
425 sparsevec *tmp = vec1->next;
426 if (vec2 != tmp)
427 {
428 vec1->next = tmp->next;
429 tmp->next = vec2->next;
430 vec2->next = tmp;
431 }
432 tmp->row = j;
433 v = head.next;
434}
Definition smat.hpp:43
void swap(mpfr::mpreal &x, mpfr::mpreal &y)
Definition mpreal.h:3244

References SMat< ACoeffRing >::sparsevec::coeff, SMat< ACoeffRing >::sparsevec::next, p, SMat< ACoeffRing >::sparsevec::row, and std::swap().

Referenced by interchange_rows().