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

◆ row_permute()

template<typename CoeffRing>
bool SMat< CoeffRing >::row_permute ( size_t start_row,
M2_arrayint perm )

Definition at line 1010 of file smat.hpp.

1011{
1012 // We copy one row to another location for each cycle in 'perm' of length > 1.
1013 size_t nrows_to_permute = perm->len;
1014 bool *done = newarray_atomic(bool, nrows_to_permute);
1015 for (size_t i = 0; i < nrows_to_permute; i++) done[i] = true;
1016 for (size_t i = 0; i < nrows_to_permute; i++)
1017 {
1018 size_t j = perm->array[i];
1019 if (!done[j])
1020 {
1021 ERROR("expected permutation");
1022 freemem(done);
1023 return false;
1024 }
1025 done[j] = false;
1026 }
1027 for (size_t c = 0; c < ncols_; c++) vec_permute(columns_[c], start_row, perm);
1028 return true;
1029}
void vec_permute(sparsevec *&v, size_t start_row, M2_arrayint perm) const
Definition smat.hpp:772
sparsevec ** columns_
Definition smat.hpp:234
size_t ncols_
Definition smat.hpp:233
Definition smat.hpp:43
void freemem(void *s)
Definition m2-mem.cpp:103
const int ERROR
Definition m2-mem.cpp:55
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References columns_, ERROR, freemem(), ncols_, newarray_atomic, and vec_permute().

Referenced by MatElementaryOps< SMat< RT > >::row_permute().