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

◆ vec_row_op()

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

Definition at line 614 of file smat.hpp.

619{
620 sparsevec *p;
621 sparsevec *vec2 = 0;
622 for (p = v; p != 0; p = p->next)
623 if (p->row == r2)
624 {
625 vec2 = p;
626 break;
627 }
628 if (vec2 == 0) return;
629 typename CoeffRing::Element c(ring());
630 ring().set_zero(c);
631 ring().mult(c, vec2->coeff, a);
632 if (ring().is_zero(c))
633 {
634 return; // nothing to change
635 }
636 // Now add c to the r1'th row of v
638 head.next = v;
639 for (p = &head; p->next != 0; p = p->next)
640 if (p->next->row <= r1) break;
641 if (p->next == 0 || p->next->row < r1)
642 {
643 // Make a new node
644 sparsevec *w = vec_new();
645 w->next = p->next;
646 w->row = r1;
647 ring().init_set(w->coeff, c);
648 p->next = w;
649 }
650 else
651 {
652 ring().add(p->next->coeff, p->next->coeff, c);
653 if (ring().is_zero(p->next->coeff))
654 {
655 sparsevec *tmp = p->next;
656 p->next = tmp->next;
658 }
659 }
660 v = head.next;
661}
const CoeffRing & ring() const
Definition smat.hpp:104
sparsevec * vec_new() const
Definition smat.hpp:281
bool is_zero() const
Definition smat.hpp:1107
void vec_remove_node(sparsevec *&v) const
Definition smat.hpp:287
Definition smat.hpp:43

References SMat< ACoeffRing >::sparsevec::coeff, is_zero(), SMat< ACoeffRing >::sparsevec::next, p, ring(), SMat< ACoeffRing >::sparsevec::row, vec_new(), and vec_remove_node().

Referenced by row_op().