/*++ Copyright (c) 2017 Microsoft Corporation Module Name: Abstract: Author: Lev Nachmanson (levnach) Revision History: --*/ #pragma once #include "math/lp/numeric_pair.h" #include "util/vector.h" #include #include "math/lp/lp_settings.h" namespace lp { // used for debugging purposes only template class matrix { public: virtual T get_elem (unsigned i, unsigned j) const = 0; virtual unsigned row_count() const = 0; virtual unsigned column_count() const = 0; virtual void set_number_of_rows(unsigned m) = 0; virtual void set_number_of_columns(unsigned n) = 0; virtual ~matrix() {} bool is_equal(const matrix& other); bool operator == (matrix const & other) { return is_equal(other); } T operator()(unsigned i, unsigned j) const { return get_elem(i, j); } }; template void apply_to_vector(matrix & m, T * w); unsigned get_width_of_column(unsigned j, vector> & A); void print_matrix_with_widths(vector> & A, vector & ws, std::ostream & out, unsigned blanks = 0); void print_string_matrix(vector> & A, std::ostream &, unsigned blanks_in_front = 0); template void print_matrix(matrix const * m, std::ostream & out); template void print_matrix(const vector> & A, std::ostream & out, unsigned blanks_in_front = 0) { vector> s(A.size()); for (unsigned i = 0; i < A.size(); i++) { for (const auto & v : A[i]) { s[i].push_back(T_to_string(v)); } } print_string_matrix(s, out, blanks_in_front); } }