#pragma once #include #include #include #include namespace Gudhi_laplacian { template using Sparse_row = std::vector >; template void compress_sparse_row(Sparse_row & row) { static_assert(std::is_arithmetic::value, "Only arithmetic types are supported."); Sparse_row tmp(row); row.clear(); std::sort(tmp.begin(), tmp.end()); for (auto it = tmp.cbegin(); it != tmp.cend(); ++it) { if (row.empty()) { if (it->second != T()) { row.push_back(*it); } } else if (it->first == row.back().first) { T x = row.back().second + it->second; if (x == T()) { row.pop_back(); } else { row.back().second = x; } } else if (it->second != T()) { row.push_back(*it); } } } }