#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

extern matrix multiplicate(matrix*, matrix*);
extern matrix multiplicate(matrix*, float);
extern matrix add(matrix*, matrix*);
extern matrix substract(matrix*, matrix*);
extern matrix invert(matrix*);
extern matrix transpose(matrix*);
extern float determinant(matrix*);
extern matrix get_row(int, matrix*);
extern matrix get_column(int, matrix*);
extern int is_identical(matrix*, matrix*);
extern matrix get_matrix_ex_r_c(int, int, matrix*);
extern int random_number(int min, int max);
extern string gen_text_matrix(matrix*);
extern string export_matrix(matrix*);
extern matrix gen_matrix_from_text(int, int, const string&);
extern void tokenize_string(const string&, vector<string>&, const string&);
template <typename T> extern string to_string(const T& value);

/*
 * Converts a type into string
 */
template <typename T>
string to_string(const T& value)
{
	ostringstream oss;
	oss << value;
	return oss.str();
}

/*
 * used when generating text matrices
 * by 'gen_text_matrix()'
 */
struct TabItem
{
	float num_tabs;		// tabs to add
	float val_one_tab;	// the value to add one tab to
};


syntax highlighted by Code2HTML, v. 0.9.1